190 likes | 418 Views
Оптимизация запросов в Microsoft SQL Server. Дмитрий Костылев Начальник отдела разработки системного ПО ОАО « Нордеа Банк » SQL Server MVP 2009-2011. Содержание. Основные понятия Инструменты, поиск «плохих запросов» Анализ плана выполнения
E N D
Оптимизация запросов в Microsoft SQL Server Дмитрий Костылев Начальник отдела разработки системного ПООАО «Нордеа Банк» SQL Server MVP 2009-2011
Содержание • Основные понятия • Инструменты, поиск «плохих запросов» • Анализ плана выполнения • Причины снижения производительности • Способы оптимизации запросов • Техника написания "быстрых" запросов • Табличные переменные ивременные таблицы
Основные понятия • Оптимизатор • План выполнения
Пример плана выполнения select* from Client c crossapply( selectCOUNT_BIG(*)as Cnt from Orders o where o.ClientID = c.ID and o.Status='A' ) cn whereStatus='D'
Основные понятия • Оптимизатор • План выполнения • «Процедурный кэш» • Статистика • Рекомпиляция • Логические чтения
Логические чтения Клиенты Заказы
Основные понятия • Оптимизатор • План выполнения • «Процедурный кэш» • Статистика • Рекомпиляция • Логические чтения • Прослушивание параметров
Инструменты • SQL Server Management Studio (SSMS) • Profiler • Динамические системные представления (DMV)
План выполнения запроса • Читаем слева направо и сверху вниз • Поток данных – справа налево и снизу вверх
Причины снижения производительности • Изменились данные • Устарела статистика • Недостаточно ресурсов для поиска лучшего плана выполнения • Процедура запущена с «плохими» параметрами
Способы оптимизации • Изменение структур (создание и изменение индексов и статистик) • Подсказки оптимизатору (hints): • Уровня запроса • Табличные • Типы соединений • Plan Guides • Изменение логики запроса, использование промежуточных наборов • Удаление хинтов
Техника написания быстрых запросов • Все возможные вычисления делать предварительно • Не изменять проиндексированные поля, если по ним желателен поиск • Скажи нет неявным преобразованиям! • Использовать INNER JOIN если только не нужен OUTER • Порядок таблиц в запросе – сначала «меньшие потоки данных» • Универсальные запросы работают всегда одинаково плохо • Борьба с прослушивание параметров
Табличные переменные ивременные таблицы • Разное использование статистики • Для временных таблиц сохраняются все правила «обычных» • По табличным переменным не строится статистика, следствия: • Нет перекомпиляции запросов после изменения данных в таблице • Предполагается, что будет выбираться одна строка за одно обращение к таблице • Можно использовать подсказку recompile
Итоги • Быстродействие конкретных запросов зависит от выбранного оптимизатором плана выполнения • Главным образом на выбор «правильного» плана выполнения влияет статистика • Хорошая оптимизация запроса заключается в том, чтобы оптимизацией занимался сам сервер
Обратная связь Ваше мнение очень важно для нас. Пожалуйста, оцените доклад, заполните анкету и сдайте ее при выходе из зала Спасибо!
Вопросы • DB804 • Дмитрий Костылев • decolores2000@yandex.ru • www.sql.ru/blogs/decolores • начальник отдела разработки системного ПО • Вы сможете задать вопросы докладчику в зоне «Спроси эксперта» в течение часа после завершения этого доклада