 | Уровень сложности: простой Мартин Хабел, редактор", IDUG Solutions Journal
25.03.2008 Измерение показателей работы системы очень важно при создании и управлении приложениями вашей организации. Продукт IBM® DB2® Universal Database™ (UDB) на платформах Linux™, UNIX™ и Windows® имеет функциональные возможности для выявления проблем, измерения производительности и анализа тенденций. В данной статье Мартин Хабел исследует мониторы событий и снимков текущего состояния, объясняет процесс создания таблиц снимков текущего состояния, их заполнения при помощи сценариев, разработки отчетов по данным и интерпретации результатов. Данная статья поможет лучше понять рабочие нагрузки вашей организации.
При создании или управлении приложениями важной задачей является достижение хорошей производительности. Фактически, пользователи всегда ожидают идеальной производительности, даже если это и не было включено в требования.
Для того чтобы управлять чем-то, в том числе производительностью, вы должны быть способны измерить это что-то. Продукт DB2 UDB для Linux, UNIX и Windows имеет много функциональных возможностей для измерения производительности и отслеживания активности системы. Эти возможности позволяют измерять активность практически с любым уровнем детализации, который требуется для администраторов базы данных (DBA - Database Administrator), прикладных разработчиков и системных администраторов.
Цели мониторинга
Тремя главными целями мониторинга являются выявление проблем, измерение производительности и анализ тенденции изменения. Значение выявления проблем очевидно: вы или кто-нибудь еще обнаружили проблему и работаете над ее решением. Для решения этой задачи необходимо знать, что происходит в системе в данный момент времени, поскольку важно понять, что вызывает или вызвало проблему. Использование приемов управления производительностью и слежением за ней поможет избежать большинства проблем.
Управление производительностью позволяет оптимально использовать ресурсы и гарантировать отсутствие некоторых проблем. Используя информацию и приемы управления производительностью, вы можете сэкономить время, затрачиваемое на выявление проблемы, и повысить степень удовлетворенности пользователей.
Анализ тенденции изменения переносит управление производительностью на новый уровень, когда исторические данные сохраняются и используются для определения направлений развития и тенденций изменений в работе. Это поможет определять изменения в общей работе системы и планировать обновления аппаратного обеспечения при их необходимости. Также, если имеется неожиданный скачок в работе системы (отличный от предположений), такой анализ позволит вам задать вопрос: "А что изменилось?".
Тенденции использования DB2 обычно соответствуют динамике бизнес-деятельности, но не всегда. Подразделение организации обычно знает периоды повышенной загрузки, но не всегда должным образом оценивает их влияние на системные ресурсы. Для решения проблем загрузки системы полезно сравнить ее активность с таким же периодом день назад или на прошлой неделе, в прошлом месяце или году. Это позволяет определить изменения между этими периодами. Знание тенденций в использовании системы поможет в принятии решений по настройке, особенно связанных с конфигурационными параметрами менеджера базы данных и самой базы данных.
Типы мониторов
Для решения задач мониторинга DB2 предоставляет два типа мониторов: мониторы снимков текущего состояния (snapshot) и мониторы событий (event). Мониторы снимков текущего состояния показывают активность системы в данный момент времени. Их можно рассматривать как моментальный снимок активности системы. Они покажут, какие приложения подключены к базе данных, помогут обнаружить проблемы блокировок и увидеть текущее использование буферного пула, табличной области и таблиц, а также выполняющиеся запросы. Мониторы снимков текущего состояния становятся намного полезнее при ведении истории и сравнении снимков, полученных в разное время.
Мониторы событий, в отличие от мониторов снимков текущего состояния, перехватывают все, что происходит в интересующей вас области за определенный период времени. Мониторы событий можно рассматривать не просто как снимки, а как видеофильм, который показывает все происходящее. DB2 генерирует запись в начале и конце многих событий. В то время как мониторы снимков текущего состояния наиболее полезны при возникновении проблемы, мониторы событий наиболее востребованы при использовании их в исторической ретроспективе, например, для планирования ресурсов или анализа тенденции изменений.
В DB2 Version 8 сохранение истории стало проще, благодаря возможности записи мониторов событий напрямую в таблицы DB2 и появлению табличных функций для сохранения снимков текущего состояния в таблицы DB2.
Мониторы снимков текущего состояния
Чтобы использовать мониторы снимков текущего состояния, нужно сначала включить их, используя следующую команду:
db2 update monitor switches using bufferpool
on lock on sort on statement on table on uow on |
Можно также управлять ключами мониторов в конфигурации менеджера базы данных, за исключением ключа монитора table, который всегда нужно запускать при помощи приведенной выше команды.
Для проверки состояния ключей мониторов можно использовать команду Get Monitor Switches:
Выводимая информация может немного отличаться для различных версий DB2
В следующей таблице приведены команды для включения монитора снимков текущего состояния и основные типы собираемой информации:
|
Ключи монитора
|
Собираемая информация
|
Команда для включения
| |
Buffer Pool
|
Статистика использования буферного пула
|
db2 update monitor switches using BUFFERPOOL on
| |
Lock Info
|
Количество возникших блокировок и все взаимные блокировки
|
db2 update monitor switches using LOCK on
| |
Sort Info
|
Переполнения при сортировке, количество сортировок
|
db2 update monitor switches using SORT on
| |
Statement
|
Просмотр выполняемых в данный момент времени SQL-запросов на сервере DB2 (полезно при поиске долго выполняющихся запросов)
|
db2 update monitor switches using STATEMENT on
| |
Table Activity
|
Статистика использования по чтению и записи
|
db2 update monitor switches using TABLE on
| |
Timestamp Info
|
Метка времени (необходима для многих функций, работающих со снимками текущего состояния)
|
db2 update monitor switches using TIMESTAMP on
| |
Unit of Work
|
Статистика по единицам работы, включая время начала и окончания и состояние
|
db2 update monitor switches using UOW on
|
 | |
Примечание: Вообще говоря, имеются незначительные накладные расходы, связанные с включенными мониторами снимков текущего состояния, поскольку основная часть данных уже находится в DB2. При необходимости нужно использовать только ключи для запросов и блокировок. В зависимости от рабочей нагрузки включение всех мониторов может привести к дополнительным издержкам в размере 2-5%.
|
|
После включения мониторов можно просмотреть доступные данные. Для просмотра снимка текущего состояния используется команда GET SNAPSHOT. На рисунке 3 показаны доступные команды для просмотра внутреннего состояния DB2:
|
Снимок текущего состояния
|
Команда
| |
Буферный пул
|
db2 get snapshot for bufferpools on database_name
| |
Блокировки
|
db2 get snapshot for locks on database_name
| |
Динамический SQL-запрос
|
db2 get snapshot for dynamic sql on database_name
| |
Активность таблицы
|
db2 get snapshot for tables on database_name
| |
Приложения
|
db2 get snapshot for applications on database_name
| |
Табличная область
|
db2 get snapshot for tablespaces on database_name
| |
База данных
|
db2 get snapshot for database on database_name
| |
Менеджер базы данных
|
db2 get snapshot for DBM
|
При использовании командной строки выводится много разрозненной информации. Это указывает на преимущества записи данной информации в таблицу DB2. После создания монитора и сбора данных при помощи некоторой обработки можно уменьшить информацию до приемлемых размеров.
Написание своего собственного монитора снимков текущего состояния
Хотя получить снимки текущего состояния относительно легко, выполните следующий шаг для использования новых табличных функций в DB2 Version 8. Это позволит не только определить проблему, но и выполнить действия по управлению производительностью и анализу тенденций.
Табличные функции позволяют отобразить данные о производительности посредством запросов select. Если в подзапросе применить выражение insert, возвращаемые данные можно сохранить в таблицы DB2.
Для написания монитора снимка текущего состояния нужно выполнить следующие действия:
- Создать snapshot-таблицы.
- Заполнить эти таблицы при помощи сценария.
- Разработать отчеты по данным.
Всего имеется 20 snapshot-функций, но четырьмя самыми важными являются функции для базы данных, буферного пула, табличной области и таблицы. В рассмотренном ниже примере используются функции для работы с буферным пулом.
Настройка snapshot-таблиц
Для создания snapshot-таблиц можно взять определение столбцов из системной таблицы SYSCAT. FUNCPARMS. Данная таблица получит данные из выражения insert.
-- UPQ020 Создать таблицу для хранения снимков текущего состояния буферного пула.
-- Снимки записываются в эту таблицу при помощи UPS021.
--
-- UPQ022 и следующие сценарии буду содержать SQL-запросы
-- для отчетов по этим таблицам.
--
CREATE TABLE BP_SNAP (
SNAPSHOT_TIMESTAMP TIMESTAMP,
POOL_DATA_L_READS BIGINT,
POOL_DATA_P_READS BIGINT,
POOL_DATA_WRITES BIGINT,
POOL_INDEX_L_READS BIGINT,
POOL_INDEX_P_READS BIGINT,
POOL_INDEX_WRITES BIGINT,
POOL_READ_TIME BIGINT,
POOL_WRITE_TIME BIGINT,
POOL_ASYNC_DATA_RD BIGINT,
POOL_ASYNC_DT_WRT BIGINT,
POOL_ASYNC_IX_WRT BIGINT,
POOL_ASYNC_READ_TM BIGINT,
POOL_ASYNC_WR_TIME BIGINT,
POOL_ASYNC_DT_RDRQ BIGINT,
DIRECT_READS BIGINT,
DIRECT_WRITES BIGINT,
DIRECT_READ_REQS BIGINT,
DIRECT_WRITE_REQS BIGINT,
DIRECT_READ_TIME BIGINT,
DIRECT_WRITE_TIME BIGINT,
POOL_ASYNC_IX_RDS BIGINT,
POOL_DATA_TESTORE BIGINT,
POOL_INDEX_TESTORE BIGINT,
POOL_INDEX_FESTORE BIGINT,
POOL_DATA_FESTORE BIGINT,
UNREAD_PREF_PGS BIGINT,
FILES_CLOSED BIGINT,
BP_NAME CHAR(18),
DB_NAME CHAR(8),
DB_PATH VARCHAR(255),
INPUT_DB_ALIAS CHAR(8) )
In userspace1;
|
Этот DDL-запрос общедоступен на сайте www.db-hq.net. Следующий URL для ввода UPS025 будет определять все четыре таблицы:
http://www.db-hq.net/Articles/db2luw/perfluw/LUWv8SNP/UPS025.sql
Скопируйте текст в файл и сохраните на своем компьютере. Можете создать таблицы, используя следующую команду:
Заполнение snapshot-таблиц
Для записи одного снимка текущего состояния в таблицу BP_SNAP можно использовать следующий SQL-запрос:
-- UPQ021 Сохранение снимка текущего состояния в таблице.
-- Таблица создается при помощи UPQ020.
-- В ближайшем будущем этот запрос будет встроен в сценарий командного процессора.
--
-- UPQ022 и следующие сценарии будут содержать SQL-запросы
-- для отчетов по этим таблицам.
--
INSERT INTO BP_SNAP
SELECT
SNAPSHOT_TIMESTAMP,
POOL_DATA_L_READS,
POOL_DATA_P_READS,
POOL_DATA_WRITES,
POOL_INDEX_L_READS,
POOL_INDEX_P_READS,
POOL_INDEX_WRITES,
POOL_READ_TIME,
POOL_WRITE_TIME,
POOL_ASYNC_DATA_READS,
POOL_ASYNC_DATA_WRITES,
POOL_ASYNC_INDEX_WRITES,
POOL_ASYNC_READ_TIME,
POOL_ASYNC_WRITE_TIME,
POOL_ASYNC_DATA_READ_REQS,
DIRECT_READS,
DIRECT_WRITES,
DIRECT_READ_REQS,
DIRECT_WRITE_REQS,
DIRECT_READ_TIME,
DIRECT_WRITE_TIME,
POOL_ASYNC_INDEX_READS,
POOL_DATA_TO_ESTORE,
POOL_INDEX_TO_ESTORE,
POOL_INDEX_FROM_ESTORE,
POOL_DATA_FROM_ESTORE,
UNREAD_PREFETCH_PAGES,
FILES_CLOSED,
BP_NAME,
DB_NAME,
DB_PATH,
INPUT_DB_ALIAS
FROM TABLE( SNAPSHOT_BP( 'perfdb', -1 )) as SNAPSHOT_BP;
|
Теперь имеется одна строка данных. Можно загрузить приведенный ниже сценарий и применить его для заполнения четырех snapshot-таблиц:
http://www.db-hq.net/Articles/db2luw/perfluw/LUWv8SNP/UPS024.sql
Интерпретация выводимой информации в снимке текущего состояния
Многие аспекты в снимках текущего состояния говорят сами за себя, тогда как некоторые требуют выполнения определенных вычислений.
Простейшим запросом для получения данных снимка текущего состояния является:
-- UPQ022 Наш первый пример запроса данных снимка текущего состояния.
--
-- Таблица создается при помощи UPQ020 и заполняется при помощи UPQ021.
-- В ближайшем будущем UPQ021 будет встроен в сценарий командной строки.
--
SELECT SNAPSHOT_TIMESTAMP AS TSTAMP, POOL_DATA_L_READS AS DATA_LREADS,
POOL_DATA_P_READS AS DATA_PREADS, POOL_DATA_WRITES AS DATA_WRITES,
POOL_INDEX_L_READS AS IX_LREADS, BP_SNAP.POOL_INDEX_P_READS AS IX_PREADS
FROM BP_SNAP;
|
Примечание: Настройка буферного пула является одним из самых лучших способов повышения производительности DB2. Детальное обсуждение вопросов настройки буферного пула выходит за рамки данной статьи, но стоит потратить время на исследование этого важного вопроса. Для начала можно использовать приведенную ниже ссылку на "Учебное пособие по Microsoft Excel". Поищите другие статьи в Web по этой теме. Некоторые хорошие примеры есть на сайте IBM developerWorks":
Основы DB2: Табличные области и буферные пулы
Передовой опыт настройки DB2 UDB Version 8.1 и баз данных.
Для большей читабельности результатов из командной строки, были выбраны не все столбцы. И, конечно же, можно записать условия в предложение WHERE запроса SELECT для вывода только исключительных ситуаций.
Для буферных пулов и табличных областей можно применить много аналогичных условий. Буферные пулы представляют собой области в оперативной памяти. Результаты измерения буферных пулов показывают общую производительность. Табличные области - это файлы, и результаты их измерения показывают индивидуальную производительность.
|
Тип снимка текущего состояния
|
Условие
|
Комментарий
| | Таблица | Поиск таблиц с максимальным количеством читаемых или записываемых строк. | Это самые активные ваши таблицы. Пересмотрите индексы для обеспечения быстрого доступа. | | Буферные пулы | Самые читаемые физические страницы. | Увеличьте буферные пулы при наличии доступной памяти. Используйте оперативную память вместо физического ввода/вывода. | | Буферные пулы / табличные области | Количество закрытых файлов базы данных должно быть равно нулю. | Увеличьте параметр MAXFILOP, если это число не равно нулю. | | Буферные пулы / табличные области | Коэффициенты использования должны быть высокими. | Особенно индексы должны иметь высокий коэффициент использования для обеспечения хорошей производительности. | | Буферные пулы / табличные области | Количество синхронных операций чтения должно быть маленьким. | Асинхронные операции чтения указывают на предварительную выборку. Это означает, что выполняется большое число операция ввода/вывода. Создайте больше индексов или оптимизируйте их. | | Буферные пулы / табличные области | Количество асинхронных операций записи должно быть маленьким. | В отличие от операций чтения, асинхронные операции записи - нормальное явление, поскольку это указывает на то, что транзакции не ожидают записи. | | База данных | Количество переполнений из-за сортировок должно быть маленьким. | Это число указывает на то, что имеется много операций записи и чтения временных файлов на диске. Возможно, следует увеличить SORTHEAP / SHEAPTHRES. | | База данных | DBHEAP должен иметь достаточный размер. | DBHEAP никогда не должен заполняться полностью. Используйте столбец DB_HEAP_TOP снимка текущего состояния базы данных, чтобы увидеть высокий уровень используемости DBHEAP. | | База данных | Коэффициент используемости кэша пакета должен быть большим (>95%). | Проверьте соотношение операций поиска в кэше пакета и операций вставки, чтобы избежать затрат времени на загрузку с диска. | | База данных | Коэффициент используемости кэша каталога должен быть большим (>95%). | Проверьте соотношение операций поиска в кэше каталога и операций вставки, чтобы избежать затрат времени на загрузку с диска. | | База данных | Блокирование | Существует множество вопросов, связанных с блокированием. Таймауты, взаимные блокировки и расширения блокировок указывают на задержки и проблемы. |
Вычисления для буферного пула
В "Руководстве и справочнике по DB2 System Monitor" содержится набор формул, которые можно использовать для определения эффективности буферных пулов. Я автоматизировал их и поместил в рабочую книгу Excel.
Excel Workbook содержит три электронные таблицы. Первая - это вычисление коэффициентов производительности буферных пулов. Вторая - пример получения данных из DB2 в Excel через Open Database Connectivity (ODBC). Третья - графический пример, использующий возможности Excel для построения графиков. Ниже приведена ссылка на эту рабочую книгу:
http://db-hq.net/downloads/BP%20Analysis.xls
Мониторы событий
Для получения полной картины активности системы можно использовать мониторы событий. Они показывают активность от начала до конца и часто состоят из обеих записей событий: как начала, так и его окончания. Чаще всего мониторы событий используются для анализа подключений, блокировок и запросов.
Результат работы мониторов событий можно записать в файлы, именованные каналы (named pipes) и, начиная с версии DB2 Version 8, в таблицы. Выводимая информация может быть блокируемой и не блокируемой. Если она блокируема, гарантируется отсутствие потерь данных, но это может привести к большим проблемам на загруженных работой системах, генерирующих большое количество записей. Обычно блокируемого вывода информации следует избегать, особенно для мониторов событий от запросов, поскольку это может привести к аварийным ситуациям. Можно ограничить уровень модульности монитора событий для одного пользователя или приложения.
Именованные каналы полезны при написании ваших собственных программ для извлечения данных из мониторов. Используйте их в не блокирующем режиме, чтобы избежать влияния на DB2 при повышении интенсивности рабочей нагрузки.
События, связанные с подключениями, полезны для наблюдения за использованием системы пользователем или приложением. Эти данные позволяют идентифицировать плохо работающие программы, наиболее активных пользователей и тенденции изменения использования. Если данные анализируются ежедневно, это предоставляет возможность проследить действия пользователей и обсудить с ними способы работы с приложением и, возможно, провести обучение по SQL или скорректировать дизайн базы данных для наиболее оптимальной поддержки их способа использования DB2.
Можно определить и активизировать несколько мониторов событий, работающих одновременно. События от подключений обычно не занимают много ресурсов и не вызывают проблем. Следующий SQL-запрос определяет монитор событий от всех подключений:
CREATE EVENT MONITOR dlmon FOR CONNECTIONS WRITE TO TABLE;
|
После настройки монитора событий необходимо включить его, используя:
SET EVENT MONITOR dlmon STATE=1; |
Можно также настроить мониторы событий на автоматический запуск при запуске базы данных. Выполнение приведенных выше запросов приводит к созданию четырех таблиц:
- connheader_dlmon
- conn_dlmon
- connmemuse_dlmon
- control_dlmon
Примечание: Настройка буферного пула является одним из наилучших способов повышения производительности DB2. Детальное обсуждение вопросов настройки буферного пула выходит за рамки данной статьи, но стоит потратить время на исследование этого важного вопроса. Для начала можно использовать приведенную ниже ссылку на "Учебное пособие по Microsoft Excel". Поищите другие статьи в интернете по этой теме. Некоторые хорошие примеры есть на сайте IBM developerWorks:
"Основы DB2: Табличные области и буферные пулы"
"Передовой опыт настройки DB2 UDB Version 8.1 и баз данных".
Резюме
Измерение показателей работы системы является ключевым для понимания способа использования DB2 в вашей организации. Анализируя данные о производительности на регулярной основе, вы сможете лучше понять используемые рабочие нагрузки и осуществить корректировки до возникновения проблемы.
Загрузка | Имя | Размер | Метод загрузки |
|---|
| bpanalysis.zip | 37 KB |
FTP | HTTP |
Ресурсы
Об авторе  | |  |
Мартин Хабел (Martin Hubel) - независимый консультант, специализирующийся на вопросах производительности DB2, проблемах проектирования баз данных и восстановления после сбоев на всех платформах DB2. Является участником программы IBM Gold Consultants с момента ее образования в 1994 г. Также является редактором журнала IDUG Solutions Journal. |
Выскажите мнение об этой странице
|  |