Раздел «Блокировки»

Назначение - отображает сводку по блокировкам (lock) и взаимным блокировкам (deadlock).

Страница выбора хоста

На начальном окне раздела блокировок отображена таблица со списком БД, столбцами с количеством блокировок (locks) и взаимных блокировок (deadlocks) и графиком частоты их появления.

Нажатие на число запросов с блокировками переведет на одну из страниц: /locks или /deadlocks соответственно.

Нажатие на число блокировок (lock) или взаимных блокировок (deadlock) переводит на страницу /deadlock-detect или /lock-wait.

Состав страницы:

  1. Имя хоста

    URL хоста, если задано для режима online, или имя в ином формате, если задано в режиме offline.

  2. Имя ответственного

    (комментарий к хосту).

  3. "deadlock"

    Deadlock (зависание) - это ситуация, которая возникает, когда два или более процесса блокируют друг друга, ожидая освобождения ресурсов, которые удерживают другие процессы.

    Когда процесс A удерживает некоторый ресурс и запрашивает другой ресурс, который удерживает процесс B, а процесс B в свою очередь ожидает освобождения ресурса, удерживаемого процессом A, возникает ситуация взаимной блокировки, или deadlock.

    В случае deadlock ни один из процессов не может продолжить свою работу, поскольку они все зависли, ожидая друг друга. Это может привести к замедлению или остановке работы системы.

    СУБД предоставляет механизмы для обнаружения и разрешения deadlock’ов. Один из них - это использование механизма блокировок и транзакций, который автоматически обнаруживает deadlock’ы и выбирает одну из транзакций для прерывания и отката изменений.

    Когда УБД обнаруживает deadlock, он выбирает одну из транзакций, участвующих в deadlock, и прерывает ее, чтобы разблокировать остальные процессы и позволить системе продолжить работу.

    Однако, предотвращение deadlock’ов является более предпочтительным подходом. Администраторы должны стремиться к правильному управлению транзакциями, блокировками и ресурсами, чтобы минимизировать возможность возникновения deadlock’ов. Это может включать правильное упорядочивание запросов, использование адекватных уровней изоляции транзакций и тщательное планирование доступа к ресурсам.

  4. "lock"

    Блокировки используются для обеспечения согласованного доступа к данным и предотвращения конфликтов между параллельными транзакциями.

    Блокировки в СУБД позволяют обеспечить консистентность данных и изоляцию транзакций. Однако неправильное использование блокировок или длительное удержание блокировок может привести к проблемам с производительностью и возможным возникновению deadlock’ов. Поэтому важно правильно управлять блокировками, выбирать соответствующие уровни изоляции транзакций и оптимизировать запросы для минимизации конфликтов и блокировок.

    Когда транзакция в СУБД запрашивает доступ к определенному ресурсу (например, таблице, строке или странице), она запрашивает блокировку на этот ресурс. Блокировки могут быть разных типов, включая:

    Share Lock (шаред блокировка)

    Это блокировка, которая разрешает параллельный доступ для чтения, но не позволяет изменять данные.

    Exclusive Lock (эксклюзивная блокировка)

    Это блокировка, которая предотвращает параллельный доступ для чтения и изменения данных. Транзакция с эксклюзивной блокировкой является единственной, которая имеет доступ к ресурсу.

    Row-Level Lock (блокировка на уровне строк)

    Это блокировка, которая применяется к конкретным строкам в таблице. Она позволяет параллельному доступу к другим строкам в таблице, но блокирует конкретные строки для изменения.

    Page-Level Lock (блокировка на уровне страниц)

    Это блокировка, которая применяется к страницам данных. Она блокирует целые страницы для предотвращения изменений в данных, находящихся на этих страницах.

  5. "Timeline"

    График интенсивности появления проблемных запросов, разбитый на 24 часа.

Страницы /deadlock-detect, /lock-wait

Для раскрытия состава запросов для вкладок «по типам» и «по приложениям» для нужного приложения следует кликнуть ЛКМ на его строку.

Раскроется список запросов.

Панель управления страницей

Назначение - отобразит количество блокировок каждого типа и параметры блокированных запросов. При нажатии на группу блокировок дополнительно отобразится приложение и состав объекта блокировки:

  • pid (идентификатор процесса сервера базы данных)

  • приложение.метод

Если вся группа блокировок относится к одному приложению, то она будет отражена и до раскрытия группы.

Вкладка «по типам»

Назначение - отобразит количество блокировок каждого приложения и параметры блокированных запросов. При нажатии на группу блокировок дополнительно отобразится состав объекта блокировки:

  • pid (идентификатор процесса сервера базы данных)

  • приложение.метод

Состав страницы:

  1. "mode"

    Основные режимы блокировок в СУБД. Каждый тип блокировки имеет свою функциональность и регулирует параллельный доступ к данным в базе данных. Важно правильно выбирать тип блокировки в зависимости от требуемого уровня изоляции и потенциальных конфликтов при доступе к данным.

    Примеры:

    1. AccessExclusive (эксклюзивная блокировка доступа)

      Эта блокировка предотвращает любой другой доступ к ресурсу, включая чтение и изменение. Транзакция с эксклюзивной блокировкой доступа имеет полный контроль над ресурсом.

    2. AccessShare (блокировка на уровне доступа для чтения)

      Эта блокировка позволяет параллельному чтению данных, но предотвращает изменение данных. Транзакции с блокировкой доступа для чтения могут читать данные параллельно другим транзакциям.

    3. Exclusive (эксклюзивная блокировка)

      Эта блокировка предотвращает параллельный доступ к данным для чтения и изменения. Транзакция с эксклюзивной блокировкой является единственной, которая имеет доступ к ресурсу.

    4. RowExclusive (эксклюзивная блокировка на уровне строк)

      Эта блокировка применяется к конкретным строкам таблицы и предотвращает другие транзакции от изменения этих строк. Одновременное изменение разных строк не блокируется.

    5. RowShare (блокировка на уровне строк для чтения)

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

    6. ShareRowExclusive (шаред эксклюзивная блокировка на уровне строк)

      Эта блокировка позволяет параллельному чтению строк и блокирует конкретные строки для изменения. Она предоставляет параллельный доступ для чтения другим транзакциям, но блокирует изменение конкретных строк.

    7. ShareUpdateExclusive (шаред обновляемая эксклюзивная блокировка)

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

  2. "type"

    Описание типов блокировок:

    1. locktype (text)

      Тип блокируемого объекта: relation, extend, frozenid, page, tuple, transactionid, virtualxid, spectoken, object, userlock или advisory. ..

      (См. также wait-event-lock-table.)

    2. database (oid)

      OID базы данных, в которой находится целевой объект блокировки, или ноль, если целью является общий объект, или null, если целью является идентификатор транзакции.

    3. relation (oid)

      OID целевого отношения блокировки, или null, если целью не является отношение или часть отношения.

    4. page (int4)

      Номер страницы, на которую нацелена блокировка в пределах отношения, или null, если целью является не страница отношения или кортеж.

    5. tuple (int2)

      Номер кортежа, на который нацелена блокировка в пределах страницы, или null, если целью является не кортеж.

    6. virtualxid (text)

      Виртуальный идентификатор транзакции, на которую нацелена блокировка, или null, если целью не является виртуальный идентификатор транзакции.

    7. transactionid (xid)

      Идентификатор транзакции, на которую нацелена блокировка, или null, если целью не является идентификатор транзакции.

    8. classid (oid)

      OID системного каталога, содержащего целевой объект блокировки, или null, если целью является не общий объект базы данных.

    9. objid (oid)

      OID целевого объекта блокировки в его системном каталоге, или null, если целью является не общий объект базы данных.

    10. objsubid (int2)

      Номер столбца, на который нацелена блокировка (classid и objid относятся к самой таблице), или ноль, если целью является другой общий объект базы данных, или null, если целью является не общий объект базы данных.

    11. virtualtransaction (text)

      Виртуальный идентификатор транзакции, которая удерживает или ожидает эту блокировку.

    12. pid (int4)

      Идентификатор процесса сервера, удерживающего или ожидающего эту блокировку, или null, если блокировку удерживает подготовленная транзакция.

    13. mode (text)

      Название режима блокировки, удерживаемого или желаемого этим процессом.

    14. granted (bool)

      True, если блокировка удерживается, false, если блокировка ожидается.

    15. fastpath (bool)

      True, если блокировка была получена через быстрый путь, false, если через основную таблицу блокировок.

    16. waitstart (timestamptz)

      Время, когда процесс сервера начал ожидание этой блокировки, или null, если блокировка удерживается. Обратите внимание, что это может быть null на очень короткое время после начала ожидания, даже если granted равно false.

  3. "приложение"

    приложение

  4. "объект_блокировки"

    Объект блокировки (приложение и метод) отображается при нажатии на строку.

  5. "sum.мс"

    Суммарное время запросов в милисекундах.

    Нажатие на заголовок сортирует вкладку по названию шаблона.

  6. "кол-во"

    Количество.

    Нажатие на заголовок сортирует вкладку по названию шаблона.

  7. "last"

    Время последнего запроса.

    Нажатие на заголовок сортирует вкладку по названию шаблона.

    Нажатие на значение переводит на страницу запроса из архива.

  8. "Timeline"

    График интенсивности появления проблемных запросов, разбитый на 24 часа.

Вкладка «по приложениям»

Состав страницы:

  1. "mode"

    Основные режимы блокировок в СУБД. Каждый тип блокировки имеет свою функциональность и регулирует параллельный доступ к данным в базе данных. Важно правильно выбирать тип блокировки в зависимости от требуемого уровня изоляции и потенциальных конфликтов при доступе к данным.

    Примеры:

    1. AccessExclusive (эксклюзивная блокировка доступа)

      Эта блокировка предотвращает любой другой доступ к ресурсу, включая чтение и изменение. Транзакция с эксклюзивной блокировкой доступа имеет полный контроль над ресурсом.

    2. AccessShare (блокировка на уровне доступа для чтения)

      Эта блокировка позволяет параллельному чтению данных, но предотвращает изменение данных. Транзакции с блокировкой доступа для чтения могут читать данные параллельно другим транзакциям.

    3. Exclusive (эксклюзивная блокировка)

      Эта блокировка предотвращает параллельный доступ к данным для чтения и изменения. Транзакция с эксклюзивной блокировкой является единственной, которая имеет доступ к ресурсу.

    4. RowExclusive (эксклюзивная блокировка на уровне строк)

      Эта блокировка применяется к конкретным строкам таблицы и предотвращает другие транзакции от изменения этих строк. Одновременное изменение разных строк не блокируется.

    5. RowShare (блокировка на уровне строк для чтения)

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

    6. ShareRowExclusive (шаред эксклюзивная блокировка на уровне строк)

      Эта блокировка позволяет параллельному чтению строк и блокирует конкретные строки для изменения. Она предоставляет параллельный доступ для чтения другим транзакциям, но блокирует изменение конкретных строк.

    7. ShareUpdateExclusive (шаред обновляемая эксклюзивная блокировка)

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

  2. "type"

    Описание типов блокировок:

    1. locktype (text)

      Тип блокируемого объекта: relation, extend, frozenid, page, tuple, transactionid, virtualxid, spectoken, object, userlock или advisory. ..

      (См. также wait-event-lock-table.)

    2. database (oid)

      OID базы данных, в которой находится целевой объект блокировки, или ноль, если целью является общий объект, или null, если целью является идентификатор транзакции.

    3. relation (oid)

      OID целевого отношения блокировки, или null, если целью не является отношение или часть отношения.

    4. page (int4)

      Номер страницы, на которую нацелена блокировка в пределах отношения, или null, если целью является не страница отношения или кортеж.

    5. tuple (int2)

      Номер кортежа, на который нацелена блокировка в пределах страницы, или null, если целью является не кортеж.

    6. virtualxid (text)

      Виртуальный идентификатор транзакции, на которую нацелена блокировка, или null, если целью не является виртуальный идентификатор транзакции.

    7. transactionid (xid)

      Идентификатор транзакции, на которую нацелена блокировка, или null, если целью не является идентификатор транзакции.

    8. classid (oid)

      OID системного каталога, содержащего целевой объект блокировки, или null, если целью является не общий объект базы данных.

    9. objid (oid)

      OID целевого объекта блокировки в его системном каталоге, или null, если целью является не общий объект базы данных.

    10. objsubid (int2)

      Номер столбца, на который нацелена блокировка (classid и objid относятся к самой таблице), или ноль, если целью является другой общий объект базы данных, или null, если целью является не общий объект базы данных.

    11. virtualtransaction (text)

      Виртуальный идентификатор транзакции, которая удерживает или ожидает эту блокировку.

    12. pid (int4)

      Идентификатор процесса сервера, удерживающего или ожидающего эту блокировку, или null, если блокировку удерживает подготовленная транзакция.

    13. mode (text)

      Название режима блокировки, удерживаемого или желаемого этим процессом.

    14. granted (bool)

      True, если блокировка удерживается, false, если блокировка ожидается.

    15. fastpath (bool)

      True, если блокировка была получена через быстрый путь, false, если через основную таблицу блокировок.

    16. waitstart (timestamptz)

      Время, когда процесс сервера начал ожидание этой блокировки, или null, если блокировка удерживается. Обратите внимание, что это может быть null на очень короткое время после начала ожидания, даже если granted равно false.

  3. "приложение"

    приложение

  4. "объект_блокировки"

    Объект блокировки (приложение и метод) отображается при нажатии на строку.

  5. "sum.мс"

    Суммарное время запросов в милисекундах.

    Нажатие на заголовок сортирует вкладку по названию шаблона.

  6. "кол-во"

    Количество.

    Нажатие на заголовок сортирует вкладку по названию шаблона.

  7. "last"

    Время последнего запроса.

    Нажатие на заголовок сортирует вкладку по названию шаблона.

    Нажатие на значение переводит на страницу запроса из архива.

  8. "Timeline"

    График интенсивности появления проблемных запросов, разбитый на 24 часа.

Вкладка «по времени»

Назначение - отобразит в хронологическом порядке все блокировки без какого-либо группирования. По каждой блокировке будет отображено:

  • время регистрации начала, дата и время конца и общее время блокировки;

  • тип блокировки;

  • pid, приложение и метод.