Транзакции и блокировки Postgresql

Один: Дела:

Все мы знаем, что транзакция - это логическая единица в системе управления базами данных, состоящая из ограниченной последовательности операций, и самым известным из них является ее атрибуты ACID 4.

  • Атомарность, операции, содержащиеся в транзакции, либо все выполняются, либо все не выполняются.

  • Согласованность, данные в базе данных должны удовлетворять ограничениям целостности.

  • Изоляция, выполнение транзакции в базе данных не должно влиять на другие транзакции.

  • Долговечность, зафиксированная транзакция (состояние), ее изменение в базе данных и т. Д. Должны постоянно храниться в базе данных.


Использование транзакции

1) В начале транзакции есть два способа записи:

1) НАЧАТЬ; 
2) НАЧАТЬ СДЕЛКУ;

2) Транзакция завершается, возможны две ситуации:

1) COMMIT; -подтвердить транзакцию 
2) ROLLBACK; -откатить транзакцию


Для аналитиков тестирования концепция транзакции также может быть применена к задачам анализа.Например, если вы хотите проанализировать план выполнения SQL-оператора обновления / вставки / удаления, вы можете использовать концепцию транзакции для лучшего управления данными нашей базы данных.


Мы хотим проанализировать план выполнения следующего SQL:

удалить из общедоступного. «Отдел», где «DepID» = '1';

Тогда это можно будет выполнить следующим образом:

начать; 
объяснить анализировать удаление из общедоступных. "Отдел", где "DepID" = '1';

План выполнения оператора SQL delete получен выше, но вы не хотите фактически удалять данные, вы можете продолжить выполнение следующего оператора:

откат;

Два: замок

Концепция блокировки в Postgresql совместима с большинством реляционных баз данных и предназначена для обеспечения согласованности данных в транзакциях. Как правило, в базе данных с высоким уровнем параллелизма, если она не контролируется, чтение и хранение данных могут быть несовместимыми.


1) Тупик. Если две транзакции ждут друг друга, чтобы завершить транзакцию, очень вероятно, что произойдет взаимоблокировка. Когда возникает взаимоблокировка, postgresql автоматически обнаружит их и откатит все связанные транзакции, чтобы завершить их. Обеспечение того, чтобы программа блокировала объекты в одном и том же порядке, может эффективно избежать взаимоблокировок.

2) Во-вторых, типы блокировок можно разделить на блокировки на уровне таблицы и блокировки на уровне строк. Двумя наиболее распространенными блокировками являются блокировка с общим доступом и эксклюзивная блокировка. Совместное использование относится к блокировке чтения, то есть содержимое таблицы не может быть изменено. Эта блокировка может быть добавлена ​​к нескольким транзакциям, но если какая-либо транзакция не снимает блокировку, то содержимое таблицы не может быть изменено; эксклюзивный - на уровне таблицы Блокировка записи заблокирована.Если транзакция, получившая блокировку, не снимается, другие транзакции не могут читать или писать. Конечно, позже был представлен механизм многовариантности (MVCC), но эта ситуация была улучшена за счет еще двух блокировок: Access Share / Access Exclusive. Операция базы данных, соответствующая Access Share, обычно является оператором select operation; операция базы данных, соответствующая Access Exclusive, обычно - это изменение таблицы / удаление таблицы / усечение / переиндексирование / полное вакуумирование и т. Д.


Как лучше избежать конфликтов за ресурсы и других проблем, можно разумно избежать, рассмотрев следующие аспекты.

1) При обработке некоторых общих ресурсов с высокой степенью параллелизма вы можете подумать о переносе этого давления с реляционных баз данных на базы данных NO-SQL в памяти, такие как redis. Внешний интерфейс может учитывать реализацию бизнес-требований, таких как многопоточность и высокая степень параллелизма, в то время как ключевой внутренний интерфейс может использовать собственный однопоточный режим обработки, который поставляется с redis, и его эффективность выполнения не обязательно плохая.

2) Используйте ресурсы в одном порядке во всех транзакциях базы данных.

3) Попробуйте использовать более низкий уровень изоляции.


Вы также можете сканировать официальную учетную запись WeChat и следить за ней, чтобы получать больше контента, связанного с производительностью:

qrcode_for_gh_39009e949117_258-1.jpg


рекомендация

отblog.51cto.com/13734261/2540530