SlideShare una empresa de Scribd logo
1 de 36
Проектирование физической структуры баз данных для 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"
Структура "кучи" и некластерного индекса index_id = 0 first_iam_page IAM Данные Данные Данные "Куча" (Heap)
Структура "кучи" и кластерного индекса index_id = 1 root_page Prev | NextИндекс Кластерный индекс Prev | NextИндекс Prev | NextИндекс Prev | NextИндекс Prev | Next Данные Prev | Next Данные Prev | Next Данные Prev | Next Данные
Когда хорош кластерный индекс (1) Когда запрос извлекает большое количество последовательных записей (ранговые запросы) Создавайте на часто используемых полях (d составе соединений с критериями "=", "<", ">", "BETWEEN") Если число возвращаемых записей мало, некластерный индекс тоже справится не хуже Лучше использовать на узких полях с высокой избирательностью
Когда хорош кластерный индекс (2) Для широких полей напр. nvarchar(50), можно использовать хеш значения (см.CHECKSUM): Требует перестроения запроса Не гарантирует уникальности, придется использовать дополнительный критерий Не все хешируется безупречно
Когда хорош кластерный индекс (3) Не забывайте о накладных расходах: Обновления реорганизуют таблицу Падение производительности Постепенная фрагментация индексов В определенный момент придется реорганизовывать или перестраивать индекс (это не всегда возможно online) Фоновые операции с индексами доступны только в выпусках SQL ServerEnterprise, Developer и Evaluation
Что такое некластерный индекс (1) Факты Повышение производительности за счет ускорения поиска Сбалансированное (B+) дерево, которое не влияет на организацию записей Можно создать Всего до 250 индексов на таблицу для SQL 2005 Всего до 1000 индексов на таблицу для SQL 2008 Состоит из пар (ключ, "указатель") Указатель: record ID (RID) или кластерный ключ Указатель стабилен для базовой таблицы
Структура некластерного индекса index_id > 1 root_page Некластерный индекс Prev | NextИндекс Prev | NextИндекс Prev | NextИндекс Prev | NextИндекс Prev | Next RID или кл. ключ, Included cols Prev | Next … Prev | Next … Prev | Next …
Поиск средствами некластерного индекса Поиск некластерного ключа Определение кластерного ключа Выборка записи Возврат результатов NCI: LastName CI: BusinessID Key(s) 4 Value(s) 1 3 1 Kim Adams 6 John	 Smith 11 Lewis Clark Adams 1 Clark 11 Smith 1 2
Что такое некластерный индекс (2) Некластерный индекс Может иметьincluded columns – полезно для "покрывающих" запросов Фактическое дублирование данных, но исключает поход в таблицу/кластерный индекс Не связан ограничением в 16 полей ключа или длины 900 байт на ключ
Поиск по некластерному индексус включенными полями CI: BusinessID 2 NCI: LastName InclFirstName Key(s) Value(s) 1 Kim Adams 6 Smith John 11 Lewis Clark Adams 1 Clark 11 Smith 1 1 Kim Lewis John
Некластерный индекс (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)также велико Число поисков для некластерного индекса также очень велико ,[object Object]
Оцените наличие покрывающих запросов и включения полей в некластерный индекс,[object Object]
Фильтрованные индексы Полезны для Индексирования части таблицы Подмножество, например для поля с большой долей 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 при проектировании физической структуры БД Нагрузка Database Tuning Advisor SQL Server EQO расширяет возможности стандартного оптимизатора предоставляя "what-if" интерфейс оптимизации. Вызов к интерфейсу имитирует оптимизацию запроса, предполагая что имеется определенный индекс. What-If API Алгоритм поиска Extended Query Optimizer Рекомендации Внедрение
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[nstance]] [-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 могут отличаться в своих рекомендациях Даже при анализе единственного запроса Кого использовать? Используйте "missing indexes"для быстрого анализа необходимых индексов Проверьте средствами DTA Используйте DTA если Нужен подробный анализ Важен учет операций обновления и объемов  Нужно рассмотреть индексированные представления и секционирование Проверяйте рекомендации от обоих инструментов
В заключение Не пускайте физическую реализацию БД на самотек Проблемы проектирования (создание/удаление индексов, представлений) отзываются падением производительности Используйте имеющиеся инструменты: Showplan DMV с анализом индексов Missing index DMV– для индивидуальных запросов DTA – для анализа нагрузки Проверяйте рекомендации в тестовой среде
Спасибо

Más contenido relacionado

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

Оптимизация SQL-запросов
Оптимизация SQL-запросовОптимизация SQL-запросов
Оптимизация SQL-запросовtssoft
 
рит2007 оптимизация бд бесков доронин
рит2007   оптимизация бд   бесков доронинрит2007   оптимизация бд   бесков доронин
рит2007 оптимизация бд бесков доронинMedia Gorod
 
Больше чем анализ
Больше чем анализБольше чем анализ
Больше чем анализSQALab
 
MySQL для высоконагруженных проектов
MySQL для высоконагруженных проектовMySQL для высоконагруженных проектов
MySQL для высоконагруженных проектовSoftline
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"Technopark
 
Query perfomance tuning
Query perfomance tuningQuery perfomance tuning
Query perfomance tuningcollabock
 
Tfs Overview And Architecture (www.cmcons.com)
Tfs Overview And Architecture (www.cmcons.com)Tfs Overview And Architecture (www.cmcons.com)
Tfs Overview And Architecture (www.cmcons.com)Alexander Novichkov
 
High Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus ReadyHigh Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus ReadyHighLoad2009
 
Индексы в MSSQL: принципы работы и способы оптимизации
Индексы в MSSQL: принципы работы и способы оптимизацииИндексы в MSSQL: принципы работы и способы оптимизации
Индексы в MSSQL: принципы работы и способы оптимизацииAlexander Byndyu
 
Лекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, LoaderЛекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, LoaderАлександр Брич
 
SQL Server Analysis Services 2014: табличная модель - альтернатива кубам?
SQL Server Analysis Services 2014: табличная модель - альтернатива кубам?SQL Server Analysis Services 2014: табличная модель - альтернатива кубам?
SQL Server Analysis Services 2014: табличная модель - альтернатива кубам? Andrey Korshikov
 
Презентация Microsoft PowerPoint
Презентация Microsoft PowerPointПрезентация Microsoft PowerPoint
Презентация Microsoft PowerPointwebhostingguy
 
14-02-26 DBA 101_ как найти и устранить причины замедления работы БД
14-02-26 DBA 101_ как найти и устранить причины замедления работы БД14-02-26 DBA 101_ как найти и устранить причины замедления работы БД
14-02-26 DBA 101_ как найти и устранить причины замедления работы БДAndrew Sovtsov
 
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"IT Event
 
Обзор и архитектура MS Visual Studio Team System 2008
Обзор и архитектура MS Visual Studio Team System 2008Обзор и архитектура MS Visual Studio Team System 2008
Обзор и архитектура MS Visual Studio Team System 2008Александр Шамрай
 
Моделирование для NoSQL БД
Моделирование для NoSQL БДМоделирование для NoSQL БД
Моделирование для NoSQL БДAndrew Sovtsov
 
Бизнес-контекст, совместная работа и согласованность для интеллектуального уп...
Бизнес-контекст, совместная работа и согласованность для интеллектуального уп...Бизнес-контекст, совместная работа и согласованность для интеллектуального уп...
Бизнес-контекст, совместная работа и согласованность для интеллектуального уп...Andrew Sovtsov
 
Реляционные базы данных
Реляционные базы данныхРеляционные базы данных
Реляционные базы данныхLevon Avakyan
 

Similar a физическая структура хранения артемов Ready (20)

Оптимизация SQL-запросов
Оптимизация SQL-запросовОптимизация SQL-запросов
Оптимизация SQL-запросов
 
рит2007 оптимизация бд бесков доронин
рит2007   оптимизация бд   бесков доронинрит2007   оптимизация бд   бесков доронин
рит2007 оптимизация бд бесков доронин
 
Больше чем анализ
Больше чем анализБольше чем анализ
Больше чем анализ
 
MySQL для высоконагруженных проектов
MySQL для высоконагруженных проектовMySQL для высоконагруженных проектов
MySQL для высоконагруженных проектов
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
 
Class queries
Class queriesClass queries
Class queries
 
Query perfomance tuning
Query perfomance tuningQuery perfomance tuning
Query perfomance tuning
 
Tfs Overview And Architecture (www.cmcons.com)
Tfs Overview And Architecture (www.cmcons.com)Tfs Overview And Architecture (www.cmcons.com)
Tfs Overview And Architecture (www.cmcons.com)
 
High Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus ReadyHigh Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus Ready
 
Индексы в MSSQL: принципы работы и способы оптимизации
Индексы в MSSQL: принципы работы и способы оптимизацииИндексы в MSSQL: принципы работы и способы оптимизации
Индексы в MSSQL: принципы работы и способы оптимизации
 
Лекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, LoaderЛекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, Loader
 
SQL Server Analysis Services 2014: табличная модель - альтернатива кубам?
SQL Server Analysis Services 2014: табличная модель - альтернатива кубам?SQL Server Analysis Services 2014: табличная модель - альтернатива кубам?
SQL Server Analysis Services 2014: табличная модель - альтернатива кубам?
 
Презентация Microsoft PowerPoint
Презентация Microsoft PowerPointПрезентация Microsoft PowerPoint
Презентация Microsoft PowerPoint
 
14-02-26 DBA 101_ как найти и устранить причины замедления работы БД
14-02-26 DBA 101_ как найти и устранить причины замедления работы БД14-02-26 DBA 101_ как найти и устранить причины замедления работы БД
14-02-26 DBA 101_ как найти и устранить причины замедления работы БД
 
DATA CLUSTER
 DATA CLUSTER DATA CLUSTER
DATA CLUSTER
 
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"
 
Обзор и архитектура MS Visual Studio Team System 2008
Обзор и архитектура MS Visual Studio Team System 2008Обзор и архитектура MS Visual Studio Team System 2008
Обзор и архитектура MS Visual Studio Team System 2008
 
Моделирование для NoSQL БД
Моделирование для NoSQL БДМоделирование для NoSQL БД
Моделирование для NoSQL БД
 
Бизнес-контекст, совместная работа и согласованность для интеллектуального уп...
Бизнес-контекст, совместная работа и согласованность для интеллектуального уп...Бизнес-контекст, совместная работа и согласованность для интеллектуального уп...
Бизнес-контекст, совместная работа и согласованность для интеллектуального уп...
 
Реляционные базы данных
Реляционные базы данныхРеляционные базы данных
Реляционные базы данных
 

Más de rit2010

Sphinx new
Sphinx newSphinx new
Sphinx newrit2010
 
Microsoft cluster systems ritconf
Microsoft cluster systems ritconfMicrosoft cluster systems ritconf
Microsoft cluster systems ritconfrit2010
 
анатомия интернет банка Publish
анатомия интернет банка Publishанатомия интернет банка Publish
анатомия интернет банка Publishrit2010
 
анатомия интернет банка Publish
анатомия интернет банка Publishанатомия интернет банка Publish
анатомия интернет банка Publishrit2010
 
Anatol filin pragmatic documentation 1_r
Anatol filin  pragmatic documentation 1_rAnatol filin  pragmatic documentation 1_r
Anatol filin pragmatic documentation 1_rrit2010
 
Ilia kantor паттерны серверных comet решений
Ilia kantor паттерны серверных comet решенийIlia kantor паттерны серверных comet решений
Ilia kantor паттерны серверных comet решенийrit2010
 
Alexei shilov 2010 rit-rakudo
Alexei shilov 2010 rit-rakudoAlexei shilov 2010 rit-rakudo
Alexei shilov 2010 rit-rakudorit2010
 
Alexandre.iline rit 2010 java_fxui_extra
Alexandre.iline rit 2010 java_fxui_extraAlexandre.iline rit 2010 java_fxui_extra
Alexandre.iline rit 2010 java_fxui_extrarit2010
 
Konstantin kolomeetz послание внутреннему заказчику
Konstantin kolomeetz послание внутреннему заказчикуKonstantin kolomeetz послание внутреннему заказчику
Konstantin kolomeetz послание внутреннему заказчикуrit2010
 
Bykov monitoring mailru
Bykov monitoring mailruBykov monitoring mailru
Bykov monitoring mailrurit2010
 
Alexander shigin slides
Alexander shigin slidesAlexander shigin slides
Alexander shigin slidesrit2010
 
иван василевич Eye tracking и нейрокомпьютерный интерфейс
иван василевич Eye tracking и нейрокомпьютерный интерфейсиван василевич Eye tracking и нейрокомпьютерный интерфейс
иван василевич Eye tracking и нейрокомпьютерный интерфейсrit2010
 
Andrey Petrov P D P
Andrey Petrov P D PAndrey Petrov P D P
Andrey Petrov P D Prit2010
 
Andrey Petrov методология P D P, часть 1, цели вместо кейсов
Andrey Petrov методология P D P, часть 1, цели вместо кейсовAndrey Petrov методология P D P, часть 1, цели вместо кейсов
Andrey Petrov методология P D P, часть 1, цели вместо кейсовrit2010
 
Dmitry lohansky rit2010
Dmitry lohansky rit2010Dmitry lohansky rit2010
Dmitry lohansky rit2010rit2010
 
Dmitry Lohansky Rit2010
Dmitry Lohansky Rit2010Dmitry Lohansky Rit2010
Dmitry Lohansky Rit2010rit2010
 
Related Queries Braslavski Yandex
Related Queries Braslavski YandexRelated Queries Braslavski Yandex
Related Queries Braslavski Yandexrit2010
 
молчанов сергей датацентры 10 04 2010 Light
молчанов сергей датацентры 10 04 2010  Lightмолчанов сергей датацентры 10 04 2010  Light
молчанов сергей датацентры 10 04 2010 Lightrit2010
 
Sergey Ilinsky Rit 2010 Complex Gui Development Ample Sdk
Sergey Ilinsky Rit 2010 Complex Gui Development Ample SdkSergey Ilinsky Rit 2010 Complex Gui Development Ample Sdk
Sergey Ilinsky Rit 2010 Complex Gui Development Ample Sdkrit2010
 
Serge P Nekoval Grails
Serge P  Nekoval GrailsSerge P  Nekoval Grails
Serge P Nekoval Grailsrit2010
 

Más de rit2010 (20)

Sphinx new
Sphinx newSphinx new
Sphinx new
 
Microsoft cluster systems ritconf
Microsoft cluster systems ritconfMicrosoft cluster systems ritconf
Microsoft cluster systems ritconf
 
анатомия интернет банка Publish
анатомия интернет банка Publishанатомия интернет банка Publish
анатомия интернет банка Publish
 
анатомия интернет банка Publish
анатомия интернет банка Publishанатомия интернет банка Publish
анатомия интернет банка Publish
 
Anatol filin pragmatic documentation 1_r
Anatol filin  pragmatic documentation 1_rAnatol filin  pragmatic documentation 1_r
Anatol filin pragmatic documentation 1_r
 
Ilia kantor паттерны серверных comet решений
Ilia kantor паттерны серверных comet решенийIlia kantor паттерны серверных comet решений
Ilia kantor паттерны серверных comet решений
 
Alexei shilov 2010 rit-rakudo
Alexei shilov 2010 rit-rakudoAlexei shilov 2010 rit-rakudo
Alexei shilov 2010 rit-rakudo
 
Alexandre.iline rit 2010 java_fxui_extra
Alexandre.iline rit 2010 java_fxui_extraAlexandre.iline rit 2010 java_fxui_extra
Alexandre.iline rit 2010 java_fxui_extra
 
Konstantin kolomeetz послание внутреннему заказчику
Konstantin kolomeetz послание внутреннему заказчикуKonstantin kolomeetz послание внутреннему заказчику
Konstantin kolomeetz послание внутреннему заказчику
 
Bykov monitoring mailru
Bykov monitoring mailruBykov monitoring mailru
Bykov monitoring mailru
 
Alexander shigin slides
Alexander shigin slidesAlexander shigin slides
Alexander shigin slides
 
иван василевич Eye tracking и нейрокомпьютерный интерфейс
иван василевич Eye tracking и нейрокомпьютерный интерфейсиван василевич Eye tracking и нейрокомпьютерный интерфейс
иван василевич Eye tracking и нейрокомпьютерный интерфейс
 
Andrey Petrov P D P
Andrey Petrov P D PAndrey Petrov P D P
Andrey Petrov P D P
 
Andrey Petrov методология P D P, часть 1, цели вместо кейсов
Andrey Petrov методология P D P, часть 1, цели вместо кейсовAndrey Petrov методология P D P, часть 1, цели вместо кейсов
Andrey Petrov методология P D P, часть 1, цели вместо кейсов
 
Dmitry lohansky rit2010
Dmitry lohansky rit2010Dmitry lohansky rit2010
Dmitry lohansky rit2010
 
Dmitry Lohansky Rit2010
Dmitry Lohansky Rit2010Dmitry Lohansky Rit2010
Dmitry Lohansky Rit2010
 
Related Queries Braslavski Yandex
Related Queries Braslavski YandexRelated Queries Braslavski Yandex
Related Queries Braslavski Yandex
 
молчанов сергей датацентры 10 04 2010 Light
молчанов сергей датацентры 10 04 2010  Lightмолчанов сергей датацентры 10 04 2010  Light
молчанов сергей датацентры 10 04 2010 Light
 
Sergey Ilinsky Rit 2010 Complex Gui Development Ample Sdk
Sergey Ilinsky Rit 2010 Complex Gui Development Ample SdkSergey Ilinsky Rit 2010 Complex Gui Development Ample Sdk
Sergey Ilinsky Rit 2010 Complex Gui Development Ample Sdk
 
Serge P Nekoval Grails
Serge P  Nekoval GrailsSerge P  Nekoval Grails
Serge P Nekoval Grails
 

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

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