Как ответить, почему вдруг нам нужны индексы или запрос должен быть изменен

11

Я младший DBA с 3-х летним стажем. Наша работа заключается в точной настройке запросов или информировании разработчиков о том, что определенный код должен быть переписан или необходимы индексы.

Один простой вопрос, который часто задает команда разработчиков: «Вчера все прошло нормально, что изменилось внезапно?» и нас попросят проверить инфраструктуру. Первая реакция на любую проблему всегда заключается в том, чтобы максимально возложить вину на инфраструктуру, которая всегда является первой проверяемой вещью.

Как мы должны отвечать на вопросы «что изменилось» командой разработчиков? Ребята, вы когда-нибудь сталкивались с такой же ситуацией? Если это так, пожалуйста, поделитесь своим опытом.

TheGameiswar
источник

Ответы:

10

Как ответить на вопрос, который изменил вопрос от dev?

Это очень распространенный вопрос не только для DEV, но и для любой команды в сфере ИТ и бизнеса.

Что изменилось? ==> можно ответить фактами и цифрами.

Факты относятся к примеру

  • увеличить количество пользователей, обращающихся к базе данных?
  • Любые изменения в параметре конфигурации сервера?
  • Обслуживание базы данных - обновление статистики, реорганизация / перестроение индексов не выполняется? Из-за этого планы создаются неправильно!
  • Количество данных увеличилось?
  • Изменения были сделаны на стороне сети, была исправлена ​​ОС и / или был развернут новый пакет обновления или CU для сервера sql - без проведения полного регрессионного тестирования вашего бизнес-цикла приложения ?
  • Основной SAN стал внезапно медленным?

Цифры могут быть получены, если у вас есть данные, чтобы показать. Например :

  • Базовое определение вашего сервера имеет решающее значение в этой ситуации. Это облегчит игру с обвинениями, поскольку вы можете подкрепить факты достоверными цифрами.
  • Начните сбор данных с помощью DMV или sp_whoisactive для таблицы, чтобы данные сохранялись после перезагрузки сервера sql.

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

Кин Шах
источник
7

Ну, вы могли бы получить другой план, потому что:

  • план мог быть удален из кеша из-за:
    • перезапуск службы
    • ручная очистка кэша плана
    • перезапуск службы или отработка отказа
    • непреднамеренное изменение, например, некоторые sp_configureизменения могут очистить кэш
    • некоторые изменения в базовых объектах, индексах, статистике или других зависимостях вызвали перекомпиляцию
  • Вы можете просто получить другой план, чем другие пользователи или предыдущие вызовы, потому что:
    • текст запроса может не совпадать (это касается чувствительности к регистру и пробелов, не говоря уже о разных столбцах, критериях объединения, фильтрах и т. д.)
    • запрос может быть выполнен разными пользователями с разными заданными параметрами (или разными схемами по умолчанию, если какой-либо объект в плане не имеет полностью определенного имени, включая схему )
  • запрос и план может быть такой же, но вы могли бы получать различную производительность , потому что:
    • план был кэширован с использованием других параметров, и этот план не является оптимальным для текущего набора параметров (это обычно называется «анализом параметров»)
    • объем данных на основе параметров или просто из-за изменения данных в то же время значительно отличается
    • данные изменились достаточно для того, чтобы изменить наиболее эффективный способ доступа к данным, но недостаточно для запуска обновления статистики или перекомпиляции (поиск по ключевой проблеме по возрастанию, а также алгоритм автоматической статистики)
    • данные были удалены из пула буферов и теперь должны быть прочитаны с диска
    • существует более высокий уровень параллелизма, блокировки или других нагрузок на ресурсы, необходимые для выполнения запроса

Я подробно расскажу о них здесь:

Если они работают в разных средах, то у меня есть целый ряд вещей, чтобы проверить здесь:

Кроме того, важно иметь в виду, что создание индекса или изменение запроса не может быть прямой причиной того, что запрос внезапно работает лучше - иногда это просто потому, что эти изменения действительно породили новый план и / или сделали недействительным тот, который уже существовал. ,

Аарон Бертран
источник
7

Как обычно, Аарон Бертран и Кин дали отличные ответы. Однако оба ответа содержат общую тему. Если вы проанализируете любой из ответов, вы увидите, что причина, по которой XYZ не работает так, как он работал вчера, не в том, что вы / они / человек X сделали. Причина, по которой все изменилось, заключается в том, что база данных решила действовать по-другому из-за причин XYZ.

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

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

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

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

* Я понимаю, «почему» очень ценно для будущей профилактики, обучения и т. Д., Но кажется, что ОП сталкивается с сопротивлением со стороны людей, которые не пытаются узнать о проблеме или помочь ей.

Erik
источник