Гость
Map
Форумы / Informix [игнор отключен] [закрыт для гостей] / Как узнать время ожидания блокировки в версии 11.5 / 23 сообщений из 23, страница 1 из 1
23.12.2008, 12:31
    #35729821
blindness
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать время ожидания блокировки в версии 11.5
Есть сессия (или несколько сессий) ожидающая освобождения некой блокировки. Необходимо узнать время, потраченное сессией на ожидание этого ресурса. Всё что удалось найти - это время установки самой блокировки в sysmaster:syslcktab.grtime. Но это не та цифра.
В 11-ой версии задекларирована дополнительная колонка lkwaittime в sysrstcb: "Time spent waiting on locks". Как я понял, туда попадает суммарное время затраченное на ожидание блокировок.

Как можно узнать из sysmaster время текущего (активного) ожидания сессии?
...
Рейтинг: 0 / 0
23.12.2008, 13:05
    #35729940
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать время ожидания блокировки в версии 11.5
Вам нужен какой-то показатель (счётчик), который в случае ожидания блокировки "тикает", а если сессия в данный момент ничего не ожидает, то счётчик равен 0?
...
Рейтинг: 0 / 0
23.12.2008, 13:33
    #35730046
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать время ожидания блокировки в версии 11.5
Посмотрите на ниже приведенный скрипт - возможно поможет или направит в нужное русло.
Для его работы. если не ошибаюсь, нужно в 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.
-----------------------------------------------------------
-- sessions Waits profile (in seconds)
--  (view sysmaster:sysseswts)
--      IDS 7.3+  9.2+
--
-- V.Shulzhenko  DBA Tools   04'02 - 05'04
-----------------------------------------------------------
set isolation to dirty read;
select current year to second - 
    EXTEND(dbinfo('utc_to_datetime',sh_pfclrtime),year to second)  ____statistic_time
    ,sh_curtime-sh_pfclrtime    __stat_time_in_sec
from sysshmvals;
----------------------------------------
select  a.sid                           sid
        ,c.txt[ 1 , 14 ]                    reason
        ,round(b.wcumtime/ 1000000 )      cumtime_sec
        ,round(b.wmaxtime/ 1000000 )      maxtime_sec
        ,b.wnum                         num_waits
from sysrstcb a, systwaits b, flags_text c
where a.tid = b.tid
      and b.wreason = c.flags
      and c.tabname = 'systwaits'
      and b.wnum > 0 
      and b.wreason !=  10 
      and a.sid != dbinfo('sessionid')           -- Exclude this session
order by  3  desc, 5  desc, 1 
into temp _temp_dbatools
;
---------------------------------------
Insert into _temp_dbatools
        values 
        (
          0  
        ,'--------------'
        , 0 
        , 0 
        , 0 
        )
;
---------------------------------------
Insert into _temp_dbatools
select  sid
        ,'-- all reason'        reason
        ,sum(cumtime_sec)       cumtime_sec
        ,sum(maxtime_sec)       maxtime_sec
        ,sum(num_waits)         num_waits
from _temp_dbatools
where sid != 0 
group by  1 
;
---------------------------------------
select * from _temp_dbatools;
---------------------------------------
{
It's not the amount of waits, but the amount of time, threads were waiting for an event.
aio:            waits for handling AIO-requests
lock:           waits for release of locks
mt ready:       waits inside ready queue
checkpoint:     waits for completion of checkpoints
buffer:         waits for buffer access
running:        that's not a wait - it's the running time
}
...
Рейтинг: 0 / 0
23.12.2008, 13:44
    #35730078
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать время ожидания блокировки в версии 11.5
to vasilis: этот скрипт выдаёт статистику - то есть "накопительный итог", я правильно понимаю?
to blindness: посмотрите ещё на sysmaster:systhreads.th_startwait
...
Рейтинг: 0 / 0
23.12.2008, 15:12
    #35730327
blindness
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать время ожидания блокировки в версии 11.5
vasilisПосмотрите на ниже приведенный скрипт - возможно поможет или направит в нужное русло.
Для его работы. если не ошибаюсь, нужно в onconfig установить параметр WSTATS в 1 и перестартовать сервер (не знаю, актуально ли для 11.5).


В эту сторону я смотрел и не добился успеха. Проблема в том, что на сервере WSTATS не установлен и администратор против этого. В связи с чем systwaits не содержит информации вообще.

Вот еще подумалось посмотреть в сторону самого запроса. Может быть можно узнать хотя бы время последнего разбора запроса сервером или врема начала исполнения запроса?
...
Рейтинг: 0 / 0
23.12.2008, 16:15
    #35730534
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать время ожидания блокировки в версии 11.5
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 слайд
...
Рейтинг: 0 / 0
23.12.2008, 16:22
    #35730553
Andron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать время ожидания блокировки в версии 11.5
Почитайте про SQL Tracing там как раз есть для каждого выполненного запроса много разной полезной информации в том числе и поле LK Wait (может быть это оно).
...
Рейтинг: 0 / 0
23.12.2008, 18:51
    #35730949
blindness
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать время ожидания блокировки в версии 11.5
АнатоЛойВам нужен какой-то показатель (счётчик), который в случае ожидания блокировки "тикает", а если сессия в данный момент ничего не ожидает, то счётчик равен 0?

да.
...
Рейтинг: 0 / 0
23.12.2008, 19:12
    #35730977
blindness
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать время ожидания блокировки в версии 11.5
vasilisесли у вас с админом не будет контакта, то вам будет очень трудно анализировать поведение ваших запросов в реальной среде.
vasilis You can now monitor the performance of recently executed SQL statements by configuring SQL statement tracing.

контакт-то есть. только среда реальная и нагружать её дополнительной работой в виде трассировок накладно и не приветствуется. хотелось бы использовать предопределенные структуры/данные - должен же сервер знать время работы сессии дабы уметь оборвать её по истечению тайм-аута, например.
...
Рейтинг: 0 / 0
23.12.2008, 19:16
    #35730978
onstat-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать время ожидания блокировки в версии 11.5
АнатоЛойВам нужен какой-то показатель (счётчик), который в случае ожидания блокировки "тикает", а если сессия в данный момент ничего не ожидает, то счётчик равен 0?

Я не уверен на 100 %
ИМХО в этом случае и счетчик всегда будет равен =0.
Потому что как только сессия упрется в блокировку, она уснет,
и примет статус готова к выполнению после того как это блокировка будет освобождена
(передана этой сессии).

Если моя логика ошибочна, ткните носом в доку где бы описывалось поведение Informix
в этом случае.
...
Рейтинг: 0 / 0
23.12.2008, 19:17
    #35730980
cpr
cpr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать время ожидания блокировки в версии 11.5
blindnessАнатоЛойВам нужен какой-то показатель (счётчик), который в случае ожидания блокировки "тикает", а если сессия в данный момент ничего не ожидает, то счётчик равен 0?

да.

Вам нужно знать состояние счетчика или достаточно информации о том, что сесия ожидает блокировку?
Если второе, то это видно по onstat -u
...
Рейтинг: 0 / 0
23.12.2008, 20:07
    #35731040
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать время ожидания блокировки в версии 11.5
cprВам нужно знать состояние счетчика или достаточно информации о том, что сесия ожидает блокировку?
Если второе, то это видно по onstat -u

Упс. Тоже вариант. Blindness, давайте зайдём с другой стороны: а для чего всё это вам?
Может совсем уж страшные вещи всплывут, deadlock'и там или ещё чего? Или наоборот, совсем другой вариант решения именно проблемы подскажем, а не ответ на довольно ограничивающий вопрос "Как можно узнать из sysmaster время текущего (активного) ожидания сессии?"...
...
Рейтинг: 0 / 0
24.12.2008, 11:32
    #35731796
blindness
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать время ожидания блокировки в версии 11.5
АнатоЛой
Упс. Тоже вариант. Blindness, давайте зайдём с другой стороны: а для чего всё это вам?
Может совсем уж страшные вещи всплывут, deadlock'и там или ещё чего? Или наоборот, совсем другой вариант решения именно проблемы подскажем, а не ответ на довольно ограничивающий вопрос "Как можно узнать из sysmaster время текущего (активного) ожидания сессии?"...

есть монитор следящий за состоянием системы. запросы к sysmaster в мониторе предпочтительнее (но это не критично), поскольку результат вызова onstat еще нужно разобрать и передать на сервер мониторинга. один из критериев по которому возникает alarm в системе - это долгое ожидание освобождения блокировки какой-либо сессией. сейчас это реализовано посредством хранения в таблице БД времени появления сессии в списке ожидания (понятно что с погрешностью равной интервалу опроса сервера). хочется избавится от этой таблицы и накладных расходов по её наполнению статистикой.

З.Ы. deadlock'ов вроде нет. ;)
...
Рейтинг: 0 / 0
24.12.2008, 11:40
    #35731813
blindness
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать время ожидания блокировки в версии 11.5
cprЕсли второе, то это видно по onstat -u

Эту информацию я вижу таким образом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select trim(x1.dbsname) || ':' || trim(x1.tabname) as object,
       trim(w.username) || ' (SID=' || to_char(w.sid) || ') waits for ' ||
       trim(s.username) || ' (SID=' || to_char(s.sid) || ')' as issue
  from sysmaster:sysscblst s,
       sysmaster:syslcktab x0,
       sysmaster:systabnames x1,
       sysmaster:systxptab x2,
       sysmaster:sysrstcb x3,
       sysmaster:sysrstcb x5,
       sysmaster:sysscblst w
 where s.sid = x3.sid
   and x0.partnum = x1.partnum
   and x0.owner = x2.address
   and x2.owner = x3.address
   and x0.address = x5.lkwait
   and x5.sid = w.sid

вот сюда и хотелось бы добавить время ожидания.
...
Рейтинг: 0 / 0
24.12.2008, 14:03
    #35732332
blindness
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать время ожидания блокировки в версии 11.5
АнатоЛой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.
select trim(x1.dbsname) || ':' || trim(x1.tabname) as object,
       trim(w.username) || ' (SID=' || to_char(w.sid) || ') waits for ' ||
       trim(s.username) || ' (SID=' || to_char(s.sid) || ')' as issue,
       sh.sh_curtime - t.start_wait as wait_time
  from sysmaster:sysscblst s,
       sysmaster:syslcktab x0,
       sysmaster:systabnames x1,
       sysmaster:systxptab x2,
       sysmaster:sysrstcb x3,
       sysmaster:sysrstcb x5,
       sysmaster:sysscblst w,
       sysmaster:systcblst t,
       sysmaster:sysshmvals sh
 where s.sid = x3.sid
   and x0.partnum = x1.partnum
   and x0.owner = x2.address
   and x2.owner = x3.address
   and x0.address = x5.lkwait
   and x5.sid = w.sid
   and t.tid = x5.tid 
...
Рейтинг: 0 / 0
24.12.2008, 15:09
    #35732582
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать время ожидания блокировки в версии 11.5
onstat-АнатоЛойВам нужен какой-то показатель (счётчик), который в случае ожидания блокировки "тикает", а если сессия в данный момент ничего не ожидает, то счётчик равен 0?

Я не уверен на 100 %
ИМХО в этом случае и счетчик всегда будет равен =0.
Потому что как только сессия упрется в блокировку, она уснет,
и примет статус готова к выполнению после того как это блокировка будет освобождена
(передана этой сессии).
.
Это в случае, если по умолчанию сессия ждет вечно, пока не освободится ресурс.
Но если указать "ждать блокировки только 5 сек", то ведь планировщику где то надо зафиксировать время начала ожидания блокировки и по достижению 5 сек. таки завершить ожидающий запрос с ошибкой. Так что время ожидания конкретной блокировки, по-любому, где то будет фиксироваться, вот только есть ли к нему доступ...
...
Рейтинг: 0 / 0
24.12.2008, 15:12
    #35732587
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать время ожидания блокировки в версии 11.5
АнатоЛойto vasilis: этот скрипт выдаёт статистику - то есть "накопительный итог", я правильно понимаю?
Кроме накопительного, там есть еще и максимальное время ожидания, которое в данном случае может быть более интересным.
Хотя, как я уже писал, писалось давно и я уже мало что помню :(
...
Рейтинг: 0 / 0
25.12.2008, 12:09
    #35734507
Andron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать время ожидания блокировки в версии 11.5
blindnessтолько среда реальная и нагружать её дополнительной работой в виде трассировок накладно и не приветствуется. хотелось бы использовать предопределенные структуры/данные - должен же сервер знать время работы сессии дабы уметь оборвать её по истечению тайм-аута, например.

IBM дает реальный инструмент который называется SQLTracing и он есть в информиксе начиная с версии 11.10, так надо им пользоваться а не придумывать всякие подпорки вроде запросов к системным таблицам (я не против таких запросов вообще), и включать его можно только для определенных пользователей и баз (это я про доп.нагрузку на сервер), и вообще это динамический параметр.
...
Рейтинг: 0 / 0
25.12.2008, 14:00
    #35734861
blindness
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать время ожидания блокировки в версии 11.5
AndronIBM дает реальный инструмент который называется SQLTracing и он есть в информиксе начиная с версии 11.10, так надо им пользоваться а не придумывать всякие подпорки вроде запросов к системным таблицам (я не против таких запросов вообще), и включать его можно только для определенных пользователей и баз (это я про доп.нагрузку на сервер), и вообще это динамический параметр.

Давайте не скатываться на религизные темы. Реальный инструмент, который называется SQLTracing в моём случае придется включать на всю систему. Это нежелательно. Да и задачу я уже решил при помощи данного тут совета.

P.S. как-то ранее при разговоре с людьми из поддержки IBM затронули тему системных таблиц, то они не были категоричны. Более того, мысль сводилась к тому, что "используйте запросы к системным таблицам на здоровье - они и даны для этого"
...
Рейтинг: 0 / 0
25.12.2008, 16:26
    #35735437
Andron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать время ожидания блокировки в версии 11.5
Хотите тратить время на разбор системных таблиц, форматирование результатов и при этом будут ли какие то гарантии что получите то что надо? Или же использовать документированный API и иметь при этом гарантированный результат и удобный для чтения и анализа вывод. Каждый решает сам вобщем.
А про запросы к системным таблицам ничего против не имею, тоже использую, просто когда есть более удобный инструмент использую его. Считаю дальнейшую дискуссию на эту тему бессмысленной.
...
Рейтинг: 0 / 0
25.12.2008, 16:53
    #35735544
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать время ожидания блокировки в версии 11.5
Andron
IBM дает реальный инструмент который называется SQLTracing и он есть в информиксе начиная с версии 11.10, так надо им пользоваться
Вопрос ради собственного просвещения:
а разве SQLTracing поможет хоть как-то ответить на заданный в теме топика вопрос?
...
Рейтинг: 0 / 0
25.12.2008, 17:10
    #35735611
Andron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать время ожидания блокировки в версии 11.5
АнатоЛой,

Ответил я выше по теме (даже ссылку на документ указал), я там как раз написал про поле LK Wait (в русском переводе документации оно так и называется "Ожидания блокировок" видимо кол-во ожиданий и еще одно "Ожидание LK (sec)" )
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
05.07.2011, 13:40
    #37337150
cpr
cpr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как узнать время ожидания блокировки в версии 11.5
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.
select trim(x1.dbsname) || ':' || trim(x1.tabname) as object,
       trim(w.username) || ' (SID=' || to_char(w.sid) || ') waits for ' ||
       trim(s.username) || ' (SID=' || to_char(s.sid) || ')' as issue,
       sh.sh_curtime - t.start_wait as wait_time
  from sysmaster:sysscblst s,
       sysmaster:syslcktab x0,
       sysmaster:systabnames x1,
       sysmaster:systxptab x2,
       sysmaster:sysrstcb x3,
       sysmaster:sysrstcb x5,
       sysmaster:sysscblst w,
       sysmaster:systcblst t,
       sysmaster:sysshmvals sh
 where s.sid = x3.sid
   and x0.partnum = x1.partnum
   and x0.owner = x2.address
   and x2.owner = x3.address
   and x0.address = x5.lkwait
   and x5.sid = w.sid
   and t.tid = x5.tid 


На 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
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / Как узнать время ожидания блокировки в версии 11.5 / 23 сообщений из 23, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]