|
Как узнать время ожидания блокировки в версии 11.5
|
|||
---|---|---|---|
#18+
Есть сессия (или несколько сессий) ожидающая освобождения некой блокировки. Необходимо узнать время, потраченное сессией на ожидание этого ресурса. Всё что удалось найти - это время установки самой блокировки в sysmaster:syslcktab.grtime. Но это не та цифра. В 11-ой версии задекларирована дополнительная колонка lkwaittime в sysrstcb: "Time spent waiting on locks". Как я понял, туда попадает суммарное время затраченное на ожидание блокировок. Как можно узнать из sysmaster время текущего (активного) ожидания сессии? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2008, 12:31 |
|
Как узнать время ожидания блокировки в версии 11.5
|
|||
---|---|---|---|
#18+
Вам нужен какой-то показатель (счётчик), который в случае ожидания блокировки "тикает", а если сессия в данный момент ничего не ожидает, то счётчик равен 0? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2008, 13:05 |
|
Как узнать время ожидания блокировки в версии 11.5
|
|||
---|---|---|---|
#18+
Посмотрите на ниже приведенный скрипт - возможно поможет или направит в нужное русло. Для его работы. если не ошибаюсь, нужно в onconfig установить параметр WSTATS в 1 и перестартовать сервер (не знаю, актуально ли для 11.5). Скрипт достаточно старый (последний раз правился более 4-лет назад) и я уже не помню его тонкости и не проверял работоспособность на более новых версиях IDS. Читайте комменты внутри. Можете переделать его под свои нужды - ожидание только блокировок или только для указанных сессий. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2008, 13:33 |
|
Как узнать время ожидания блокировки в версии 11.5
|
|||
---|---|---|---|
#18+
to vasilis: этот скрипт выдаёт статистику - то есть "накопительный итог", я правильно понимаю? to blindness: посмотрите ещё на sysmaster:systhreads.th_startwait ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2008, 13:44 |
|
Как узнать время ожидания блокировки в версии 11.5
|
|||
---|---|---|---|
#18+
vasilisПосмотрите на ниже приведенный скрипт - возможно поможет или направит в нужное русло. Для его работы. если не ошибаюсь, нужно в onconfig установить параметр WSTATS в 1 и перестартовать сервер (не знаю, актуально ли для 11.5). В эту сторону я смотрел и не добился успеха. Проблема в том, что на сервере WSTATS не установлен и администратор против этого. В связи с чем systwaits не содержит информации вообще. Вот еще подумалось посмотреть в сторону самого запроса. Может быть можно узнать хотя бы время последнего разбора запроса сервером или врема начала исполнения запроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2008, 15:12 |
|
Как узнать время ожидания блокировки в версии 11.5
|
|||
---|---|---|---|
#18+
blindnessВ эту сторону я смотрел и не добился успеха. Проблема в том, что на сервере WSTATS не установлен и администратор против этого. В связи с чем systwaits не содержит информации вообще. если у вас с админом не будет контакта, то вам будет очень трудно анализировать поведение ваших запросов в реальной среде. Придется или эмулировать промсреду у себя или, на время, все таки убеждать админа или руководство в необходимости исследований на реальной системе (хотя бы на уровне снятия статистики) или "забить" на все(х)... blindness Вот еще подумалось посмотреть в сторону самого запроса. Может быть можно узнать хотя бы время последнего разбора запроса сервером или врема начала исполнения запроса? Почитайте в новой доке (11.1+) на тему "Monitor and Analyze Recent SQL Statements" You can now monitor the performance of recently executed SQL statements by configuring SQL statement tracing. This feature provides statistical information about each SQL statement executed on the system. The statistical information is stored in a circular buffer, which the DBA can resize. By default, this feature is turned off. The feature can be enabled for all users, or for just a specific set of users. This feature allows for easy analysis of SQL statements for performance and tuning purposes. примеры возможностей можно посмотреть в презентации "Improving IDS Administration Zone" http://www.informix-zone.com/files/presentations/SimpleAdminInIDSV2.pdf с 16 по 20 слайд ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2008, 16:15 |
|
Как узнать время ожидания блокировки в версии 11.5
|
|||
---|---|---|---|
#18+
Почитайте про SQL Tracing там как раз есть для каждого выполненного запроса много разной полезной информации в том числе и поле LK Wait (может быть это оно). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2008, 16:22 |
|
Как узнать время ожидания блокировки в версии 11.5
|
|||
---|---|---|---|
#18+
АнатоЛойВам нужен какой-то показатель (счётчик), который в случае ожидания блокировки "тикает", а если сессия в данный момент ничего не ожидает, то счётчик равен 0? да. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2008, 18:51 |
|
Как узнать время ожидания блокировки в версии 11.5
|
|||
---|---|---|---|
#18+
vasilisесли у вас с админом не будет контакта, то вам будет очень трудно анализировать поведение ваших запросов в реальной среде. vasilis You can now monitor the performance of recently executed SQL statements by configuring SQL statement tracing. контакт-то есть. только среда реальная и нагружать её дополнительной работой в виде трассировок накладно и не приветствуется. хотелось бы использовать предопределенные структуры/данные - должен же сервер знать время работы сессии дабы уметь оборвать её по истечению тайм-аута, например. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2008, 19:12 |
|
Как узнать время ожидания блокировки в версии 11.5
|
|||
---|---|---|---|
#18+
АнатоЛойВам нужен какой-то показатель (счётчик), который в случае ожидания блокировки "тикает", а если сессия в данный момент ничего не ожидает, то счётчик равен 0? Я не уверен на 100 % ИМХО в этом случае и счетчик всегда будет равен =0. Потому что как только сессия упрется в блокировку, она уснет, и примет статус готова к выполнению после того как это блокировка будет освобождена (передана этой сессии). Если моя логика ошибочна, ткните носом в доку где бы описывалось поведение Informix в этом случае. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2008, 19:16 |
|
Как узнать время ожидания блокировки в версии 11.5
|
|||
---|---|---|---|
#18+
blindnessАнатоЛойВам нужен какой-то показатель (счётчик), который в случае ожидания блокировки "тикает", а если сессия в данный момент ничего не ожидает, то счётчик равен 0? да. Вам нужно знать состояние счетчика или достаточно информации о том, что сесия ожидает блокировку? Если второе, то это видно по onstat -u ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2008, 19:17 |
|
Как узнать время ожидания блокировки в версии 11.5
|
|||
---|---|---|---|
#18+
cprВам нужно знать состояние счетчика или достаточно информации о том, что сесия ожидает блокировку? Если второе, то это видно по onstat -u Упс. Тоже вариант. Blindness, давайте зайдём с другой стороны: а для чего всё это вам? Может совсем уж страшные вещи всплывут, deadlock'и там или ещё чего? Или наоборот, совсем другой вариант решения именно проблемы подскажем, а не ответ на довольно ограничивающий вопрос "Как можно узнать из sysmaster время текущего (активного) ожидания сессии?"... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2008, 20:07 |
|
Как узнать время ожидания блокировки в версии 11.5
|
|||
---|---|---|---|
#18+
АнатоЛой Упс. Тоже вариант. Blindness, давайте зайдём с другой стороны: а для чего всё это вам? Может совсем уж страшные вещи всплывут, deadlock'и там или ещё чего? Или наоборот, совсем другой вариант решения именно проблемы подскажем, а не ответ на довольно ограничивающий вопрос "Как можно узнать из sysmaster время текущего (активного) ожидания сессии?"... есть монитор следящий за состоянием системы. запросы к sysmaster в мониторе предпочтительнее (но это не критично), поскольку результат вызова onstat еще нужно разобрать и передать на сервер мониторинга. один из критериев по которому возникает alarm в системе - это долгое ожидание освобождения блокировки какой-либо сессией. сейчас это реализовано посредством хранения в таблице БД времени появления сессии в списке ожидания (понятно что с погрешностью равной интервалу опроса сервера). хочется избавится от этой таблицы и накладных расходов по её наполнению статистикой. З.Ы. deadlock'ов вроде нет. ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2008, 11:32 |
|
Как узнать время ожидания блокировки в версии 11.5
|
|||
---|---|---|---|
#18+
cprЕсли второе, то это видно по onstat -u Эту информацию я вижу таким образом: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
вот сюда и хотелось бы добавить время ожидания. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2008, 11:40 |
|
Как узнать время ожидания блокировки в версии 11.5
|
|||
---|---|---|---|
#18+
АнатоЛойto blindness: посмотрите ещё на sysmaster:systhreads.th_startwait Спасибо! Похоже что это ОНО. вот чего получается: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2008, 14:03 |
|
Как узнать время ожидания блокировки в версии 11.5
|
|||
---|---|---|---|
#18+
onstat-АнатоЛойВам нужен какой-то показатель (счётчик), который в случае ожидания блокировки "тикает", а если сессия в данный момент ничего не ожидает, то счётчик равен 0? Я не уверен на 100 % ИМХО в этом случае и счетчик всегда будет равен =0. Потому что как только сессия упрется в блокировку, она уснет, и примет статус готова к выполнению после того как это блокировка будет освобождена (передана этой сессии). . Это в случае, если по умолчанию сессия ждет вечно, пока не освободится ресурс. Но если указать "ждать блокировки только 5 сек", то ведь планировщику где то надо зафиксировать время начала ожидания блокировки и по достижению 5 сек. таки завершить ожидающий запрос с ошибкой. Так что время ожидания конкретной блокировки, по-любому, где то будет фиксироваться, вот только есть ли к нему доступ... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2008, 15:09 |
|
Как узнать время ожидания блокировки в версии 11.5
|
|||
---|---|---|---|
#18+
АнатоЛойto vasilis: этот скрипт выдаёт статистику - то есть "накопительный итог", я правильно понимаю? Кроме накопительного, там есть еще и максимальное время ожидания, которое в данном случае может быть более интересным. Хотя, как я уже писал, писалось давно и я уже мало что помню :( ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2008, 15:12 |
|
Как узнать время ожидания блокировки в версии 11.5
|
|||
---|---|---|---|
#18+
blindnessтолько среда реальная и нагружать её дополнительной работой в виде трассировок накладно и не приветствуется. хотелось бы использовать предопределенные структуры/данные - должен же сервер знать время работы сессии дабы уметь оборвать её по истечению тайм-аута, например. IBM дает реальный инструмент который называется SQLTracing и он есть в информиксе начиная с версии 11.10, так надо им пользоваться а не придумывать всякие подпорки вроде запросов к системным таблицам (я не против таких запросов вообще), и включать его можно только для определенных пользователей и баз (это я про доп.нагрузку на сервер), и вообще это динамический параметр. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2008, 12:09 |
|
Как узнать время ожидания блокировки в версии 11.5
|
|||
---|---|---|---|
#18+
AndronIBM дает реальный инструмент который называется SQLTracing и он есть в информиксе начиная с версии 11.10, так надо им пользоваться а не придумывать всякие подпорки вроде запросов к системным таблицам (я не против таких запросов вообще), и включать его можно только для определенных пользователей и баз (это я про доп.нагрузку на сервер), и вообще это динамический параметр. Давайте не скатываться на религизные темы. Реальный инструмент, который называется SQLTracing в моём случае придется включать на всю систему. Это нежелательно. Да и задачу я уже решил при помощи данного тут совета. P.S. как-то ранее при разговоре с людьми из поддержки IBM затронули тему системных таблиц, то они не были категоричны. Более того, мысль сводилась к тому, что "используйте запросы к системным таблицам на здоровье - они и даны для этого" ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2008, 14:00 |
|
Как узнать время ожидания блокировки в версии 11.5
|
|||
---|---|---|---|
#18+
Хотите тратить время на разбор системных таблиц, форматирование результатов и при этом будут ли какие то гарантии что получите то что надо? Или же использовать документированный API и иметь при этом гарантированный результат и удобный для чтения и анализа вывод. Каждый решает сам вобщем. А про запросы к системным таблицам ничего против не имею, тоже использую, просто когда есть более удобный инструмент использую его. Считаю дальнейшую дискуссию на эту тему бессмысленной. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2008, 16:26 |
|
Как узнать время ожидания блокировки в версии 11.5
|
|||
---|---|---|---|
#18+
Andron IBM дает реальный инструмент который называется SQLTracing и он есть в информиксе начиная с версии 11.10, так надо им пользоваться Вопрос ради собственного просвещения: а разве SQLTracing поможет хоть как-то ответить на заданный в теме топика вопрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2008, 16:53 |
|
Как узнать время ожидания блокировки в версии 11.5
|
|||
---|---|---|---|
#18+
АнатоЛой, Ответил я выше по теме (даже ссылку на документ указал), я там как раз написал про поле LK Wait (в русском переводе документации оно так и называется "Ожидания блокировок" видимо кол-во ожиданий и еще одно "Ожидание LK (sec)" ) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2008, 17:10 |
|
Как узнать время ожидания блокировки в версии 11.5
|
|||
---|---|---|---|
#18+
blindnessАнатоЛойto blindness: посмотрите ещё на sysmaster:systhreads.th_startwait Спасибо! Похоже что это ОНО. вот чего получается: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
На 7.31 этот запрос не работает. SQLTracing для 7.31 недоступен. Если кому понадобится для 7.31 то попробуйте этот запрос - set isolation to dirty read; select dbsname, tabname,c.username as waiteruid,(select sh_curtime from sysshmvals)-start_wait as wait_time ,b.scs_currdb as waiterdb, b.scs_isolationlevel[1,20] as waiterisl,c.sid as waitersid,b.scs_sqlstatement[1,255] as waitersql, e.username as owneruid,d.sqs_dbname as ownerdb, e.sid as ownersid,d.sqs_statement as ownersql from syslocks a, syssqlcurses b, syssessions c, syssqlstat d, syssessions e ,sysrstcb f,systcblst g where waiter is not null and a.waiter==b.scs_sessionid and a.waiter == c.sid and a.owner==d.sqs_sessionid and a.owner==e.sid and c.sid == f.sid and f.tid == g.tid -- and ( (select sh_curtime from sysshmvals)-start_wait ) > 10 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.07.2011, 13:40 |
|
|
start [/forum/topic.php?fid=44&fpage=17&tid=1607321]: |
0ms |
get settings: |
10ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
30ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
408ms |
get tp. blocked users: |
1ms |
others: | 305ms |
total: | 768ms |
0 / 0 |