П. Г. Демидова А. В. Зафиевский А. А. Короткин А. Н. Лататуев Базы данных Учебное пособие
Download 1.32 Mb. Pdf ko'rish
|
Базы данных
6.5. Уровни изоляции
Язык SQL предусматривает настройку взаимодействия транз- акций, называемую уровнями изоляции. Мы уже отмечали, что свойство изолированности транзакции предусматривает такой ре- жим работы, при котором результаты параллельного выполнения нескольких транзакций оказываются такими же, как и при после- довательном их выполнении, причем в любом порядке. Этого мож- но добиться, если каждая транзакция будет от начала до конца транзакции устанавливать исключительную блокировку на все тре- буемые ей ресурсы. Понятно, что использование ресурсов будет при этом достаточно неэффективным и выигрыш от параллельной работы транзакций будет невелик. Поэтому в случае, когда некото- 130 рые из ситуаций, описанных в п. 6.2, не являются значимыми, можно уменьшить степень изолированности транзакций друг от друга, уменьшив тем самым объем блокируемых ресурсов и повысив эффект от параллельного выполнения транзакций. Язык SQL предусматривает несколько уровней изоляции транзакций, ослабляющих требования к их взаимодействию. Понижение требований относится только к операциям чтения, так что выполнение модификации данных блокирует их в исключительном режиме. SERIALIZABLE – наиболее высокий уровень изоляции, обес- печивающий те же результаты, что и при последовательном испол- нении транзакций. В исключительном режиме блокируются все строки и диапазоны строк, которые читались или модифицирова- лись в текущей транзакции. Кроме того, блокируется доступ этой транзакции к строкам и диапазонам строк, которые читались или модифицировались в других транзакциях. Этот уровень гаранти- рует отсутствие всех нежелательных эффектов от взаимодействия транзакций, описанных в п. 6.2. По существу, только этот уровень изоляции обеспечивает классические свойства транзакций (ACID). REPEATABLE READ – несколько меньший по степени изо- ляции уровень. На этом уровне блокируются (в исключительном режиме) строки (не диапазоны строк), использовавшиеся в запросах текущей транзакции, однако допускается вставка строк другими транзакциями, что может привести к появлению строк- призраков (п. 6.2.4). Это, однако, допустимо, если в текущей транзакции не используются запросы со статистическими функ- циями и подобные им. Также блокируется доступ текущей транзакции к строкам, которые читались или модифицировались другими транзакциями. Уровень READ COMMITTED (чтение с фиксацией) блоки- рует (в исключительном режиме) строки, которые вставлялись, удалялись или модифицировались. Этот режим допускает неповторяющееся чтение и вставку «призраков», но блокирует преждевременное («грязное») чтение и потерянное обновление. Уровень READ UNCOMMITTED блокирует строки, которые вставлялись, удалялись или модифицировались, в неисключи- тельном режиме и обеспечивает лишь отсутствие потерянных обновлений. 131 Команда, устанавливающая уровень изоляции, обычно выполняется в самом начале транзакции и имеет вид SET TRANSACTION ISOLATION LEVEL <уровень изоляции> Выбор наиболее подходящего данной транзакции уровня изоляции может значительно уменьшить периоды ожидания транзакций, вызванные блокировками. Download 1.32 Mb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling