|
Sybase
|
|
|
|
|
Продукты
|
|
|
|
|
Сообщества
|
|
|
|
|
Меню
|
|
|
|
|
Вход
|
|
|
|
|
Рассылка
|
|
|
|
|
Статистика
|
|
|
|
|
Простое средство обнаружения блокировок
|
Простое средство обнаружения блокировокПростое средство обнаружения блокировок.
Вот простенький мониторчик блокировок на сервере.
Позволяет отследить ситуации, когда пользователи блокируют друго друга и получить информацию о том, почему это происходит.
Как устанавливать:
0) Взять архив с процедурами здесь
1) залить процедуры в sybsystemprocs (нужно использовать логин с sa_role).
2) сделать файл SQL с содержимым типа:
exec sp__dump_locks '20060226 12:00:00'
go
и запустить ISQL с ним в параметре -i и параметром -o some-file , чтобы вывод шел в файл. ISQL должен наботать все время, на которое вы взводите монитор - процедура будет "висеть" до указанного вами времени, и все это время должен работать ISQL, после чего он сам завершится.
Также возможно использование этих процедур для построения своих
средств мониторинга с использованием других консолей или своих собственных специально написанных утилит.
Описание процедуры sp__dump_locks.
Синтаксис команды sp__dump_locks:
[exec] sp__dump_locks till_time [,min_time_blocked [,min_blocked_spids ,pause_interval]]]
- @till_time smalldatetime -- Время до которого запускается монитор
блокировок.
- @min_time_blocked int -- Минимальное время блокировки в секундах, которое рассматривается как криминальное. (по умолчанию 15 секунд).
- @min_blocked_spids int -- минимальное кол-во заблокированных процессов (по умолчанию 1)
- @pause_interval char(8) -- время паузы в работе в формате 'HH:MM:SS' (по
умолчанию 10 секунд).
Процедура входит в бесконечный цикл, который оканчивается при наступлении времени @till_time.
Внутри цикла с паузами в @pause_interval секунд между проверками проверяется наличие процессов, которые блокируют как минимум @min_blocked_spids других процессов в течении более чем @min_time_blocked секунд. Если такие процессы найдены, то вызывается процедура sp__wholocks, которая выдает картину блокировок.
Описание процедуры sp__wholocks
Синтаксис:
[exec] sp__wholocks [[login_name] [,mode]]
- @login varchar(30) = null -- задает имя лоджина, для которого нужно показывать блокировки. Если не указан, показываются блокировки для всех лоджинов.
- @mode char(2) = null -- Режим показа блокировок null -- сокращенный показ, или 'f' -- полный показ.
При полном показе выводятся все блокировки вместе с номерами страниц и записей. Если блокировок много, то вывод получается обширный и излишне детальный. Поэтому в режиме null (по умолчанию) блокировки групперуются по объектам, на которые они наложены, а в начале пишется количество таких блокировок
- spid(fid) - идентификатор серверного процесса (spid), в скобках - идентификатор семейства процессов процесса (family id).
Идентификатор семейства процессов отсутствует для обычных процессов, а для рабочих процессов он равен идентификатору породившего его
родительского процесса. Блокировки всегда принадлежат всему семейству процессов.
- login - имя логина, который владеет данным серверным процессом.
- status[io/cpu/mem]<<blckd(t) - Статус процесса, потребляемые им ресурсы в формате io/cpu/mem (см. описание sysprocesses), и,
если данный процесс заблокирован, идентификатор блокирующего процесса и время блокировки, в формате: "<<blocking_spid(blocked_times)".
- statement - Выполняемый оператор в формате: "<Имя оператора> #Номер_оператора @Номер_строки"
<Имя оператора> - имя хранимой процедуры или триггера, если они выполняются, или иначе тип запроса или состояние
или название процесса.
#Номер_оператора - номер оператора в батче или хранимой процедуре
@Номер_строки - номер строки оператора в батче или хранимой процедуре
(ASE довольно своеобразно нумерует строки в TSQL, поэтому следует критически относиться
к этому номеру. Если вы не найдете в указанной строке нужного оператора, это НЕ ошибка
данной процедуры, поскольку поле берется напрямую из системной таблицы sysprocesses).
- lock - Идентификатор блокировки (lock). Формат и состав зависит от режима работы (параметр mode).
В сокращенном режиме (@mode = null) в каждой строке набора данных
показывается каждый вид блокировки каждой таблицы.
!2*Ex_row-blk(dbname.TABLE_NAME)
|| \ \ \------ имя блокируемой таблицы
| \ \ \--- база данных
| \ \------ тип блокировки. Суффиксы: -request -запрашиваемая, -blk - блокирующая
\ \-- количество блокировок
\------- "!" - признак блокирующей блокировки.
В полном режиме в каждой строке показывается
отдельная блокировка (lock):
!Ex_page-blk(dbname.TABLE_NAME[6897.0])
| | | | | \------ номер блокируемой записи внутри страницы (или 0)
| | | | \------ Номер блокируемой страницы
| | | \------ имя блокируемой таблицы
| | \--- база данных
| \------ тип блокировки. Суффиксы: -request -запрашиваемая, -blk - блокирующая
\------- "!" - признак блокирующей блокировки.
-- Пример вывода в сокращенном режиме
spid(fid) login status[io/cpu/mem]<<blckd(t) statement lock
--------- ----- ---------------------------- --------- ----
18 ziv lock sleep [0/3/14]<<20(3s) UPDATE #4 @6 1*Ex_intent(CORE.SALEDOC2)
18 ziv lock sleep [0/3/14]<<20(3s) UPDATE #4 @6 1*Ex_row(CORE.SALEDOC2_POS)
18 ziv lock sleep [0/3/14]<<20(3s) UPDATE #4 @6 1*Ex_intent(CORE.SALEDOC2_POS)
20 ziv alarm sleep [0/1/14] WAITFOR #5 @9 1*Ex_intent(CORE.SALEDOC2)
20 ziv alarm sleep [0/1/14] WAITFOR #5 @9 !1*Ex_page-blk(CORE.SALEDOC2)
20 ziv alarm sleep [0/1/14] WAITFOR #5 @9 1*Ex_row(CORE.SALEDOC2_POS)
20 ziv alarm sleep [0/1/14] WAITFOR #5 @9 1*Ex_intent(CORE.SALEDOC2_POS)
-- Пример вывода в полном режиме
spid(fid) login status[io/cpu/mem]<<blckd(t) statement lock
--------- ----- ---------------------------- --------- ----
18 ziv lock sleep [0/3/14]<<20(2s) UPDATE #4 @6 Ex_intent(CORE.SALEDOC2[0.0])
18 ziv lock sleep [0/3/14]<<20(2s) UPDATE #4 @6 Ex_intent(CORE.SALEDOC2_POS[0.0])
18 ziv lock sleep [0/3/14]<<20(2s) UPDATE #4 @6 Ex_row(CORE.SALEDOC2_POS[265.1])
20 ziv alarm sleep [0/1/14] WAITFOR #5 @9 Ex_intent(CORE.SALEDOC2[0.0])
20 ziv alarm sleep [0/1/14] WAITFOR #5 @9 !Ex_page-blk(CORE.SALEDOC2[6897.0])
20 ziv alarm sleep [0/1/14] WAITFOR #5 @9 Ex_intent(CORE.SALEDOC2_POS[0.0])
20 ziv alarm sleep [0/1/14] WAITFOR #5 @9 Ex_row(CORE.SALEDOC2_POS[265.0])
|
Дата публикации: Wednesday 29 March 2006 13:11:33 Материал прочитан: 13094 раз(а) [ Назад ] |
|
|
|
|
|
|
Copyright©2005 . Все права защищены.
|