зеркало из
https://github.com/iharh/notes.git
synced 2025-10-29 12:46:06 +02:00
m
Этот коммит содержится в:
родитель
d67845b4e0
Коммит
a9b6cb220a
@ -1,10 +0,0 @@
|
|||||||
select ..., pg_blocking_pids(pid), ...
|
|
||||||
from pg_stat_activity
|
|
||||||
where
|
|
||||||
backend_type = 'client backend';
|
|
||||||
|
|
||||||
pg_locks
|
|
||||||
transactionid, granted
|
|
||||||
|
|
||||||
pg_terminate_backend(pid)
|
|
||||||
function
|
|
||||||
11
db/sql/postgres/feature/transaction/locks/docs/articles.txt
Обычный файл
11
db/sql/postgres/feature/transaction/locks/docs/articles.txt
Обычный файл
@ -0,0 +1,11 @@
|
|||||||
|
2019
|
||||||
|
Rogov - about locks
|
||||||
|
https://habr.com/ru/companies/postgrespro/articles/466199/
|
||||||
|
https://habr.com/ru/companies/postgrespro/articles/465263/
|
||||||
|
https://habr.com/ru/companies/postgrespro/articles/463819/
|
||||||
|
https://habr.com/ru/companies/postgrespro/articles/462877/
|
||||||
|
2018
|
||||||
|
https://www.citusdata.com/blog/2018/02/22/seven-tips-for-dealing-with-postgres-locks/
|
||||||
|
https://habr.com/ru/company/otus/blog/452986/
|
||||||
|
2015
|
||||||
|
https://habrahabr.ru/company/postgrespro/blog/270827/
|
||||||
11
db/sql/postgres/feature/transaction/locks/docs/presentations.txt
Обычный файл
11
db/sql/postgres/feature/transaction/locks/docs/presentations.txt
Обычный файл
@ -0,0 +1,11 @@
|
|||||||
|
2023
|
||||||
|
Tenzor - Borovikov - Backend School - 7 Locks 3:00 of 1:04:52
|
||||||
|
https://www.youtube.com/watch?v=RjLlixMdnSQ
|
||||||
|
https://www.postgresql.org/docs/current/explicit-locking.html
|
||||||
|
2019
|
||||||
|
HighLoad - Rogov - PG Locks of 48:42
|
||||||
|
https://www.youtube.com/watch?v=_R2-IsKfsUU
|
||||||
|
https://highload.ru/moscow/2019/abstracts/6067
|
||||||
|
2012
|
||||||
|
https://www.youtube.com/watch?v=s3ee0nuDDqs
|
||||||
|
https://momjian.us/main/writings/pgsql/locking.pdf
|
||||||
25
db/sql/postgres/feature/transaction/locks/docs/tips.txt
Обычный файл
25
db/sql/postgres/feature/transaction/locks/docs/tips.txt
Обычный файл
@ -0,0 +1,25 @@
|
|||||||
|
*****************************************************************************************************
|
||||||
|
В PostgreSQL есть мощный механизм блокировок, который как раз может помочь избежать таких ситуаций на уровне базы данных, упростив разработку приложения.
|
||||||
|
|
||||||
|
Выражение SELECT FOR UPDATE, в отличии от обычного SELECT устанавливает блокировку на уровне строк (row-level lock), что и позволяет безопасно поменять данные,
|
||||||
|
избежав конфликтных ситуаций. Когда мы используем SELECT FOR UPDATE, блокировка не дает изменить или удалить выбранные строки другим транзакциям, до завершения текущей транзакции.
|
||||||
|
|
||||||
|
Если продолжать аналогию с системой бронирования номеров в отеле, то можно привести вот такой пример запроса:
|
||||||
|
|
||||||
|
BEGIN ;
|
||||||
|
|
||||||
|
SELECT * FROM rooms WHERE room._number = '10' and status = 'available' FOR UPDATE;
|
||||||
|
|
||||||
|
Здесь мы явно открываем транзакцию (BEGIN) и из таблицы с номерами отеля (rooms) , выбираем комнату с номером 10 и статусом свободна (available).
|
||||||
|
|
||||||
|
Таким образом мы можем быть уверены, что пока пользователь выбирает и оплачивает номер, другой не успеет его забронировать, так как запись будет заблокирована до конца транзакции.
|
||||||
|
|
||||||
|
Чтобы избежать ситуаций когда SELECT FOR UPDATE не может получить блокировку, так как строка заблокирована другой транзакцией,
|
||||||
|
в результате чего происходят сильные задержки в транзакции или взаимоблокировки, существует опция NOWAIT.
|
||||||
|
Эта опция позволяет приложению избежать конфликтов блокировок в реальном времени, вместо того чтобы ждать когда освободиться необходимая строка.
|
||||||
|
|
||||||
|
Существует еще одна полезная опция в контексте выражения SELECT FOR UPDATE, называется она SKIP LOCKED.
|
||||||
|
Суть ее состоит в том, что она позволяет избежать строк, которые уже заблокированы другой транзакцией.
|
||||||
|
Т.е. в примере, приведенном выше, если бы вторая транзакция искала свободные номера, то она бы не увидела в своем результате комнату с номером 10.
|
||||||
|
Опять же, эта опция позволяет повысить конкурентность выполнения транзакций и избежать ненужных ожиданий на блокировках.
|
||||||
|
*****************************************************************************************************
|
||||||
@ -1,25 +1,7 @@
|
|||||||
https://postgrespro.ru/docs/postgresql/16/explicit-locking
|
https://www.postgresql.org/docs/current/explicit-locking.html
|
||||||
|
https://postgrespro.ru/docs/postgresql/current/explicit-locking
|
||||||
https://pglocks.org/?pgcommand=VACUUM
|
https://pglocks.org/?pgcommand=VACUUM
|
||||||
|
|
||||||
2019
|
|
||||||
HighLoad - Rogov - PG Locks of 48:42
|
|
||||||
https://www.youtube.com/watch?v=_R2-IsKfsUU
|
|
||||||
https://highload.ru/moscow/2019/abstracts/6067
|
|
||||||
Rogov - about locks
|
|
||||||
https://habr.com/ru/companies/postgrespro/articles/466199/
|
|
||||||
https://habr.com/ru/companies/postgrespro/articles/465263/
|
|
||||||
https://habr.com/ru/companies/postgrespro/articles/463819/
|
|
||||||
https://habr.com/ru/companies/postgrespro/articles/462877/
|
|
||||||
2018
|
|
||||||
https://www.citusdata.com/blog/2018/02/22/seven-tips-for-dealing-with-postgres-locks/
|
|
||||||
https://habr.com/ru/company/otus/blog/452986/
|
|
||||||
2015
|
|
||||||
https://habrahabr.ru/company/postgrespro/blog/270827/
|
|
||||||
2012
|
|
||||||
https://www.youtube.com/watch?v=s3ee0nuDDqs
|
|
||||||
https://momjian.us/main/writings/pgsql/locking.pdf
|
|
||||||
|
|
||||||
|
|
||||||
samples
|
samples
|
||||||
select ... for update;
|
select ... for update;
|
||||||
|
|
||||||
@ -33,30 +15,3 @@ pg_locks
|
|||||||
|
|
||||||
pg_terminate_backend(pid)
|
pg_terminate_backend(pid)
|
||||||
function
|
function
|
||||||
|
|
||||||
|
|
||||||
*****************************************************************************************************
|
|
||||||
В PostgreSQL есть мощный механизм блокировок, который как раз может помочь избежать таких ситуаций на уровне базы данных, упростив разработку приложения.
|
|
||||||
|
|
||||||
Выражение SELECT FOR UPDATE, в отличии от обычного SELECT устанавливает блокировку на уровне строк (row-level lock), что и позволяет безопасно поменять данные,
|
|
||||||
избежав конфликтных ситуаций. Когда мы используем SELECT FOR UPDATE, блокировка не дает изменить или удалить выбранные строки другим транзакциям, до завершения текущей транзакции.
|
|
||||||
|
|
||||||
Если продолжать аналогию с системой бронирования номеров в отеле, то можно привести вот такой пример запроса:
|
|
||||||
|
|
||||||
BEGIN ;
|
|
||||||
|
|
||||||
SELECT * FROM rooms WHERE room._number = '10' and status = 'available' FOR UPDATE;
|
|
||||||
|
|
||||||
Здесь мы явно открываем транзакцию (BEGIN) и из таблицы с номерами отеля (rooms) , выбираем комнату с номером 10 и статусом свободна (available).
|
|
||||||
|
|
||||||
Таким образом мы можем быть уверены, что пока пользователь выбирает и оплачивает номер, другой не успеет его забронировать, так как запись будет заблокирована до конца транзакции.
|
|
||||||
|
|
||||||
Чтобы избежать ситуаций когда SELECT FOR UPDATE не может получить блокировку, так как строка заблокирована другой транзакцией,
|
|
||||||
в результате чего происходят сильные задержки в транзакции или взаимоблокировки, существует опция NOWAIT.
|
|
||||||
Эта опция позволяет приложению избежать конфликтов блокировок в реальном времени, вместо того чтобы ждать когда освободиться необходимая строка.
|
|
||||||
|
|
||||||
Существует еще одна полезная опция в контексте выражения SELECT FOR UPDATE, называется она SKIP LOCKED.
|
|
||||||
Суть ее состоит в том, что она позволяет избежать строк, которые уже заблокированы другой транзакцией.
|
|
||||||
Т.е. в примере, приведенном выше, если бы вторая транзакция искала свободные номера, то она бы не увидела в своем результате комнату с номером 10.
|
|
||||||
Опять же, эта опция позволяет повысить конкурентность выполнения транзакций и избежать ненужных ожиданий на блокировках.
|
|
||||||
*****************************************************************************************************
|
|
||||||
|
|||||||
6
social/stirka.txt
Обычный файл
6
social/stirka.txt
Обычный файл
@ -0,0 +1,6 @@
|
|||||||
|
LG
|
||||||
|
Quick Hlopok
|
||||||
|
800
|
||||||
|
40
|
||||||
|
without scladoc
|
||||||
|
superpoloskanie
|
||||||
Загрузка…
x
Ссылка в новой задаче
Block a user