close

Вход

Забыли?

вход по аккаунту

?

Конференция по разработке

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