2017-02-11 2 views
0

В настоящее время у нас возникают трудности с тайм-аутом процедуры sql-сервера по запросам. В 9 раз из 10 запрос будет выполняться в течение 5 секунд, однако в некоторых случаях proc может продолжать работать более 2 минут и вызывать тайм-ауты на передней панели (приложение .net MVC).сохраненные профайлы времени

Они исследовали это уже более недели, проверяя рабочие места, производительность сервера, и все, кажется, в порядке.

DBA сузили его до конкретной таблицы, которая бомбардируется из разных приложений со вставками/обновлениями. Это в сочетании с запросом на сложный выбор, который вызывает тайм-аут, который соединяется с этой таблицей (им сообщается), вызывает тайм-ауты.

Есть ли какие-либо предложения о том, как обойти эти тайм-ауты? т.е.

  • повторить таблицу и запросить новую таблицу?
  • Любая дополнительная отладка, которая может доказать, что на самом деле это проблема?
  • Возможно кэширование данных на передней панели, если тайм-аут, данные вызова из кеша?
+0

Сохраняет ли хранимая процедура чтение или запись данных? –

+0

@DanBracuk proc читает данные – Simon

+0

Настройка уровня изоляции транзакций для чтения, не будет больно и может помочь. https://msdn.microsoft.com/en-CA/library/ms173763.aspx –

ответ

0

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

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

Одной из причин нестабильной работы хранимых процедур в SQL Server является компиляция. Код в хранимой процедуре скомпилирован при первом запуске - результирующий план выполнения может работать для некоторых входов, а не для других. Это легко фиксируется с помощью возможности перекомпилировать запросы каждый раз (хотя это добавляет дополнительные издержки).

Затем подумайте о запросе. Нужны ли ему самые современные данные? Если нет, возможно, вы можете просто скопировать таблицу один раз в час или один раз в день.

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

Репликация может или не поможет решить эту проблему. В конце концов, полная репликация будет делать обновления на копируемой копии. Вы не решаете проблему «бомбардировки», бомбардируя две таблицы.

Если ваши запросы содержат много исторических данных, то разделение может помочь. Только самый последний раздел будет «бомбардирован», оставив остальных более восприимчивыми к запросам.

0

DBA сузили его до определенной таблицы, которая бомбардируется из разных приложений с помощью вставок/обновлений. Это, в сочетании со сложным запросом на выборку, который вызывает тайм-аут, который объединяет в этой таблице (им говорят) является причиной тайм-аутов

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

Некоторые могут быть применимы в вашем случае, некоторые могут не ...но после не причинят никакого вреда

Изменение ниже настройки сервера SQL:
1.Remote Войти таймаут: 60
2.Remote ожидание запроса: 0

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

Вы можете также настроить, некоторые из окна настроек сервера

TCP Offloading/Chimney & RSS…What is it and should I disable it?

После этих действий, сократили время аутов на 99% ..

Для остальных 1%, мы имели дело каждый случай отдельно

1.Update статистики для этих таблиц, участвующих в запросе
2. Попробуйте выполнить точную настройку запроса далее

Это помогло нам полностью сократить время выхода.

Смежные вопросы