Блог Галс Софтвэр

10 лучших практик по настройке производительности баз данных

Мониторинг
Насколько важна настройка производительности базы данных? Чтобы данные были легко и быстро доступны, базы данных должны работать эффективно и быть доступными в любое время. Но поддерживать оптимальную производительность базы данных может быть непросто.

Существует бесконечное множество причин, по которым базы данных не работают хорошо, но проблемы с производительностью SQL почти всегда являются результатом плохо написанных запросов и неэффективного индексирования.

Здесь в игру вступает настройка производительности. Настройка производительности SQL — это процесс обеспечения максимально плавного выполнения операторов SQL путем поиска и выбора наиболее быстрого пути ответа на запрос. Но решить, с чего начать настройку производительности и нужно ли это, может быть непросто.

Улучшение вашего подхода к настройке производительности базы данных


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

1. Регулярно обновляйте статистику


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

2. Не используйте начальные подстановочные знаки


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

3. Избегайте SELECT *


Этот совет особенно важен, если у вас большая таблица (типа сотни столбцов и миллионов строк). Если приложению требуется только несколько столбцов, включите их по отдельности, вместо того чтобы тратить время на запросы всех данных. Опять же, чтение дополнительных данных приведет к резкому скачку загрузки ЦП и потере памяти. Вы должны проверить ожидаемую продолжительность жизни страницы (PLE), чтобы убедиться, что у вас нет этой проблемы.

4. Используйте ограничения (constraints)


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

5. Смотрите на фактический план выполнения, а не на предполагаемый


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

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


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

7. Настройте индексы, чтобы уменьшить количество операций ввода-вывода


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

8. Анализируйте планы запросов


Использование искусственного интеллекта для анализа вашего плана выполнения и определения того, как его изменить, помогает базам данных выполнять операции более эффективно.

9. Сравните оптимизированный и оригинальный SQL


При оптимизации запросов SQL не забудьте выделить изменения в операторе SQL, чтобы вы могли сравнить исходный оператор с оптимизированной версией. Соберите базовую метрику, такую ​​как логический ввод-вывод, для сравнения во время настройки. Не вносите никаких изменений, пока не убедитесь, что оптимизированная версия точна (т. е. включает текущую статистику) и действительно повышает производительность.

10. Автоматизируйте оптимизацию SQL


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

Сделать настройку производительности рутинной практикой


Настройка производительности — ключ к повышению производительности базы данных. Сосредоточившись на оптимизации запросов и очистке индексов, большая часть проблем с производительностью может быть решена без особых трудностей. Регулярная настройка производительности базы данных помогает обеспечить высокую доступность и быстрое время отклика, что является обязательным условием для современных конечных пользователей, которым требуется не менее 100 процентов от приложений, на которые они полагаются.

Для мониторинга и управления базами данных мы рекомендуем использовать специализированное решение Foglight for Databases. Инструмент позволяет контролировать SQL Server, Oracle, MySQL, PostgreSQL, DB2, SAP ASE, MongoDB и Cassandra.

Читайте также наши статьи на Хабре:

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

Быстрая локализация проблем производительности Microsoft SQL Server в Quest Foglight

Интерфейсы для мониторинга производительности популярных БД в Foglight for Databases