Проектирование физической структуры баз данных для SQL Server 2008 — глубокий<br />Дмитрий Артемов (dimaa@microsoft.com) С...
План<br />Зачем вообще заниматься проектированием<br />Физическая структура БД: как надо и что следует использовать<br />К...
Зачем вообще заниматься проектированием?<br />Преимущества качественного дизайна БД<br />Соответствует бизнес сценариям<br...
Основы: Проектирование структуры БД<br />На основе логической модели сторожится физическая<br />Таблицы, ключи, индексы, с...
Физическая структура БД: как надо и что следует использовать<br />Кластерные и некластерные индексы<br />Нормализация и де...
Типы запросов<br />Точечный запрос (критерий "="выбирает 1 запись)<br />Множественный запрос (критерий "=" выбирает группу...
Кластерные и некластерные индексы<br />Кластерный индекс<br />Сбалансированное (B+) дерево, которое физически определяет п...
Структура "кучи" и некластерного индекса<br />index_id = 0<br />first_iam_page<br />IAM<br />Данные<br />Данные<br />Данны...
Структура "кучи" и кластерного индекса<br />index_id = 1<br />root_page<br />Prev | NextИндекс<br />Кластерный индекс<br /...
Когда хорош кластерный индекс (1)<br />Когда запрос извлекает большое количество последовательных записей (ранговые запрос...
Когда хорош кластерный индекс (2)<br />Для широких полей напр. nvarchar(50), можно использовать хеш значения (см.CHECKSUM)...
Когда хорош кластерный индекс (3)<br />Не забывайте о накладных расходах:<br />Обновления реорганизуют таблицу<br />Падени...
Что такое некластерный индекс (1)<br />Факты<br />Повышение производительности за счет ускорения поиска<br />Сбалансирован...
Структура некластерного индекса<br />index_id > 1<br />root_page<br />Некластерный индекс<br />Prev | NextИндекс<br />Prev...
Поиск средствами некластерного индекса<br />Поиск некластерного ключа<br />Определение кластерного ключа<br />Выборка запи...
Что такое некластерный индекс (2)<br />Некластерный индекс<br />Может иметьincluded columns – полезно для "покрывающих" за...
Поиск по некластерному индексус включенными полями<br />CI: BusinessID<br />2<br />NCI: LastName<br />InclFirstName<br />K...
Некластерный индекс (1)<br />Как правильно:<br />Создавайте для полей, часто участвующих в поиске<br />Используйте на узки...
Некластерный индекс (2)<br />Недостаток: сопровождение<br />Частые обновления при большом числе индексов вредят производит...
DMV оценки работы индексов<br />Позволяют оценить полезность и качество работы индексов<br />sys.dm_db_index_usage_stats D...
Оцените наличие покрывающих запросов и включения полей в некластерный индекс</li></li></ul><li>Новое в SQL Server 2008: фи...
Фильтрованные индексы<br />Полезны для<br />Индексирования части таблицы<br />Подмножество, например для поля с большой до...
Фильтрованные индексы или представления<br />Невозможно создать фильтрованный индекс на представлении<br />Представления и...
Новое в SQL Server 2008:индексированные представления, выровненные по секциям<br />Преимущества индексированных представле...
Инструменты SQL Server 2008 d помощь при проектировании БД<br />Низкого уровня:<br />Showplan<br />Различные DMV:<br />Исп...
Недостающие индексы и DTA<br />Мотивация<br />Некоторые детали реализации<br />Различия и сходство<br />
Недостающие индексы - DMV:мотивация<br />Можем ли мы сделать <br />то же самое для индексов?<br />Да!<br />Missing Idx DMV...
DTA при проектировании физической структуры БД<br />Нагрузка<br />Database Tuning Advisor<br />SQL Server<br />EQO расширя...
DTA Input и Output<br />На вход<br />БД для оптимизации<br />Нагрузка (Profiler trace, T-SQL код)<br />На выходе<br />Реко...
Функциональность DTA (1)<br />Рекомендации по созданию/удалению:<br />Индексов (включая фильтрованные)<br />Индексированны...
Функциональность DTA (2)<br />Самостоятельное приложение<br />Каждый "подход" – отдельная сессия<br />Поддержка оптимизаци...
DTA , как правильно<br />Входная нагрузка должна быть "представительной"<br />Включать выборки и модификации<br />Использу...
Сравнение с функционалом "missing indexes"<br />
Это важно<br />DTA и Missing Indexes могут отличаться в своих рекомендациях<br />Даже при анализе единственного запроса<br...
В заключение<br />Не пускайте физическую реализацию БД на самотек<br />Проблемы проектирования (создание/удаление индексов...
Спасибо<br />
Upcoming SlideShare
Loading in...5
×

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

3,439

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
3,439
On Slideshare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
30
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. Проектирование физической структуры баз данных для SQL Server 2008 — глубокий<br />Дмитрий Артемов (dimaa@microsoft.com) Старший консультант, Microsoft Corp.<br />
  2. 2. План<br />Зачем вообще заниматься проектированием<br />Физическая структура БД: как надо и что следует использовать<br />Кластерные и некластерные индексы, фильтрованные индексы, секционирование и секционированные индексированные представления<br />Недостающие индексы (DMV)и Database Tuning Advisor (DTA). Сравнение<br />
  3. 3. Зачем вообще заниматься проектированием?<br />Преимущества качественного дизайна БД<br />Соответствует бизнес сценариям<br />Обеспечивает высокую производительность на протяжении жизненного цикла приложения<br />Облегчает масштабируемость и расширяемость приложения<br />А что физическая структура?<br />Производительность<br />
  4. 4. Основы: Проектирование структуры БД<br />На основе логической модели сторожится физическая<br />Таблицы, ключи, индексы, секционирование, размещение файлов<br />Уточнение физической модели<br />С учетом требований производительности, доступности, разграничения доступа, аудита<br />Реализация и тестирование физической модели<br />
  5. 5. Физическая структура БД: как надо и что следует использовать<br />Кластерные и некластерные индексы<br />Нормализация и денормализация для производительности<br />Возможности<br />Разреженных столбцов<br />Фильтрованных индексов<br />Выровненные секционированные представления<br />
  6. 6. Типы запросов<br />Точечный запрос (критерий "="выбирает 1 запись)<br />Множественный запрос (критерий "=" выбирает группу записей)<br />Ранговый запрос (критерии BETWEEN или "<", ">")<br />C использованием MIN/MAX<br />С использованием Group By<br />С использованием Order By<br />Запрос с соединением (Join)<br />
  7. 7. Кластерные и некластерные индексы<br />Кластерный индекс<br />Сбалансированное (B+) дерево, которое физически определяет порядок записей в таблиц<br />Только 1 на таблицу<br />Ширина ключа определяет глубину дерева – желательно минимальную (меньше операций вводавывода при обращении)<br />Неявно влияет на некластерные индексы<br />Особенно эффективен на ранговых запросах<br />Всегда покрывающий<br />Всегда уникальный<br />"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."<br />"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"<br />
  8. 8. Структура "кучи" и некластерного индекса<br />index_id = 0<br />first_iam_page<br />IAM<br />Данные<br />Данные<br />Данные<br />"Куча" (Heap)<br />
  9. 9. Структура "кучи" и кластерного индекса<br />index_id = 1<br />root_page<br />Prev | NextИндекс<br />Кластерный индекс<br />Prev | NextИндекс<br />Prev | NextИндекс<br />Prev | NextИндекс<br />Prev | Next<br />Данные<br />Prev | Next<br />Данные<br />Prev | Next<br />Данные<br />Prev | Next<br />Данные<br />
  10. 10. Когда хорош кластерный индекс (1)<br />Когда запрос извлекает большое количество последовательных записей (ранговые запросы)<br />Создавайте на часто используемых полях (d составе соединений с критериями "=", "<", ">", "BETWEEN")<br />Если число возвращаемых записей мало, некластерный индекс тоже справится не хуже<br />Лучше использовать на узких полях с высокой избирательностью<br />
  11. 11. Когда хорош кластерный индекс (2)<br />Для широких полей напр. nvarchar(50), можно использовать хеш значения (см.CHECKSUM):<br />Требует перестроения запроса<br />Не гарантирует уникальности, придется использовать дополнительный критерий<br />Не все хешируется безупречно<br />
  12. 12. Когда хорош кластерный индекс (3)<br />Не забывайте о накладных расходах:<br />Обновления реорганизуют таблицу<br />Падение производительности<br />Постепенная фрагментация индексов<br />В определенный момент придется реорганизовывать или перестраивать индекс (это не всегда возможно online)<br />Фоновые операции с индексами доступны только в выпусках SQL ServerEnterprise, Developer и Evaluation<br />
  13. 13. Что такое некластерный индекс (1)<br />Факты<br />Повышение производительности за счет ускорения поиска<br />Сбалансированное (B+) дерево, которое не влияет на организацию записей<br />Можно создать<br />Всего до 250 индексов на таблицу для SQL 2005<br />Всего до 1000 индексов на таблицу для SQL 2008<br />Состоит из пар (ключ, "указатель")<br />Указатель: record ID (RID) или кластерный ключ<br />Указатель стабилен для базовой таблицы<br />
  14. 14. Структура некластерного индекса<br />index_id > 1<br />root_page<br />Некластерный индекс<br />Prev | NextИндекс<br />Prev | NextИндекс<br />Prev | NextИндекс<br />Prev | NextИндекс<br />Prev | Next<br />RID или кл. ключ,<br />Included cols<br />Prev | Next<br />…<br />Prev | Next<br />…<br />Prev | Next<br />…<br />
  15. 15. Поиск средствами некластерного индекса<br />Поиск некластерного ключа<br />Определение кластерного ключа<br />Выборка записи<br />Возврат результатов<br />NCI: LastName<br />CI: BusinessID<br />Key(s)<br />4<br />Value(s)<br />1<br />3<br />1<br />Kim<br />Adams<br />6<br />John <br />Smith<br />11<br />Lewis<br />Clark<br />Adams<br />1<br />Clark<br />11<br />Smith<br />1<br />2<br />
  16. 16. Что такое некластерный индекс (2)<br />Некластерный индекс<br />Может иметьincluded columns – полезно для "покрывающих" запросов<br />Фактическое дублирование данных, но исключает поход в таблицу/кластерный индекс<br />Не связан ограничением в 16 полей ключа или длины 900 байт на ключ<br />
  17. 17. Поиск по некластерному индексус включенными полями<br />CI: BusinessID<br />2<br />NCI: LastName<br />InclFirstName<br />Key(s)<br />Value(s)<br />1<br />Kim<br />Adams<br />6<br />Smith<br />John<br />11<br />Lewis<br />Clark<br />Adams<br />1<br />Clark<br />11<br />Smith<br />1<br />1<br />Kim<br />Lewis<br />John<br />
  18. 18. Некластерный индекс (1)<br />Как правильно:<br />Создавайте для полей, часто участвующих в поиске<br />Используйте на узких полях с высокой избирательностью<br />Используйте на foreign key constraints (ускорение запросов с соединениями)<br />Проверьте возможность "покрытия" запросов<br />Оцените возможность включения полей<br />
  19. 19. Некластерный индекс (2)<br />Недостаток: сопровождение<br />Частые обновления при большом числе индексов вредят производительности<br />Оцените преимущество [НЕ] индексирования маленьких таблиц<br />
  20. 20. DMV оценки работы индексов<br />Позволяют оценить полезность и качество работы индексов<br />sys.dm_db_index_usage_stats DMV<br />sys.dm_db_index_physical_stats()<br />sys.dm_db_index_operational_stats()<br />Как ими пользоваться<br />Большое число поисков (user seek)для кластерного индекса<br />Число обращений (user lookup)также велико<br />Число поисков для некластерного индекса также очень велико<br /><ul><li>Оцените возможность кластеризации некластерного индекса
  21. 21. Оцените наличие покрывающих запросов и включения полей в некластерный индекс</li></li></ul><li>Новое в SQL Server 2008: фильтрованные индексы<br />Некластерный индекс с фильтром<br />Преимущества<br />Более дешевое сопровождение и меньшие размеры<br />Потенциальное улучшение плана (более точная статистика на меньшем диапазоне данных)<br />
  22. 22. Фильтрованные индексы<br />Полезны для<br />Индексирования части таблицы<br />Подмножество, например для поля с большой долей NULL<br />Разнородные данные<br />Секция очень большой таблицы<br />Индексирования активной части данных<br />
  23. 23. Фильтрованные индексы или представления<br />Невозможно создать фильтрованный индекс на представлении<br />Представления имеют более богатый функционал, но не всегда обеспечивают эффективный план<br /><, >, =<br />
  24. 24. Новое в SQL Server 2008:индексированные представления, выровненные по секциям<br />Преимущества индексированных представлений<br />Предрассчитанные и сохраненные агрегаты<br />Материализованные соединения таблиц<br />Комбинация вышеперечисленного<br />Новое в SQL Server 2008: выровненные секционированные представления<br />Больше не нужно пересоздавать представления после переключения секций<br />Правила использования аналогичны правилам для индексов (см. http://msdn.microsoft.com/en-us/library/dd171921.aspx) <br />
  25. 25. Инструменты SQL Server 2008 d помощь при проектировании БД<br />Низкого уровня:<br />Showplan<br />Различные DMV:<br />Использование индексов<br />Недостающие индексы<br />Высокого уровня: Database Engine Tuning Advisor<br />
  26. 26. Недостающие индексы и DTA<br />Мотивация<br />Некоторые детали реализации<br />Различия и сходство<br />
  27. 27. Недостающие индексы - DMV:мотивация<br />Можем ли мы сделать <br />то же самое для индексов?<br />Да!<br />Missing Idx DMVs<br />
  28. 28. DTA при проектировании физической структуры БД<br />Нагрузка<br />Database Tuning Advisor<br />SQL Server<br />EQO расширяет возможности стандартного оптимизатора предоставляя "what-if" интерфейс оптимизации. Вызов к интерфейсу имитирует оптимизацию запроса, предполагая что имеется определенный индекс.<br />What-If API<br />Алгоритм<br />поиска<br />Extended<br />Query<br />Optimizer<br />Рекомендации<br />Внедрение<br />
  29. 29. DTA Input и Output<br />На вход<br />БД для оптимизации<br />Нагрузка (Profiler trace, T-SQL код)<br />На выходе<br />Рекомендации по созданию/удалению:<br />Индексов (включая фильтрованные)<br />Индексированных представлений<br />Секционирования<br />Статистики<br />Ожидаемый % улучшений – оценка стоимости от оптимизатора<br />Отчеты с рекомендациями<br />
  30. 30. Функциональность DTA (1)<br />Рекомендации по созданию/удалению:<br />Индексов (включая фильтрованные)<br />Индексированных представлений<br />Секционирования<br />Статистики<br />Оптимизация с ограничением по времени<br />Завершение оптимизации в отведенные сроки<br />Ввод/Выводв формате XML<br />Открытая схема:<br />http://schemas.microsoft.com/sqlserver/2004/07/dta/dtaschema.xsd<br />Возможность назначения весов элементам нагрузки<br />Определяемая пользователем конфигурация<br />Открывает возможности анализа"What-if"<br />Позволяет указать специфику оптимизации<br />
  31. 31. Функциональность DTA (2)<br />Самостоятельное приложение<br />Каждый "подход" – отдельная сессия<br />Поддержка оптимизации в сценарии Тестовая/Промышленная среда<br />Поддержка множественных БД<br />Возможность сессии в режиме "Drop-only"<br />Удаление неиспользуемых индексов, индексированных представлений<br />Аналитические отчеты…<br />Стоимость запросов, использование индексов, анализ нагрузки, …<br />Рекомендует<br />Индексы со включенными столбцами<br />Операции с индексами в фоновом режиме<br />
  32. 32. DTA , как правильно<br />Входная нагрузка должна быть "представительной"<br />Включать выборки и модификации<br />Используйте шаблон Tuning для сбора данных средствами Profiler<br />При оптимизации единственного запроса выбирайте настройку "Keep existing PDS"<br />Используйте сценарий test/production для переноса нагрузки по оптимизации на тестовый сервер<br />Используйте ограничение по времени для оптимизации в рамках "административного окна"<br />Консольный вариант (DTA.Exe)позволяет автоматизировать процесс<br />Usage:<br />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] [-?]<br />
  33. 33. Сравнение с функционалом "missing indexes"<br />
  34. 34. Это важно<br />DTA и Missing Indexes могут отличаться в своих рекомендациях<br />Даже при анализе единственного запроса<br />Кого использовать?<br />Используйте "missing indexes"для быстрого анализа необходимых индексов<br />Проверьте средствами DTA<br />Используйте DTA если<br />Нужен подробный анализ<br />Важен учет операций обновления и объемов <br />Нужно рассмотреть индексированные представления и секционирование<br />Проверяйте рекомендации от обоих инструментов<br />
  35. 35. В заключение<br />Не пускайте физическую реализацию БД на самотек<br />Проблемы проектирования (создание/удаление индексов, представлений) отзываются падением производительности<br />Используйте имеющиеся инструменты:<br />Showplan<br />DMV с анализом индексов<br />Missing index DMV– для индивидуальных запросов<br />DTA – для анализа нагрузки<br />Проверяйте рекомендации в тестовой среде<br />
  36. 36. Спасибо<br />
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×