Версия для печати.   http://trsoft.ru/articles/6/?vprint=Y

Обновление статистики СУБД IBM DB2

 

Выполнение регламентных процедур по обслуживанию баз данных - непременное условие обеспечения оптимальной работы системы. Особенно это актуально для крупных информационных систем. Но также не менее актуальной задачей является выполнение регламентных процедур в условиях проведения нагрузочного тестирования или других работ по анализу производительности. Рассмотрим пример администрирования IBM DB2 из командной строки, а также выполнения SQL-запросов к базе под управлением IBM DB2 из командной строки и из текстового файла.

Актуальность регламентных операций связана с двумя причинами. Во-первых, в условиях тестов обычной является ситуация, когда информация в базах изменяется в короткие сроки на значительные объемы данных. Приведем пример: производится массовое создание элементов справочников, создание и проведение документов, проводятся восстановления предыдущих копий баз, базы переносятся с одного оборудования на другое. Во-вторых, само программное обеспечение, используемое в ходе тестов, не всегда представлено финальными или рекомендованными версиями продуктов. В таком случае, условия работы далеки от идеальных: имеют место постоянные запуски, перезапуски и остановки, в том числе аварийные. В результате в короткие сроки может сложиться сложная ситуация. Запросы СУБД к базе станут настолько неоптимальными, что производительность системы упадет в разы, но при этом серьезная загрузка оборудования не будет наблюдаться. Такое поведение системы может служить достаточно характерным сигналом о необходимости проведения регламентных процедур, в первую очередь это обновление статистики и очистка процедурного кэша. Планы запросов строятся СУБД с использованием статистики базы данных, а в условиях быстро меняющихся данных и нестабильного режима работы статистика может устаревать очень быстро.

Методика проведения указанных мероприятий для MS SQL Server подробно изложена в статье Константина Рупасова «Регламентные операции на уровне СУБД для MS SQL Server», в данной же статье описывается методика обновления статистики и очистки процедурного кэша для IBM DB2.

Для IBM DB2, в отличие от MS SQL Server, при обычной работе на версиях СУБД DB2, рекомендованных для программного обеспечения фирмы «1С», выполнение подобных операций, скорее всего, не потребуется, т.к. они производятся автоматически. Однако, как указывалось выше, в условиях проведения нагрузочного тестирования или других работ по анализу производительности, может возникнуть необходимость в принудительном выполнении их вручную.

Все дальнейшие работы проводятся из командной строки.

Процессор командной строки DB2 вызывается (при установке по умолчанию):

В Windows:

Пуск – Все программы – IBM DB2 – DB2COPY1(по умолчанию) – Инструменты командной строки – Командное окно ("C:\Program Files\IBM\SQLLIB\BIN\DB2CW.BAT")

B Linux (из-под root):

su – db2inst

где db2inst – пользователь инстанса, созданный при установке

С базой нужно соединиться:

db2 connect to tc3

где tc3 – имя базы

Проверить настройку автоматического обновления статистики можно командой:

db2 get db cfg for tc3

Должно быть (это установка по умолчанию):

AUTO_MAINT = ON
AUTO_TBL_MAINT = ON
AUTO_RUNSTATS = ON

Установить их, если они почему-либо другие, можно командой:

db2 update db cfg for tc3 using AUTO_MAINT ON
db2 update db cfg for tc3 using AUTO_TBL_MAINT ON
db2 update db cfg for tc3 using AUTO_RUNSTATS ON

Проверить время последнего обновления статистики можно так:

SQL-запросы можно выполнять и из командной строки, например:

db2 select stats_time from syscat.tables where tabschema='SYSIBM' and tabname='SYSTABLES'

однако это может оказаться менее удобно из-за необходимости исправлять синтаксические ошибки в запросах :)

В результате увидим время последнего сбора статистики для таблиц базы и для ее индексов:

Если актуальность статистики нас не устраивает, ее можно обновить вручную, выполнив SQL-запрос (через файл или из командной строки процессора):

call admin_cmd('runstats on table sysibm.systables and indexes all')

При успешном выполнении возвращает статус возврата = 0, можно затем проверить актуальность:

Очистка процедурного кэша:

db2 FLUSH PACKAGE CACHE DYNAMIC

Она нужна только для тех, кто скомпилировал свои запросы до сбора статистики. Эту команду необходимо выполнять под пользователем инстанса.

Работа закончена, отсоединяемся от базы:

db2 connect reset
 
ГК Трейд Софт, Москва
Автор: Филиппов Е.В.
Дата публикации: 02.02.2010 г.