Форум FAQ О команде
Поиск по сайту:
 
Sybase
Sybase ASA  
Sybase ASE  
Sybase IQ  
Sybase PowerDesigner  
Sybase PowerBuilder  
  Статьи  
  Полезный код  

Продукты
Наши продукты  
Продукты партнеров портала  

Сообщества
Alef community  

Меню
Регистрация  
Почта  

Вход

Рассылка
Рассылка 'РСУБД Sybase ASA 9 - мощность, легкость и надежность'
Почтовая рассылка
"Технологии обработки данных компании Sybase"


Статистика
Яндекс цитирования

Rambler's Top100
Находится в каталоге Апорт

Главная -> ПО Sybase -> Sybase PowerBuilder -> Статьи
Простое средство обнаружения блокировок

Простое средство обнаружения блокировок

Простое средство обнаружения блокировок.

Вот простенький мониторчик блокировок на сервере.

Позволяет отследить ситуации, когда пользователи блокируют друго друга и получить информацию о том, почему это происходит.

Как устанавливать:

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
Материал прочитан: 12500 раз(а)
[ Назад ]



Продвижение сайтов
Биржа ссылок

Copyright©2005 phpMS. Все права защищены.
hosted on pets-tree