Разбирая взаимоблокировки у клиента, я вспомнил, насколько опасным может быть использование SELECT FOR UPDATE при конкурентном доступе. В этом нет ничего нового, но я заметил, что многие не знают о режимах блокировки строк в PostgreSQL, и решил подробно описать, когда следует избегать SELECT FOR UPDATE.
Рубрика «locks»
Почему SELECT FOR UPDATE считается вредным в PostgreSQL
2025-08-23 в 15:12, admin, рубрики: locking, locks, postgres, postgresql, postgresql performance, select for updateБлокировки в PostgreSQL: 4. Блокировки в памяти
2019-09-04 в 14:58, admin, рубрики: locks, postgresql, sampling, sql, Блог компании Postgres ProfessionalНапомню, что мы уже поговорили о блокировках отношений, о блокировках на уровне строк, о блокировках других объектов (включая предикатные), и о взаимосвязи разных типов блокировок.
Сегодня я заканчиваю этот цикл статьей про блокировки в оперативной памяти. Мы поговорим о спин-блокировках, легких блокировках и закреплении буфера, а также про средства мониторинга ожиданий и семплирование.
Блокировки в PostgreSQL: 3. Блокировки других объектов
2019-08-28 в 14:03, admin, рубрики: locks, postgresql, sql, Блог компании Postgres ProfessionalМы уже поговорили о некоторых блокировках на уровне объектов (в частности — о блокировках отношений), а также о блокировках на уровне строк, их связи с блокировками объектов и об очереди ожидания, не всегда честной.
Сегодня у нас сборная солянка. Начнем с взаимоблокировок (вообще-то я собирался рассказать о них еще в прошлый раз, но та статья и так получилась неприлично длинной), затем пробежимся по оставшимся блокировкам объектов, и в заключение поговорим про предикатные блокировки.
Взаимоблокировки
При использовании блокировок возможна ситуация взаимоблокировки (или тупика). Она возникает, когда одна транзакция пытается захватить ресурс, уже захваченные другой транзакцией, в то время как другая транзакция пытается захватить ресурс, захваченный первой. Это проиллюстрировано на левом рисунке ниже: сплошные стрелки показывают захваченные ресурсы, пунктирные — попытки захватить уже занятый ресурс.
Визуально взаимоблокировку удобно представлять, построив граф ожиданий. Для этого мы убираем конкретные ресурсы и оставляем только транзакции, отмечая, какая транзакция какую ожидает. Если в графе есть контур (из вершины можно по стрелкам добраться до нее же самой) — это взаимоблокировка.
Блокировки в PostgreSQL: 1. Блокировки отношений
2019-08-08 в 12:44, admin, рубрики: locks, postgresql, sql, Блог компании Postgres ProfessionalДва предыдущих цикла статей были посвящены изоляции и многоверсионности и журналированию.
В этом цикле мы поговорим о блокировках (locks). Я буду придерживаться этого термина, но в литературе может встретиться и другой: замóк.
Цикл будет состоять из четырех частей:
- Блокировки отношений (эта статья);
- Блокировки строк;
- Блокировки других объектов и предикатные блокировки;
- Блокировки в оперативной памяти.
Материал всех статей основан на учебных курсах по администрированию, которые делаем мы с Павлом pluzanov, но не повторяет их дословно и предназначен для вдумчивого чтения и самостоятельного экспериментирования.

Общая информация о блокировках
В PostgreSQL используется множество самых разных механизмов, которые служат для блокировки чего-либо (или по крайней мере так называются). Я поэтому начну с самых общих слов о том, зачем вообще нужны блокировки, какие они бывают и чем отличаются друг от друга. Затем мы посмотрим, что из этого разнообразия встречается в PostgreSQL и только после этого начнем разбираться с разными видами блокировок подробно.
Читать полностью »
Concurrency паттерны в Rust из Java
2017-09-05 в 20:01, admin, рубрики: concurrency, double checked lock, java, locks, Rust, параллельное программированиеПод катом находятся заметки, в которых расписано, как реализовать в Rust хитрые concurrency паттерны, которые я с легкостью пишу в Java, и в чем различие в подходах к concurrency у этих языков. Статья будет полезна и тем, кто переходит на Rust из C#, ведь у него аналогичная модель памяти.

Зеленый свет разработчикам — oт стартапа к звездам. Валентин Гогичашвили
2017-06-06 в 11:39, admin, рубрики: constraints, locks, postgresql, sql, Блог компании PG Day'17 RussiaКонференция PG Day проводится уже в четвертый раз. За это время у нас накопилась большая база полезных материалов от наших докладчиков. Уровень докладов в индустрии с каждым годом становится все выше и выше, но есть темы, которые, как хорошее вино, не теряют своей актуальности.
На одном из прошлых PG Day Валентин Гогичашвили, возглавляющий департамент Data Engineering в Zalando, рассказал, как PostgreSQL используется в компании с большим штатом разработчиков, высокой динамичностью процессов, и как они пришли к такому выбору.
Не секрет, что Zalando является постоянным гостем PG Day. На PG Day'17 Russia мы представим вам три замечательных доклада от немецких коллег. Мурат Кабилов и Алексей Клюкин расскажут про внутреннюю разработку Zalando для развертывания высокодоступных кластеров PostgreSQL. Александр Кукушкин поведает о практике эксплуатации PostgreSQL в AWS. Дмитрий Долгов поможет разобраться c внутренностями и производительности типа данных JSONB в контексте эксплуатации PostgreSQL как документо-ориентированного хранилища.
Читать полностью »
Потокобезопасный std::map с производительностью lock-free map
2017-05-10 в 21:44, admin, рубрики: c++, c++11, C++14, high performance, lock, lock-free, locks, low-latency, высокая производительность, параллельное программирование, ПрограммированиеПримеры использования и тестирование потоко-безопасного указателя и contention-free shared-mutex
В этой статье мы покажем: дополнительные оптимизации, примеры использования и тестирование разработанного нами потоко-безопасного указателя с оптимизированным разделяемым мьютексом contfree_safe_ptr<T> – это эквивалентно safe_ptr<T, contention_free_shared_mutex<>>
В конце покажем сравнительные графики тестов нашего thread-safe указателя и одних из лучших lock-free алгоритмов из libCDS на процессорах Intel Core i5/i7, Xeon, 2 x Xeon.
Читать полностью »
IdBasedLocking
2014-01-29 в 12:27, admin, рубрики: concurrency, java, lock, locking, locks, Веб-разработка, многопоточное программирование, многопоточность, Программирование, метки: concurrency, lock, locking, locks, многопоточное программирование, многопоточностьУ Java отличная поддержка параллелизма (concurrency) и блокировки (locking) — возможно, самая лучшая из тех, что предлагают современные языки. Кроме того, что в самом языке есть встроенная поддержка синхронизации, существует целый ряд полезных утилит на основе AQS framework. К ним относятся CountDownLatches, Barriers, Semaphores и прочие. Однако часто встречается ситуация, не поддерживающаяся напрямую: когда надо блокировать доступ не к конкретному объекту, а к идее этого объекта.
Потоки, блокировки и условные переменные в C++11 [Часть 2]
2013-06-08 в 18:41, admin, рубрики: c++, c++11, condition variables, deadlocks, locks, Mutex, threads, windows, блокировки, взаимоблокировки, все равно никто не читает метки, мьютекс, потоки, Программирование, условные переменные, метки: c++, c++11, condition variables, deadlocks, locks, mutex, threads, блокировки, взаимоблокировки, все равно никто не читает метки, мьютекс, потоки, условные переменные Для более полного понимания этой статьи, рекомендуется прочитать ее первую часть, где основное внимание было уделено потокам и блокировкам, в ней объяснено много моментов (терминов, функций и т.д.), которые без пояснения будут использованы здесь.
В данной статье будут рассмотрены условные переменные… Читать полностью »
Потоки, блокировки и условные переменные в C++11 [Часть 1]
2013-06-08 в 15:01, admin, рубрики: c++, c++11, condition variables, deadlocks, locks, Mutex, threads, windows, блокировки, взаимоблокировки, все равно никто не читает метки, мьютекс, потоки, Программирование, условные переменные, метки: c++, c++11, condition variables, deadlocks, locks, mutex, threads, блокировки, взаимоблокировки, все равно никто не читает метки, мьютекс, потоки, условные переменныеВ первой части этой статьи основное внимание будет уделено потокам и блокировкам в С++11, условные переменные во всей своей красе будут подробно рассмотрены во второй части… Читать полностью »


