Спорадические таймауты SQL с объединениями, хороший индекс - PullRequest
0 голосов
/ 01 марта 2011

У меня запрос в некоторых случаях, но не в других. Я использую SQL Server 2008, MVC3, EF.

Запрос довольно большой (код EF), однако после исследования в QA (используя точный запрос в Profiler) все ветви используют поиск по индексу. Это соединение из двух или трех таблиц, в зависимости от того, какой именно запрос (около 4 разных, с 4 вариантами, в зависимости от того, по какому столбцу я запрашиваю). Столы имеют около 400 тыс., 100 тыс. И 1,2 м строк. Тем не менее, я получаю тайм-ауты даже при соединении 400–100 тыс. Я делаю записи по 50 записей за раз, но я получаю тайм-ауты на счет, а, ну.

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

Я пытался использовать отчеты в SSMS в поисках блокирующих транзакций, блокировки ресурсов, я установил чтение не зафиксировано, просмотрел таблицы профилей ...

Единственное, что вызывает подозрение, это то, что эти таблицы обновляются ежедневно, один раз - с использованием большого удаления и массового импорта. Может быть статистика отключена или индекс? Я перестраиваю большинство этих индексов по ночам, но не уверен в этих таблицах. Есть ли способ проверить это дело? Я мог бы перестроить индекс после времени импорта, не было бы слишком много простоев, и это лучше, чем случайные тайм-ауты. Но я все еще не уверен, что это так.

1 Ответ

0 голосов
/ 02 марта 2011

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

Еще одна вещь, о которой я могу подумать, это то, что DOP (Степени парралезизма <никогда не может произносить это слово извините :(), поэтому взгляните на каждый запрос, который рассчитан на время. взгляните на его план запроса. Если вы наведите курсор на строки для объединения и т. д., вы увидите примерное количество строк против фактического количества строк. Если, например, вы ожидаете 500 тыс. строк, но возвращаете 10 строк , тогда SQLServer чрезмерно усложняет ваш план выполнения запросов. </p>

Мы можем изменить способ выполнения запроса, используя Query Hints (MSDN LINK)

НТН,

Stu

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