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

Preview:

DESCRIPTION

 

Citation preview

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

Дмитрий Артемов (dimaa@microsoft.com) Старший консультант, Microsoft Corp.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Кластерные и некластерные индексы• Кластерный индекс– Сбалансированное (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"

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

• "Куча" (Heap) IAM

index_id = 0 first_iam_page

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

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

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

Индекс

index_id = 1 root_page

Prev | Next

Данные

Prev | Next

Индекс

Prev | Next

Индекс

Prev | Next

Индекс

Prev | Next

Данные

Prev | Next

Данные

Prev | Next

Данные

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Индекс

index_id > 1 root_page

Prev | Next

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

Included cols

Prev | Next

Индекс

Prev | Next

Индекс

Prev | Next

Индекс

Prev | Next

Prev | Next

Prev | Next

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

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. Возврат

результатов

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Соединения

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

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

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

<, >, =

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

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

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

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

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

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

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

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

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

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

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

Да!Missing Idx

DMVs

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

SQL ServerWhat-If API

Database Tuning Advisor

ExtendedQuery

Optimizer

Внедрение

Нагрузка

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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] [-?]

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

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

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

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

Да Нет

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

Да Нет

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

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

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

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

Да Нет

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Спасибо

Recommended