Я работаю на SQL Server 2008 R2 и пытаюсь настроить производительность.Я сделал все от меня зависящее:
- Проверка кода кода SQL
- Создание или удаление индексов, если я считаю это целесообразным
- Автоматическое создание статистики ВКЛ
- Автоматическое обновление статистики ВКЛ
- Автоматическое обновление статистики асинхронное ВКЛ
У меня есть система 24/7, которая постоянно хранит данные.Иногда мы читаем, и вот в чем проблема.Иногда чтение занимает пару секунд или меньше (что было бы ожидаемым и приемлемым для нас).В других случаях считывание занимает несколько секунд, а до завершения хранимой процедуры может потребоваться до минуты, и мы визуализируем данные в пользовательском интерфейсе.
Если мы сделаем чтение еще раз, это будет быстрее.Профилировщик SQL будет отслеживать конкретную хранимую процедуру или запрос, который занимает несколько секунд.Мы бы приблизились к этой хранимой процедуре и сделали бы все возможное, чтобы оптимизировать ее, если сможем.
Я также проследил событие автоматической статистики и событие перекомпиляции.Трудно сказать, обновляется ли статистика, что приводит к длительному чтению, или перекомпиляция вызвала его.Иногда я вижу, что профилировщик отслеживает перекомпиляцию запроса на чтение, которая занимает несколько неприемлемых минут, в других случаях он не отслеживает перекомпиляцию.
Я пытался запретить оптимизатору запросов блокировать чтение, пока он не перекомпилируетили обновляет статистику, используя опцию использования плана XML и т. д. Но я столкнулся с ошибками компиляции, жалуясь на то, что план запроса XML недействителен;это может быть правдой, потому что запрос тихий: select + объединения, которые включают локальную таблицу var.Я вроде взломал XML и, возможно, поэтому он счел его недействительным.Поэтому я отказался от использования подсказки плана.
Мы пытались периодически (каждые 15 минут) запускать статистику обновления вручную, чтобы поддерживать статистику как можно более актуальной, но это ухудшало производительность.updatestats
блокирует запись, и я уверен, что даже читает;updatestats
, казалось, поддерживал кучу статистики, и в среднем это занимало около 80-90 секунд.Чтение, которое ждет так долго, недопустимо.
Таким образом, идея состоит в том, чтобы позволить чтению произойти и предотвратить ситуацию, когда статистика перекомпиляции / обновления блокирует его, правильно?Имеет ли смысл вообще отключать авто статистику?Или, возможно, отключить автоматическое создание статистики после удаления всех автоматически созданных статистических данных?
Возможно, это идет вразрез с рекомендациями Microsoft, так как они по умолчанию включают автоматическое создание статистики и автоматическое обновление статистики, и производительность может пострадать, но любые идеи / советыВы можете дать будет оценена.