36
Проектирование физической структуры баз данных для SQL Server 2008 — глубокий Дмитрий Артемов ([email protected] ) Старший консультант, Microsoft Corp.

физическая структура хранения артемов Ready

  • Upload
    rit2010

  • View
    2.947

  • Download
    0

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: физическая структура хранения артемов Ready

Проектирование физической структуры баз данных для SQL Server 2008 — глубокий

Дмитрий Артемов ([email protected]) Старший консультант, Microsoft Corp.

Page 2: физическая структура хранения артемов Ready

План• Зачем вообще заниматься проектированием

• Физическая структура БД: как надо и что следует использовать– Кластерные и некластерные индексы, фильтрованные

индексы, секционирование и секционированные индексированные представления

• Недостающие индексы (DMV) и Database Tuning Advisor (DTA). Сравнение

Page 3: физическая структура хранения артемов Ready

Зачем вообще заниматься проектированием?

• Преимущества качественного дизайна БД– Соответствует бизнес сценариям– Обеспечивает высокую производительность на

протяжении жизненного цикла приложения– Облегчает масштабируемость и расширяемость

приложения• А что физическая структура?– Производительность

Page 4: физическая структура хранения артемов Ready

Основы: Проектирование структуры БД

• На основе логической модели сторожится физическая– Таблицы, ключи, индексы, секционирование,

размещение файлов• Уточнение физической модели– С учетом требований производительности,

доступности, разграничения доступа, аудита• Реализация и тестирование физической модели

Page 5: физическая структура хранения артемов Ready

Физическая структура БД: как надо и что следует использовать

• Кластерные и некластерные индексы• Нормализация и денормализация для

производительности• Возможности– Разреженных столбцов– Фильтрованных индексов– Выровненные секционированные

представления

Page 6: физическая структура хранения артемов Ready

Типы запросов• Точечный запрос (критерий "="

выбирает 1 запись)• Множественный запрос

(критерий "=" выбирает группу записей)

• Ранговый запрос (критерии BETWEEN или "<", ">")

• C использованием MIN/MAX• С использованием Group By• С использованием Order By• Запрос с соединением (Join)

Page 7: физическая структура хранения артемов Ready

Кластерные и некластерные индексы• Кластерный индекс– Сбалансированное (B+) дерево, которое

физически определяет порядок записей в таблиц

– Только 1 на таблицу– Ширина ключа определяет глубину дерева –

желательно минимальную (меньше операций ввода\вывода при обращении)

– Неявно влияет на некластерные индексы– Особенно эффективен на ранговых запросах– Всегда покрывающий– Всегда уникальный

"In a B+ tree, in contrast to a B-tree, all records are stored at the leaf level of the tree; only keys are stored in interior nodes."

"If you don't enforce and guarantee uniqueness yourself, SQL Server will add a 4-byte "uniquefier" to each and every one of your rows"

Page 8: физическая структура хранения артемов Ready

Структура "кучи" и некластерного индекса

• "Куча" (Heap) IAM

index_id = 0 first_iam_page

Данные Данные Данные

Page 9: физическая структура хранения артемов Ready

Структура "кучи" и кластерного индекса

• Кластерный индекс Prev | Next

Индекс

index_id = 1 root_page

Prev | Next

Данные

Prev | Next

Индекс

Prev | Next

Индекс

Prev | Next

Индекс

Prev | Next

Данные

Prev | Next

Данные

Prev | Next

Данные

Page 10: физическая структура хранения артемов Ready

Когда хорош кластерный индекс (1)

• Когда запрос извлекает большое количество последовательных записей (ранговые запросы)– Создавайте на часто используемых полях (d составе

соединений с критериями "=", "<", ">", "BETWEEN")– Если число возвращаемых записей мало,

некластерный индекс тоже справится не хуже– Лучше использовать на узких полях с высокой

избирательностью

Page 11: физическая структура хранения артемов Ready

Когда хорош кластерный индекс (2)

• Для широких полей напр. nvarchar(50), можно использовать хеш значения (см. CHECKSUM):

• Требует перестроения запроса

• Не гарантирует уникальности, придется использовать дополнительный критерий

• Не все хешируется безупречно

Page 12: физическая структура хранения артемов Ready

Когда хорош кластерный индекс (3)

• Не забывайте о накладных расходах:– Обновления реорганизуют таблицу• Падение производительности• Постепенная фрагментация индексов• В определенный момент придется

реорганизовывать или перестраивать индекс (это не всегда возможно online)

Фоновые операции с индексами доступны только в выпусках SQL Server Enterprise, Developer и Evaluation

Page 13: физическая структура хранения артемов Ready

Что такое некластерный индекс (1)• Факты

– Повышение производительности за счет ускорения поиска– Сбалансированное (B+) дерево, которое не влияет на

организацию записей– Можно создать

• Всего до 250 индексов на таблицу для SQL 2005• Всего до 1000 индексов на таблицу для SQL 2008

– Состоит из пар (ключ, "указатель")– Указатель: record ID (RID) или кластерный ключ– Указатель стабилен для базовой таблицы

Page 14: физическая структура хранения артемов Ready

Структура некластерного индекса

• Некластерный индекс Prev | Next

Индекс

index_id > 1 root_page

Prev | Next

RID или кл. ключ,

Included cols

Prev | Next

Индекс

Prev | Next

Индекс

Prev | Next

Индекс

Prev | Next

Prev | Next

Prev | Next

Page 15: физическая структура хранения артемов Ready

Поиск средствами некластерного индекса

CI: BusinessI

D

1 Kim Adams

6 John Smith

11 Lewis Clark

Key(s)

Value(s)

Adams 1

Clark 11

Smith 1

1

NCI: LastName

23

4

1. Поиск некластерного ключа

2. Определение кластерного ключа

3. Выборка записи4. Возврат

результатов

Page 16: физическая структура хранения артемов Ready

Что такое некластерный индекс (2)

• Некластерный индекс– Может иметь included columns – полезно для

"покрывающих" запросов• Фактическое дублирование данных, но исключает

поход в таблицу/кластерный индекс• Не связан ограничением в 16 полей ключа или

длины 900 байт на ключ

Page 17: физическая структура хранения артемов Ready

Поиск по некластерному индексус включенными полями

CI: BusinessI

D

1 Kim Adams

6 Smith John

11 Lewis Clark

Key(s) Value(s)

Adams 1

Clark 11

Smith 1

Kim

Lewis

John

NCI: LastName

1

2

Incl FirstName

Page 18: физическая структура хранения артемов Ready

Некластерный индекс (1)• Как правильно:– Создавайте для полей, часто участвующих в

поиске– Используйте на узких полях с высокой

избирательностью– Используйте на foreign key constraints (ускорение

запросов с соединениями)– Проверьте возможность "покрытия" запросов

• Оцените возможность включения полей

Page 19: физическая структура хранения артемов Ready

Некластерный индекс (2)

• Недостаток: сопровождение– Частые обновления при большом числе

индексов вредят производительности• Оцените преимущество [НЕ]

индексирования маленьких таблиц

Page 20: физическая структура хранения артемов Ready

DMV оценки работы индексов• Позволяют оценить полезность и качество работы индексов

– sys.dm_db_index_usage_stats DMV– sys.dm_db_index_physical_stats()– sys.dm_db_index_operational_stats()

• Как ими пользоваться– Большое число поисков (user seek) для кластерного индекса– Число обращений (user lookup) также велико– Число поисков для некластерного индекса также очень великоОцените возможность кластеризации некластерного индексаОцените наличие покрывающих запросов и включения полей в

некластерный индекс

Page 21: физическая структура хранения артемов Ready

Новое в SQL Server 2008: фильтрованные индексы

• Некластерный индекс с фильтром

• Преимущества– Более дешевое сопровождение и меньшие размеры– Потенциальное улучшение плана (более точная

статистика на меньшем диапазоне данных)

Page 22: физическая структура хранения артемов Ready

Фильтрованные индексы• Полезны для–Индексирования части таблицы• Подмножество, например для поля с

большой долей NULL• Разнородные данные• Секция очень большой таблицы

–Индексирования активной части данных

Page 23: физическая структура хранения артемов Ready

Фильтрованные индексы или представления

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

эффективный план

Используются в выражениях Представления Фильтрованные индексы

Вычисляемые поля

Соединения

Несколько таблиц

Простая логика сравнения в условиях

Сложная логика сравнения в условиях

<, >, =

Page 24: физическая структура хранения артемов Ready

Новое в SQL Server 2008:индексированные представления, выровненные по секциям

• Преимущества индексированных представлений– Предрассчитанные и сохраненные агрегаты– Материализованные соединения таблиц– Комбинация вышеперечисленного

• Новое в SQL Server 2008: выровненные секционированные представления– Больше не нужно пересоздавать представления после

переключения секций– Правила использования аналогичны правилам для индексов

(см. http://msdn.microsoft.com/en-us/library/dd171921.aspx)

Page 25: физическая структура хранения артемов Ready

Инструменты SQL Server 2008 d помощь при проектировании БД

• Низкого уровня:– Showplan– Различные DMV:• Использование индексов• Недостающие индексы

• Высокого уровня: Database Engine Tuning Advisor

Page 26: физическая структура хранения артемов Ready

Недостающие индексы и DTA• Мотивация• Некоторые детали реализации• Различия и сходство

Page 27: физическая структура хранения артемов Ready

Недостающие индексы - DMV:мотивация

Можем ли мы сделать то же самое для индексов?

Да!Missing Idx

DMVs

Page 28: физическая структура хранения артемов Ready

DTA при проектировании физической структуры БД

SQL ServerWhat-If API

Database Tuning Advisor

ExtendedQuery

Optimizer

Внедрение

Нагрузка

Рекомендации

Алгоритмпоиска

EQO расширяет возможности стандартного оптимизатора предоставляя "what-if" интерфейс оптимизации. Вызов к интерфейсу имитирует оптимизацию запроса, предполагая что имеется определенный индекс.

Page 29: физическая структура хранения артемов Ready

DTA Input и Output• На вход– БД для оптимизации– Нагрузка (Profiler trace, T-SQL код)

• На выходе– Рекомендации по созданию/удалению:

• Индексов (включая фильтрованные)• Индексированных представлений• Секционирования• Статистики

– Ожидаемый % улучшений – оценка стоимости от оптимизатора

– Отчеты с рекомендациями

Page 30: физическая структура хранения артемов Ready

Функциональность DTA (1)• Рекомендации по созданию/удалению:

– Индексов (включая фильтрованные)– Индексированных представлений– Секционирования– Статистики

• Оптимизация с ограничением по времени– Завершение оптимизации в отведенные сроки

• Ввод/Вывод в формате XML– Открытая схема:

http://schemas.microsoft.com/sqlserver/2004/07/dta/dtaschema.xsd– Возможность назначения весов элементам нагрузки

• Определяемая пользователем конфигурация– Открывает возможности анализа "What-if"– Позволяет указать специфику оптимизации

Page 31: физическая структура хранения артемов Ready

Функциональность DTA (2)• Самостоятельное приложение

– Каждый "подход" – отдельная сессия

• Поддержка оптимизации в сценарии Тестовая/Промышленная среда

• Поддержка множественных БД• Возможность сессии в режиме "Drop-only"

– Удаление неиспользуемых индексов, индексированных представлений

• Аналитические отчеты…– Стоимость запросов, использование индексов, анализ нагрузки, …

• Рекомендует– Индексы со включенными столбцами– Операции с индексами в фоновом режиме

Page 32: физическая структура хранения артемов Ready

DTA , как правильно• Входная нагрузка должна быть "представительной"

– Включать выборки и модификации– Используйте шаблон Tuning для сбора данных средствами Profiler

• При оптимизации единственного запроса выбирайте настройку "Keep existing PDS"

• Используйте сценарий test/production для переноса нагрузки по оптимизации на тестовый сервер

• Используйте ограничение по времени для оптимизации в рамках "административного окна"

• Консольный вариант (DTA.Exe) позволяет автоматизировать процесс

Usage:DTA.EXE [-S ServerName[\Instance]] [-U LoginId] [-P Password] [-E] [-d DatabaseName] [-D DatabaseName[, DatabaseName]] [-Tl TableName[, TableName]] [-Tf TableListFileName] [-if WorkloadFileName] [-it WorkloadTableName] [-s SessionName] [-of [ScriptFileName]] [-or [ReportFileName]] [-rl Report[, Report]] [-ox [OutputXmlFileName]] [-F] [-ID SessionID] [-ix InputXmlFileName] [-A TuningTime] [-n NumberOfEvents] [-m MinimumImprovement] [-fa PhysicalDesignStructure] [-fp PartitionStrategy] [-fk PhysicalDesignStructure] [-fx] [-fi] [-B StorageSize] [-c MaxKeyColumnsInIndex] [-C MaxColumnsInIndex] [-e TuningLogTable] [-N OnlineOption] [-q] [-u] [-x] [-a] [-?]

Page 33: физическая структура хранения артемов Ready

Сравнение с функционалом "missing indexes"Функционал DTA "Missing Indexes"

Применимость Клиентское приложение; используется администратором БД, подробный анализ нагрузки

Серверный функционал; всегда активно; быстрый анализ (для снижения накладных расходов)

UPDATE, INSERT, DELETE учитываются при анализе

Да Нет

Ограничения по размерам учитываются при анализе

Да Нет

Порядок полей в ключе индекса Автоматически определяется по оценке стоимости

Определяется пользователем

Может рекомендовать кластерный индекс Да Нет

Может рекомендовать индексированные представления

Да Нет

Может рекомендовать секционирование Да Нет

На чем основаны рекомендации Стоимость исполнения, определенная оптимизатором

Аппроксимация стоимости исполнения, определенной оптимизатором

Отчет о результатах анализа (эффект от внедрения изменений)

Да (15 отчетов) Примерная оценка от внедрения индекса

Page 34: физическая структура хранения артемов Ready

Это важно• DTA и Missing Indexes могут отличаться в своих рекомендациях

– Даже при анализе единственного запроса• Кого использовать?

– Используйте "missing indexes" для быстрого анализа необходимых индексов• Проверьте средствами DTA

– Используйте DTA если• Нужен подробный анализ• Важен учет операций обновления и объемов • Нужно рассмотреть индексированные представления и секционирование

• Проверяйте рекомендации от обоих инструментов

Page 35: физическая структура хранения артемов Ready

В заключение• Не пускайте физическую реализацию БД на самотек

– Проблемы проектирования (создание/удаление индексов, представлений) отзываются падением производительности

• Используйте имеющиеся инструменты:– Showplan– DMV с анализом индексов– Missing index DMV – для индивидуальных запросов– DTA – для анализа нагрузки

• Проверяйте рекомендации в тестовой среде

Page 36: физическая структура хранения артемов Ready

Спасибо