Обнаружение тупиковых ситуаций Aria двухэтапного типа
Описание
Двигатель хранения Aria может автоматически обнаруживать и обрабатывать тупиковые ситуации (см. статью о тупиковых ситуациях в Википедии).
Эта функция контролируется четырьмя переменными конфигурации, две из которых управляют глубиной поиска, а две — временем ожидания.
Как это работает
Если Aria не может получить блокировку, возможно, возникла тупиковая ситуация. Существует два основных способа обнаружения фактического возникновения тупика. Первый — поиск в графе ожиданий (см. граф ожиданий в Википедии), а второй — просто подождать и позволить тупиковой ситуации проявиться. Aria Two-step Deadlock Detection использует комбинацию обоих методов.
Во-первых, если запрос на блокировку не может быть удовлетворен немедленно, мы проводим короткий поиск в графе ожиданий с небольшой глубиной поиска, как настроено переменной deadlock_search_depth_short. У нас есть предел глубины, потому что граф (теоретически) может быть произвольно большим, и мы не хотим проводить рекурсивный поиск на произвольно большой глубине. Этот начальный, короткий поиск очень быстрый, и большинство тупиковых ситуаций будет обнаружено сразу. Если при коротком поиске циклов тупика не найдено, система ждет заданное время, указанное в deadlock_timeout_short, чтобы посмотреть, будут ли устранены конфликты блокировок и блокировка может быть предоставлена. Предположим, что этого не произошло и запрос на блокировку все еще ожидает, система переходит к второму этапу, который повторяет процесс, но на этот раз на большей глубине, используя deadlock_search_depth_long. Если тупиковая ситуация не обнаружена, она ждет deadlock_timeout_long и выходит за пределы времени ожидания.
При обнаружении тупиковой ситуации система использует алгоритм взвешивания, чтобы определить, какой поток в тупике следует убить, и затем убивает его.
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/aria-two-step-deadlock-detection/