Informix складывает план запросов в файл в домашнем каталоге пользователя на сервере. Поэтому возникает некоторое неудобство когда требуется получить план запроса: надо запустить запрос, затем переключится в консоль, подключится к серверу, открыть файл и смотреть полученный файл с планом запроса. Дополнительные вопросы возникают если пользователи не заведены на сервере где запущен экземпляр Informix и соответственно не имеют домашних каталогов. Я решил эту задачу таким образом, что теперь не надо переключаться в консоль и идти на сам сервер, чтобы посмотреть план запроса. Планы запросов теперь складываются в отдельную таблицу в базе и их можно смотреть с помощью обычных sql-запросов. Но обо всем по порядку. Схема работы для получения плана запроса в данном случае такая (предварительно надо установить две функции):
1. Запускаем функцию start_explain() которая производит некоторые подготовительные действия и включает explain
2. Запускаем анализируемый запрос (или несколько запросов)
3. Запускаем функцию stop_explain() - план запроса возвращает функция.
На самом деле на шаге 2 лучше запускать 1 запрос, просто из-за удобства дальнейшего просмотра плана.
Итак, что же делает функция start_explain() ? Все очень просто: она готовит файл для плана запроса на сервере, и включает explain.
Функция stop_explain() читает данный файл и возвращает его содержимое. Этот текст можно скопировать и работать с ним.
Функции start_explain и stop_explain следует устанавливать либо в базу где они будут использоваться, или например в какую то отдельную базу и обращаться к ним из любой базы по имени dbname:start_explain() и dbname:stop_explain. Для обращения из другой базы надо выдать пользователям привилегию connect на базу где эти функции находятся.
Исходные коды функций start_explain и stop_explain можно взять на сайте проекта. Поддерживается версия Informix 11.50.xC6 и выше, поскольку использует external table. Пока работает только на Unix-платформах.
Комментариев нет:
Отправить комментарий