PostgreSQL блокировка на уровне страницы
Я довольно новичок в postgresql. Я проверил документацию, и я не могу найти ничего о том, как сделать блокировку на уровне страницы.
Я понимаю, что могу установить таблицу в режим блокировки следующим образом: LOCK TABLE myTable IN LOCKMODE ROW EXCLUSIVE;
Как мне реализовать блокировку на уровне страницы для моего сеанса? Дайте мне знать, если мне кажется, что я неправильно понимаю основы.
1 ответ
Почему вы хотите сделать явную блокировку на уровне страницы? Вы не контролируете, что находится на каждой странице, поэтому вы будете блокировать произвольную коллекцию данных. Какой цели это послужит?
Я думаю, что вы ищете блокировку на уровне строк, которая достигается с помощью SELECT ... FOR UPDATE
или же SELECT ... FOR SHARE
,
PostgreSQL обновляет внутренние блокировки на уровне строк до внутренних блокировок в нескольких местах, таких как отслеживание предикатов сериализованного снимка, управление буфером и т. Д. Это будет происходить, когда слишком много блокировок на уровне строк, и они становятся проблемой производительности. Вам не нужно заботиться об этом, так как это практически не повлияет на вас на уровне SQL. Обычные блокировки строк - как приобретено UPDATE
, DELETE
, SELECT ... FOR UPDATE
, SELECT ... FOR SHARE
и т.д. - AFAIK никогда не обновляется до блокировок на уровне страницы, так как это увеличит вероятность взаимных блокировок.
Если вы действительно уверены, что хотите блокировку на уровне страниц, объясните, какую проблему вы хотите решить более подробно, и почему блокировка на уровне строк или таблиц не справляется с этой задачей.
Увидеть:
- Явная блокировка - Руководство PostgreSQL
SELECT ... FOR [UPDATE|SHARE]
- блокировка уровня строкиLOCK
- блокировка уровня стола- Блокировка в PostgreSQL - более сложное обсуждение блокировки