Странная производительность запросов SQL Server 2005 - PullRequest
2 голосов
/ 28 февраля 2011

Я заметил некоторые проблемы с производительностью с моей БД. Такой запрос (просто для примера):

SELECT * 
  FROM ActionHistory 
 WHERE ObjectId = @id"  

... выполняется произвольно с разным чтением и продолжительностью. ObjectId - это внешний ключ с индексом.

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

Я использую распределенную транзакцию с WCF. Такие результаты я получил, когда был единственным пользователем в то время, поэтому, скорее всего, это были не блокировки или что-то еще.

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

Ответы [ 3 ]

1 голос
/ 28 февраля 2011

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

0 голосов
/ 28 февраля 2011

Включить зафиксированный моментальный снимок чтения в базе данных:

ALTER DATABASE ... SET READ_COMMITTED_SNAPSHOT ON;

Это чудесным образом изменит ваши чтения, которые происходят при изолированной фиксации чтения по умолчанию, на чтение снимков, которые не блокируются блокировками.Подробнее см. Выбор уровней изоляции на основе управления версиями строк , включая использование ресурсов среды выполнения, вызванное включением чтения снимков.

0 голосов
/ 28 февраля 2011

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

Используя SQL Profiler для сравнения времени запуска / остановки запросов, вы можете определить перекрывающиеся запросы, которые могут вызвать блокировку.

Это не указание на проблему, а просто объяснение различий, которые вы видите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...