Сен 232011
 

Deadlock - ситуация, при которой одна сессия (A) пытается получить доступ к ресурсу, блокированному другой сессией (B), которая в свою очередь пытается получить доступ к ресурсу, блокированному первой сессией (A). Это самый типичный случай. Вообще же, в deadlock может быть вовлечена и только одна сессия (self deadlock) и больше двух.
Итак, что делать, если кто-то жалуется на наличие дедлоков?

  1. В первую очередь надо глубоко вздохнуть и вспомнить, что deadlock в 99.9% случаев вызван неправильной логикой работы приложений. Оставшаяся одна десятая процента - баги ORACLE.
  2. Никому на слово не верим - смотрим alert log, там обязательно будет что-то подобное:
    Tue Sep 20 09:52:43 2011
    ORA-00060: Deadlock detected. More info in file /oracle/dump/mydb_ora_3860.trc.
    
    Tue Sep 20 15:40:25 2011
    ORA-00060: Deadlock detected. More info in file /oracle/dump/mydb_ora_2488.trc.
    
  3. Теперь надо сохранить где-то файлы трассировки, указанные в сообщениях об ошибках. Они будут вашим аргументом в случае необходимости обосновать разработчику приложения свои претензии.
  4. Откроем эти файлы. Иногда они бывают большого размера, и поэтому нужную нам часть, вероятно, придётся поискать (я люблю утилиту less), ключевая фраза DEADLOCK DETECTED.
  5. Дальше будет подробная информация и самое интересное - граф блокировок, он выглядит примерно так:
    Deadlock graph:
                           ---------Blocker(s)--------  ---------Waiter(s)---------
    Resource Name          process session holds waits  process session holds waits
    TX-00030003-000f7551        28      13     X             28      13           S
    session 13: DID 0001-001C-0000002E	session 13: DID 0001-001C-0000002E
    

    Здесь мы видим, что сессия с SID=13 блокирует сама себя.

Собственно, подтвердить дедлок и идентифицировать проблемный модуль - это всё, что может сделать администратор в подобной ситуации. Разработчику для анализа пригодятся трейсы и подробная информация о действиях, которые пользователь проделал, когда обнаружил проблему.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

(обязательно)

(обязательно)