Меры по улучшению производительности OLTP запросов

Tsql теория > Меры по улучшению производительности OLTP запросов
01.04.2013 14:15:00



Статья:

Довольно часто программист либо архитектор ПО при проектировании не разделяет OLTP и OLAP сценарии использования системы и совмещает эти 2 подхода в одной БД.

В таком случае при уровне READ COMMITED возникают многочисленные блокировки.

Предлагаю вашему вниманию ряд мер по борьбе с данным злом.

 
1. Для явных критически важных OLTP запросов выставить приоритет в случае Deadlock'а.
SET DEADLOCK_PRIORITY 10
 
Это нам поможет в случае deadlock'а с "отчетным" запросом финишировать с победой OLTP запроса.
 
2. Установить для отчетов уровень изоляции snapshot.
 

Можно поменять уровень только для ROLAP транзакций.

Так можно делать только для Select транзакций.

Так как поведение READ COMMITTED и SNAPSHOT при INSERT, UPDATE, DELETE отличаются.

  1. ALTER DATABASE AdventureWorks2008R2 SET ALLOW_SNAPSHOT_ISOLATION ON
  2. SET TRANSACTION ISOLATION LEVEL SNAPSHOT

ИЛИ

 В таком случае будут храниться версии строк на уровне statement'а, а не транзакции как в варианте 1. То есть после того как statement выполняется данные из снимка удаляются не смотря на транзакцию. Как только наступает следующий statement в транзакции делается снова снимок.

 

    1. ALTER DATABASE AdventureWorks2008R2 SET ALLOW_SNAPSHOT_ISOLATION ON
    2. ALTER DATABASE AdventureWorks2008R2 SET READ_COMMITTED_SNAPSHOT ON
    3. SET TRANSACTION ISOLATION LEVEL READ COMMITTED

 

ВНИМАНИЕ! при включении опций базы ALLOW_SNAPSHOT_ISOLATION или READ_COMMITTED_SNAPSHOT в базе не должно быть FILESTREAM filegroups.