Алан Даун (Alan Down)
Настройка производительности SQLBase стала существенно легче. Новая утилита быстро обращается к тем запросам, которые представляют наибольший интерес.
Приходилось ли Вам производить настройку SQL в системах SQLBase? С чего Вы начинали?Существуют, вероятно, тысячи операторов SQL, которыми пользуются каждый день, но с их помощью нельзя обнаружить операторы, ограничивающие производительность системы.Настройка, в случае отсутствия исходного кода, является тем средством, которое обеспечивает корректное конфигурирование SQLBase.
Многие системы написаны исходя из тестовых баз данных, не содержащих реальные объемы данных. Поэтому программисты часто должны догадываться, какой оператор SQL будет обеспечивать наилучшую производительность. На стадии разработки часто добавляют индексы, однако, без четкого понимания, какая от них в итоге будет польза. Такой подход приводит к созданию малоэффективных систем.
Попыткой облегчить эту проблему является разработанное нами приложение SQLPerformance. Оно является MFC приложением для мониторинга деятельности базы данных и выявления наиболее часто выполняющихся и отнимающих наибольшее время операторов SQL. Это приложение контролирует исполнение сервером операторов SQL и создает и упорядочивает список, в котором фиксируется число обращений и максимальное время выполнения каждой оператора. Этот список затем сортируется таким образом, чтобы наиболее часто запрашиваемые и самые ресурсоемкие операторы размещались в начале списка. В результате, используя этот список, можно просмотреть деятельность и план исполнения каждого оператора.
SQLPerformance достигает этого, используя средства аудита SQLBase. SQLBase ревизует все исполняемые операторы SQL в файл на сервере и затем считывает этот файл посредством SQLBase File Handling API (при этом не требуется наличия совместно используемых директорий). Каждый встречающийся в списке оператор проверяется на текущее выполнение. В положительном случае значение счетчика увеличивается, в отрицательном - в список включается новый оператор. Наконец, список сортируется в порядке убывания (время исполнения * число обращений). Этот список обновляется каждые три секунды.
Как использовать SQLPerformance
Запустите SQLPerformance, введите имя Вашего SQLBase сервера (например, "Server1") и пароль (это поле можно оставлять пустым для локальных версий SQLBase); убедитесь в том, что опция Append не помечена и установите значение поля Minimum Time равным 0. Затем нажмите Start. Теперь SQLPerformance соединится с SQLBase сервером и начнет аудит под названием SQLPERF. Имя аудит-файла выводится в названии окна. Каждые три секунды будет появляться курсор ожидания по мере того, как аудит-файл будет выводиться и анализироваться вместе с формированием списка. Теперь запустите какие-нибудь оператора SQL по базе данных в SQLTalk. Вы увидите, что они выводятся в список. Повторный запуск этих операторов приведет к возрастанию счетчика в колонке. Вы также увидите, что размер аудит-файла начнет расти. Аудит-файлы растут очень быстро, поэтому удостоверьтесь в том, что дискового пространства достаточно! Можно установить максимально разрешенный размер файла в поле "Max Audit Size".
Вы можете также установить фильтр для просмотра списка, выбрав только те операторы, которые исполняются больше некоторого заданного времени, либо только операторы при работе с некоторой конкретной базой данных.
При нажатии кнопки Stop аудит будет закончен и для обновления списка будет использован последний проход по аудит-файлу. В качестве примера смотрите Рис.1.
Рис.1 Использование SQLPerformance
Вы не можете изменять установки во время действия аудита. Для того, чтобы внести изменения, необходимо сначала остановить аудит. Используйте опцию Append для продолжения действия с тем же самым аудит-файлом.
Для полного просмотра операторов SQL отметьте их в списке после выделения таблицы SQL. Для просмотра планов исполнения выделите таблицу Execution Plan. При первой попытке просмотра плана исполнения SQLPerformance сделает запрос на начало работы с базой данных. Такой запрос при просмотре планов исполнения делается только один раз при работе с каждой отдельной базой данных.
Выход из SQLPerformance в ходе аудита автоматически останавливает последний. Предостережение: в случае закрытия SQLPerformance или выключения компьютера во время аудита, SQLBase не прекращает аудит. В этом случае необходимо прекратить процесс вручную в программе SQLTalk командой:
STOP AUDIT SQLPERF
Если Вы удовлетворены работой SQLPerformance, запускайте свое приложение и постарайтесь запустить наиболее ресурсоемкую функцию. Теперь можно начать настройку.
Рамки данной статьи не позволяют подробно объяснить работу SQLBase. Единственное, что стоит отметить, это то, что последняя колонка содержит индексированные в базе данных колонки. Для более полной информации см. "Глава 15: Введение в оптимизацию запросов" Расширенное Руководство Пользователя SQLBase ("Chapter 15: Introduction to Query Optimization" in the SQLBase Advanced Topics Guide ).
Как работает SQLPerformance
SQLPerformance использует C-API SQLBase для всех типов баз данных и всех видах доступа к файлам. Связь с сервером реализуется через SQLCSV. Аудит запускается с помощью SQLCBV и SQLEXE для компилирования и выполнения следующих операторов:
START AUDITING PERFM SQLPERF TO [directory]
SIZE 0 APPEND 1 CATEGORY 2
возвращая дескриптор сервера от SQLCSV. (Примечание: Команда не документирована.) Если аудит уже начался, таймер периодически обновляет дисплей. Каждый раз, когда список обновляется, для извлечения из файла 1,024-байтовых блоков используются функции SQLMOP (открыть удаленный файл), SQLMRD (считать блок из открытого файла) и SQLMCL (закрыть удаленный файл). Эти блоки затем анализируются в списке.
В ходе просмотра плана выполнения осуществляется подключение к соответствующей базе данных SQLBase с использованием SQLCNC, при этом оператор компилируется с помощью SQLCBV, и план выполнения извлекается посредством SQLGET с параметром SQLPEXP. Результирующая строка затем анализируется и вводится в список плана выполнения. Наконец колонки, связанные с этим индексом, и статистика строк в таблице извлекаются с помощью следующих операторов:
SELECT colname, rowcount FROM SYSKEYS,
SYSTABLES WHERE IXNAME (+) =:1 AND
NAME = :2 ORDER BY colno
SQLPerformance специально игнорирует приведенные выше операторы, чтобы они не появлялись в списке!
Приложение SQLPerformance написано на Microsoft Visual C++ , версия 5.0. Мы сделали так для того, чтобы ограничить требования по времени выполнения для пользователей без инсталляции CTD. Исполняемый файл скомпонован статически, так что нет никакой необходимости инсталлировать динамически загружаемые библиотеки MFC.
Будущие улучшения
В настоящее время SQLPerformance при каждом обновлении считывает файл из SQLBase полностью. В следующей версии планируется всякий раз запоминать текущее положение и возвращать его при следующем считывании. Это означает, что при обновлении списка не будет необходимости каждый раз полностью перестраивать его. Это улучшит эффективность работы приложения. Если у Вас есть пожелания, описание ошибок или комментарии, сообщите об этом. Удачной настройки!
Об авторе: Alan Down - внештатный разработчик, специализирующийся на продуктах Centura, Visual C++ и 3COM.