Установка уровня изоляции транзакций

Чтобы задать уровень изоляции транзакций, приложение использует атрибут подключения SQL_ATTR_TXN_ISOLATION. Если источник данных не поддерживает запрошенный уровень изоляции, драйвер или источник данных может задать более высокий уровень. Чтобы определить, какие уровни изоляции транзакций поддерживает источник данных и какой уровень изоляции по умолчанию, приложение вызывает SQLGetInfo с параметрами SQL_TXN_ISOLATION_OPTION и SQL_DEFAULT_TXN_ISOLATION соответственно.

Более высокий уровень изоляции транзакций обеспечивает большую защиту целостности данных базы данных. Сериализуемые транзакции гарантированно не влияют на другие транзакции и, следовательно, гарантируют целостность базы данных.

Тем не менее, более высокий уровень изоляции транзакций может привести к снижению производительности, так как это повышает вероятность того, что приложению придется ждать освобождения блокировки данных. Приложение может указать более низкий уровень изоляции для повышения производительности в следующих случаях:

  • Если можно гарантировать, что другие транзакции не существуют, которые могут препятствовать транзакциям приложения. Эта ситуация возникает только в ограниченных обстоятельствах, например, когда один человек в небольшой компании хранит файлы dBASE, содержащие данные персонала на одном компьютере и не совместно используют эти файлы.

  • Если скорость является более критической, чем точность, и любые ошибки, скорее всего, будут небольшими. Например, предположим, что компания делает много небольших продаж и что крупные продажи редки. Транзакция, которая оценивает общее значение всех открытых продаж, может безопасно использовать уровень изоляции read Uncommitted. Хотя транзакция будет включать заказы, которые открываются или закрываются и впоследствии откатываются, они, как правило, отменяют друг друга, и транзакция будет гораздо быстрее, так как она не блокируется каждый раз, когда она сталкивается с таким заказом.

Дополнительные сведения см. в разделе "Оптимистическое параллелизм".