Блокировки в PostgreSQL Базы данных и системы хранения
За плечами ВМК МГУ им. М. В. Ломоносова. Не расстается с СУБД уже лет 20, поддерживал и разрабатывал приложения, руководил разработкой. С 2015 года занимается в Postgres Professional образовательными программами: готовит учебные курсы, пишет и редактирует книги о базах данных.
Все СУБД так или иначе используют блокировки — они необходимы при конкурентном доступе к разделяемым ресурсам. Но они же могут приводить к нежелательным ситуациям, когда вместо работы процесс простаивает в ожидании. Чтобы помочь разобраться в возникшей проблеме, PostgreSQL показывает достаточно информации — надо только суметь ее правильно проинтерпретировать. А это невозможно без понимания того, как устроены блокировки, какие именно ресурсы блокируются, когда и на каких уровнях это происходит.
Я расскажу о типах блокировок, которые используются в PostgreSQL: о многочисленных обычных «тяжелых» блокировках (таких, как блокировки таблиц и номеров транзакций), о блокировках на уровне строк (почему они так сильно отличаются от обычных блокировок и почему так тесно с ними связаны), о «легких» блокировках (и чем они легче тяжелых). Мы также поговорим о том, как организована очередь ожидания и в каких случаях она перестает работать. Все это позволит нам разобраться в том, как «читать» pg_locks и pg_stat_activity, и избегать ряда ошибок при проектировании систем.