Мониторинг ожиданий локировок и ресурсов
Некоторые узкие места в производительности могу быть не связаны с базой данных, а обусловлены ограничениями программного кода приложения.
Администратор может выполнять мониторинг ожиданий локировок и ресурсов для идентификации потенциальных узких мест, вызванных приложением.
Ожидания локировок и ресурсов являются показателями производительности для клиентских процессов, которые пытаются получить доступ к разделяемой памяти.
Ожидания локировок (Lock waits) указывают на то, сколько раз СУБД вынуждена ожидать освобождения локировки записи. Ожидания ресурсов (Resource waits) – это количество ожиданий СУБД доступности таких ресурсов разделяемой памяти как локировка буфера (buffer lock) или локировка завершения транзакции (transaction end lock).
Обычно такие ожидания возникают если в коде приложения неправильно определена область видимости транзакций или используется неправильная стратегия локировки записей, например, используется оптимистическая локировка (Optimistic locking). Оптимистическая локировка предполагает, что никто не изменит данные в базе данных кроме вас, поэтому нет необходимости локировать эти данные на время работы всего приложения. В результате возникает множество конфликтов локировки записей и появляются высокие значения ожиданий локировки и ожиданий ресурсов, а также низкий уровень параллелизма. Как следствие, пользователи получают плохое время отклика системы.
Если администратор наблюдает чрезмерно высокие значения ожиданий локировок или ресурсов, то он должен сообщить об это разработчикам приложения. Разработчики должны изменить код приложения так, чтобы оно использовало более эффективную стратегию локировки записей и выполняло более мелкие транзакции для того, чтобы локировка записи удерживалась в течение кратчайшего периода времени (тюнинг приложений выходит за рамки этого учебного пособия). В итоге параллелизм и время отклика системы будут улучшены.
Мониторинг ожиданий локировок с PROMON
Для мониторинга ожиданий локировок можно использовать PROMON или OpenEdge Management.
Процедура мониторинга с помощью PROMON:
- Открыть PROMON с подключением к базе данных:
- В поле ввода Enter your selection ввести R&D и нажать клавишу Enter для получения доступа к расширенным опциям.
- В меню Main (Top) Menu ввести цифру 2 (Activity Displays) и нажать Enter.
- В меню Activity Displays ввести цифру 1 (Activity: Summary) и нажать Enter.
Пример:
Event Total Per Sec |Event Total Per Sec Commits 54106 45.1 |DB Reads 101010 84.2 Undos 20242 16.9 |DB Writes 205660 171.4 Record Reads 195840K 167116.9 |BI Reads 19607 16.3 Record Updates 413963 345.0 |BI Writes 48393 40.3 Record Creates 323372 269.5 |AI Writes 66658 55.5 Record Deletes 16936 14.1 |Checkpoints 33 0.0 Record Locks 3742320 3118.6 |Flushed at chkpt 1 0.0 Record Waits 206 0.2 |Active trans 237 Rec Lock Waits 0 % BI Buf Waits 0 % AI Buf Waits 0 % Writes by APW 96 % Writes by BIW 35 % Writes by AIW 99 % DB Size: 334 GB BI Size: 12 GB AI Size: 210 MB Empty blocks: 736 Free blocks: 2533 RM chain: 16 Buffer Hits 99 % Primary Hits 99 % Alternate Hits 99 % 225 Servers, 2671 Users (1988 Local, 683 Remote, 429 Batch), 4 Apws
На этом экране необходимо обратить внимание на показатели Record Waits и Rec Lock Waits.
- Record Waits – указывает на то, сколько раз пользователи ожидали получения доступа к залокированной записи.
- Rec Lock Waits – указывает на процент доступов к записям, которые приводят к ожиданиям локировки.
Наличие больших значений в этих полях означает, что процессы базы данных испытывают множество ожиданий.
Если на предыдущем экране администратор видит наличие в системе ожиданий локировок, то с помощью PROMON он также может получить более подробную расшифровку типов ожиданий.
- В меню Activity Displays ввести цифру 7 (Lock Table) и нажать Enter.
Total Per Min Per Sec Per Tx Requests: Share 4361636 218082 3634.70 80.61 Intent Share 0 0 0.00 0.00 Exclusive 3703266 185163 3086.05 68.44 Intent Exclusive 7727 386 6.44 0.14 Share Intent Excl 0 0 0.00 0.00 Upgrade 11425 571 9.52 0.21 Record Get Lock 4343507 217175 3619.59 80.28 Table Lock 27614 1381 23.01 0.51 Record Lock 3718967 185948 3099.14 68.73 Grants: Share 4363896 218195 3636.58 80.65 Intent Share 0 0 0.00 0.00 Exclusive 3717215 185861 3097.68 68.70 Intent Exclusive 7732 387 6.44 0.14 Share Intent Excl 0 0 0.00 0.00 Upgrade 11422 571 9.52 0.21 Record Get Lock 4343505 217175 3619.59 80.28 Table Lock 27614 1381 23.01 0.51 Record Lock 3718462 185923 3098.72 68.73 Waits: Share 36 2 0.03 0.00 Intent Share 0 0 0.00 0.00 Exclusive 326 16 0.27 0.01 Intent Exclusive 0 0 0.00 0.00 Share Intent Excl 0 0 0.00 0.00 Upgrade 3 0 0.00 0.00 Record Get Lock 0 0 0.00 0.00 Table Lock 0 0 0.00 0.00 Record Lock 362 18 0.30 0.01 Requests Cancelled 5 0 0.00 0.00 Downgrades 36457 1823 30.38 0.67 Redundant Requests 2922437 146122 2435.36 54.01 Shared Find 204956 10248 170.80 3.79 Exclusive Find 87209 4360 72.67 1.61
На этом экране перечислены различные категории операций, такие как Requests, Grants, Waits и Find. Показатели ожиданий отображаются в виде общего количества (поле Total), за минуту (поле Per Min), в секунду (поле Per Sec) и за одну транзакцию (поле Per Tx). Наиболее важной из категорий является Waits, которая показывает сколько раз пользователи ожидали различные типы локировок, включая Share, Exclusive, Upgrade, Table Lock и Record Lock. Обратите особое внимание на операции локировок Exclusive и Record Lock, так как они оказывают наибольшее влияние на производительность.
Мониторинг ожиданий ресурсов в PROMON
Мониторинг ожидания ресурсов можно выполнять с помощью PROMON, где показатели отображаются в общем виде, за минуту, в секунду и за одну транзакцию.
Следующая процедура описывает действия для мониторинга ожиданий ресурсов в PROMON:
- Открыть PROMON с подключением к базе данных.
- В поле ввода Enter your selection ввести R&D и нажать Enter.
- В меню Main (Top) Menu ввести цифру 3 (Other Displays) и нажать Enter
- В меню Other Displays ввести цифру 1 (Performance Indicators) и нажать Enter.
Total Per Min Per Sec Per Tx Commits 54106 2705 45.09 1.00 Undos 20242 1012 16.87 0.37 Index operations 206836K 10590028 176500.47 3914.55 Record operations 196577K 10064729 167745.48 3720.37 Total o/s i/o 441403 22070 367.84 8.16 Total o/s reads 120621 6031 100.52 2.23 Total o/s writes 320782 16039 267.32 5.93 Background o/s writes 200171 10009 166.81 3.70 Partial log writes 15643 782 13.04 0.29 Database extends 8832 442 7.36 0.16 Total waits 444312 22216 370.26 8.21 Lock waits 206 10 0.17 0.00 Resource waits 444106 22205 370.09 8.21 Latch timeouts 341495 17075 284.58 6.31 Buffer pool hit rate: 99 % Primary pool hit rate: 99 % Alternate pool hit rate: 99 %
Здесь обратите внимание на строку Resource waits. Высокие показания ожиданий ресурсов в этой строке являются индикатором наличия узкого места в производительности.
Мониторинг ожиданий локировок в OE Management
Вместо PROMON мониторинг ожиданий локировок можно выполнять с помощью OpenEdge Management. Далее приведены действия, описывающие эту процедуру:
- Подключиться к OpenEdge Management:
- Выбрать в Windows Start -> All Programs -> Progress -> OpenEdge -> Database Administration Console.
- Или в веб-браузере ввести адрес:
http://localhost:9090
- В консоли OpenEdge Management перейти на страницу базы данных, мониторинг которой необходимо выполнить.
- В секции Operational Views щёлкнуть по ссылке Locks and Latches.
- На открывшейся странице информация об ожиданиях локировок будет показана в секции Lock summary.
Здесь внимание необходимо обратить на столбец Waits в строке Exclusive Locks. Чем большее значение здесь представлено, тем больше конфликтов локировок испытывают пользователи при выполнении транзакций.
Мониторинг ожиданий ресурсов с OE Management
Консоль OpenEdge Management можно использовать для мониторинга ожиданий ресурсов. Далее приведены действия, описывающие эту процедуру:
- Подключиться к OpenEdge Management:
- Выбрать в Windows Start -> All Programs -> Progress -> OpenEdge -> Database Administration Console.
- Или в веб-браузере ввести адрес:
http://localhost:9090
- В консоли OpenEdge Management перейти на страницу базы данных, мониторинг которой необходимо выполнить.
- В секции Operational Views щёлкнуть по ссылке Memory Resources.
- На открывшейся странице информация об ожиданиях ресурсов будет представлена в секции Resources summary.
Здесь обратите внимание на столбец Waits строки Record Lock. Чем большее значение здесь представлено, тем больше конфликтов локировок испытывают пользователи при выполнении транзакций.