Параллельная загрузка данных с использованием секционирования Иван Косяков Архитектор (SQL-BI), MTC Moscow Лидер Russian Business Intelligence User Group (PASS Chapter) Благодарности Microsoft Services – за демонстрационный стенд Hewlett Packard – за оборудование для стенда Kevin Cox – за слайды с анимацией MTC Moscow – за предоставленную инфраструктуру Содержание Введение Секционирование Управление секциями Параллельная загрузка (SSIS) Блокировки при секционировании Распараллеливание запросов к секционированным таблицам (движок) FastTrack DW Заключение Введение Производительность SQL Server 2008 TPC benchmarks Scalable shared databases for Analysis Services Workload prioritization Tuning and optimization tools Real-world, predictable performance Improved BI performance Data dependent routing Multiinstance architecture Enterprise health monitoring Hot-add hardware 64-bit technologies NUMA Distributed partitioned views Scale out for the enterprise Peer-to-peer replication Service Broker Scale up with today’s hardware NUMA Support Scalable shared databases Query notifications Производительность реляционной базы Движок обработки запросов • Cost-based optimization • Read-ahead scans • Partitioning Инструменты оптимизации • SQL Server Profiler • Database Engine Tuning Advisor Измеряемая производительность на реальных задачах • TPC-E • TPC-H • SAP-SD Секцианирование Секционирование и параллельная загрузка Быстрое и эффективное управление и доступ к наборам данных Упрощение и ускорения настройки файловых групп Ускорение загрузки и управления данными Использование всех процессоров для ускорения операций Секционированные таблицы и индексы Разбиты на объекты хранения по значению колонки (диапазоны значений) Для запросов считаются одним объектом Обрабатываются движком хранения как различные объекты (B-Trees) До1000 секций на объект Преимущества секционированных таблиц Управляемость Быстрое удаление и загрузка данных Управление индексами на уровне секций Уменьшение фрагментации индексов (для секций по дате) Резервирование и восстановление исторических данных по частям Альтернативное хранение для исторических данных Быстрые запросы к большим таблицам Эффективные операции «Join» Меньше дерево индекса и сканирование таблицы при запросе к секции Главные термины секционирования Объекты: Функция секционирования Схема секционирования Операции: SPLIT (разделение секций) MERGE (объединение секций) SWITCH (переключение секций) Функция секционирования Partitioning function Привязывает области данных к целочисленным значениям Определяется заданием граничных точек (boundary points) N граничных точек определяют N+1 секций CREATE PARTITION FUNCTION myRangePF1 (int) AS RANGE LEFT FOR VALUES (1, 100, 1000); Граничная точка 1 Номер секции 1 2 2 3 3 4 4 5 Схема секционирования Partitioning scheme Связывает место хранения – группу файлов (filegroup) с каждой секцией (partition) через функцию секционирования (partitioning function) Не требуется использовать различных группы файлов для различных секций CREATE PARTITION SCHEME myRangePS1 AS PARTITION myRangePF1 TO (test1fg, test2fg, test3fg, test4fg); Лучшая практика: Распределите все группы файлов в схеме секционирования между всеми дисковыми шпинделями Секционированные таблицы и индексы Ключ секционирования (Partitioning Key) – отдельная колонка Создаются на базе схем секционирования (Partition Schemes) вместо групп файлов (Filegroups) Секции прозрачны для запросов Различные таблицы и индексы могут использовать одни и те же функции и схемы секционирования Partition Function 1 Partition Scheme Table or Index many many Создание секционированной таблицы и индекса CREATE TABLE Order_History ( Order_ID bigint, Order_Date datetime, Customer_ID bigint … ) ON Annual_Scheme_1(Order_Date) CREATE INDEX Order_Cust_Idx ON Order_History(Order_ID) ON Annual_Scheme_1(Order_Date) Aligned Index One-to-one partition correspondence Секции таблиц Секции индексов Note: You cannot SWITCH if indexes are not aligned. Normally best practise to align (this is also the default when creating an index) Объекты секционирования Секционированный индекс Строится для Секционированная таблица Состоит из Функция секционирования Секция Определяет Схема секционирования Строится над Определяет Группа файлов Параллельная загрузка (SSIS) Проектирование параллельной загрузки Разделение данных на куски одинакового размера Секционированный источник или отдельные файлы Секционирование приемника – команда SWITCH Исключение конфликтов Независимые объекты (локировки) Минимум общих ресурсов (ввод-вывод, процессоры, память) Эффективный план запуска Диаграмма Ганта SSIS – настройки параллелизма • Свойство пакета: MaxConcurrentExecutables − По умолчанию: -1 • Свойство Data Flow Task: EngineThreads − По умолчанию: 5 Источник: ttp://blogs.msdn.com/sqlperf/archive/2007/05/11/implement-parallel-execution-in-ssis.aspx Демонстрация. Параллельная загрузка Иван Косяков Архитектор (SQL-BI), MTC Moscow Лидер Russian Business Intelligence UG (PASS Chapter) Демонстрационный сценарий подготовлен специалистами Управление секциями Управление секциями SPLIT MERGE ALTER PARTITION FUNCTION partition_function_name() { SPLIT RANGE ( boundary_value ) | MERGE RANGE ( boundary_value ) } [ ; ] SWITCH ALTER TABLE PartitionTable SWITCH PARTITION 2 TO NonPartitionTable ; Switch – Table to Partition Table A: [EMPTY] Partition 1 # 2004 & 2 2005 Data 3 4 2006 Data 2007 Data 5 2008 Data Earlier Filegroup DATA_2005 Table B: 6 2009 & Later Alter Table B SWITCH TO A PARTITION 2 CHECK CONSTRAINT: B.Date_Key >= ‘20050101’ and B.Date_Key < ‘20060101’ Loading Most Recent Data [EMPTY] [EMPTY] [EMPTY] Partition # 1 2004 & Earlier 2 2005 Data 3 4 5 6 2006 Data 2007 Data 2008 2008 & Data Later 2009 & Later 1. Create staging table in same filegroup as target partition (2005) 2. Split most recent partition, adding boundary point for following period 3. Bulk load and index staging table 4. Switch data into next-to-last partition 2008 Staging Table Unloading Oldest Data [EMPTY] Partition # 2004 & Earlier [EMPTY] 1 2. 3. 2005 Unload Table 2 2005 Data & 2005 Earlier 1. 4. [EMPTY] 2006 Data 3 2007 Data 4 2008 Data 5 2009 & Later Create Unload Table in same filegroup as partition to remove (2005) Switch data out of second partition Merge first partition, removing the boundary point for the unload period Archive or Truncate the unload table Dropping and merging in the middle (left range case) – not optimal [EMPTY] 2004 & Earlier [EMPTY] 2005 & 2006 Data 2005 Data 2006 Data Range 1. 2. 3. 2006 Unload Table 4. 2007 Data 2008 Data 2009 & Later Create Unload Table in same filegroup as partition to remove (2006) Switch data out of third partition Merge second and third partition, removing the boundary point for the unload period Data will move from 2005 range to origin 2006 range long run time, high Tlog consumption Dropping and merging in the middle – better way [EMPTY] 2004 & Earlier [EMPTY] 2005 & 2006 Data 2005 Data 2006 Data Range 1. 2005 Unload Table 2006 Unload Table 2. 3. 4. 2007 Data 2008 Data 2009 & Later Create Unload Tables in same filegroup as partitions to remove 2005 and 2006 partitions Switch data out of second and third partition Merge second and third partition, removing the boundary point for the unload period Move 2005 data back into partitioned table again Демонстрация. Управление секциями Иван Косяков Архитектор (SQL-BI), MTC Moscow Лидер Russian Business Intelligence UG (PASS Chapter) Демонстрационный сценарий подготовлен специалистами Блокировки при секционировании Конкурентные запросы Transaction isolation • • • • • Read uncommitted Read committed Repeatable read Serializable Read committed (with row versioning) • Snapshot Lock escalation granularity • • • • Row Page Partition Table Совместимость блокировок Запрошенный режим IS S U IX SIX X Общая блокировка намерения (IS) Да Да Да Да Да Нет Общая блокировка (S) Да Да Да Нет Нет Нет Блокировка обновления (U) Да Да Нет Нет Нет Нет Монопольная блокировка намерения (IX) Да Нет Нет Да Нет Нет Общая блокировка с монопольным намерением (SIX) Да Нет Нет Нет Нет Нет Монопольная (X) Нет Нет Нет Нет Нет Нет Анализ блокировок sys.dm_tran_locks resource_type Описание Resource_associated_entity_id OBJECT Объект базы данных Object ID HOBT Heap or a B-tree HoBt ID, соответствует полю sys.partitions.hobt_id. Демонстрация. Блокировка секций Иван Косяков Архитектор (SQL-BI), MTC Moscow Лидер Russian Business Intelligence UG (PASS Chapter) Демонстрационный сценарий подготовлен специалистами Распараллеливание запросов к секционированным таблицам Распараллеливание запросов Уровень параллелизма для экземпляра SQL Server – ‘max degree of parallelism’ Минимальная граница для возможности параллелизма – ‘cost threshold for parallelism’ Можно установить для Обычных запросов Команд управления индексами Уровень параллелизма (во время запуска): Имеющаяся память Имеющиеся процессорные ресурсы Parallelism against Partitioned Tables – Default SQL Server 2005 [EMPTY] [EMPTY] 1 2004 & Earlier 2 2005 Data 3 4 5 6 2006 Data 2007 Data 2008 Data 2009 & Later • Scan against single partition (e.g. select * from my_partitioned_table where Year = ‘2005’ Parallelism for scan possible Parallelism against Partitioned Tables – Default SQL Server 2005 [EMPTY] [EMPTY] 1 2004 & Earlier 2 2005 Data 3 4 5 6 2006 Data 2007 Data 2008 Data 2009 & Later • Scan against multiple partitions (e.g. select * from my_partitioned_table where Year between ‘2005’ and ‘2006 Single threaded scan on single partitions – Performance regression Page 39 Parallelism against Partitioned Tables – SQL Server 2008 [EMPTY] [EMPTY] 1 2004 & Earlier • • 3 4 5 6 2005 Data 2006 Data 2007 Data 2008 Data 2009 & Later n/k threads n/k threads 2 Scan against multiple partitions (e.g. select * from my_partitioned_table where Year between ‘2005’ and ‘2006 Multi threaded scan on single partitions again. Algorithm: Assume n partitions to be scanned by k threads available − threads per partition = n/k Parallelism against Partitioned Tables –SQL Server 2008 option using trace flag 2440 [EMPTY] [EMPTY] 1 2004 & Earlier 2 2005 Data 3 4 5 6 2006 Data 2007 Data 2008 Data 2009 & Later k threads • Scan against multiple partitions (e.g. select * from my_partitioned_table where Year between ‘2005’ and ‘2006 • Multi threaded scan on single partitions again. Algorithm: Assume n partitions to be scanned by k threads available − − threads per partition = k Jump from partition to partition scanning them with k-threads FastTrack DW Что такое SQL Server Fast Track Data Warehouse (FTDW)? Фокус SQL Server FTDW Аналитические кубы Источники ERP Промежуточная область ХД, Витрины данных CRM HRMS Фокус рекомендованных архитектур Портал Возможные проблемы архитектур Оптимизированы под транзакции Не сбалансированы Нет гарантии положительного результата масштабирования Шаблоны нагрузки для сценариев ХД Интенсивное сканирование Чтение с диска большого количества строк Не волатильные данные После записи данных они редко меняются Мало индексов Минимальное использование вторичных индексов Использование разделов Упрощает управление жизненным циклом данных и способствует уменьшению фрагментации Зачем нужны рекомендованные архитектуры? Сбалансированы между всеми компонентами Подробно описаны Основаны на последовательном вводе/выводе и нагрузке, характерной для ХД Ниже стоимость владения (TCO) Масштабируемость и производительность Состав FTDW Метод разработки оптимальных по цене, сбалансированных систем для задач ХД Рекомендованные конфигурации аппаратного обеспечения, разработанные совместно с партнерами Лучшие практики организации данных, загрузки и управления Только для реляционных баз. Не предназначены для − Analysis Services − Integration Services − Reporting Services Область действия RA Системы хранения аналитических данных Пакеты загрузки Integration Services Путь данных Кубы Analysis Services Выделенный SAN, Массив хранения Хранилище данных, Промежуточная область, Пакетная загрузка Область действия рекомендованных архитектур (пунктиром) Системы презентационного уровня Данные для отображения Поддерживающие системы Инструменты веб-анализа Reporting Services SharePoint Services Microsoft Office SharePoint PerformancePoint Excel Services Пример оценки пропускной способности Определение требований к процессорному ядру для заданной нагрузки Fast Track SMP RA for SQL Server 2008 CPU Core Calculator v2.4 Updated 12/09/2009 - uw This spreadsheet can be used to estimate the number of cores required to support a user workload and workload mix. Enter your factors into the green fields and the results will be calculated in the pink cells. The spreadsheet uses a weighted average to determine the number of cores required based on your inputs. User Variable Input Anticipated total number of users expected on the system Estimated percent of actual query concurrency Fast Track DW CPU max core consumption rate (MCR) in MB/s of page compressed data per core Estimated compression ratio (default = 2.5:1) Estimated drive serial throughput speed in compressed MB/s Number of data drives in single storage array Usable capacity per drive Space Reserved for TempDB Adjust for workload Estimated % of mix workload 3 000users 1%concurrency Estimated Query Estimated % Data data found in Scan Volume MB SQL Server cache (Uncompressed) 25 Estimated Disk Scan volume MB (Uncompressed) Simple 70% 10% 200MB/s Average 20% 0% 75 000 180 75 000 2,5:1 Complex 10% 0% 450 000 1 200 450 000 100MB/s 8drives 272GB 26% 8 000 Desired Query Response Time (seconds) (under load) 7 200 100% Calculations and Results Calculated Single % of core Expected per CPU Calculated Target Query Scan Volume Estimated Target consumption rate core consumption Concurrent in MB Queries per Hour achieved rate (MB/s) Queries (compressed) Simple 100% 200 2 880 21 3 024 Average 50% 100 30 000 6 120 Complex 25% 50 180 000 3 9 30 3 153 Arrays Required based on throughput requirements 5 Suggested Fast Track RA Server Requirements Single Array Throughput in MB/s 800 Required IO Throughput in MB/s 2 419 1 000 450 3 869 Throughput in MB/s for All Required Arrays 4 000 Max achievable Max achievable Total Compressed CPU No of CPU cores Number of arrays IO Throughput in Data Capacity (TB) consumption in MB/s MB/s 32 8 16 6 400 6 400 Required IO Throughput in MB/s 3 869 Estimated Single Estimated Number Query Run Time of Cores Required (seconds) 12,10 10,00 9,00 32,00 0,5 9,4 112,5 Дополнительная информация Main Fast Track Website http://www.microsoft.com/sqlserver/2008/en/us/fasttrack.aspx Intro to Fast Track http://msdn.microsoft.com/en-us/library/dd459146.aspx Fast Track Data Warehouse 2.0 Architecture http://msdn.microsoft.com/en-us/library/dd459178.aspx Hardware vendor’s datasheets HP IBM Dell Заключение Масштабируемость и производительность Use hardware and software resources more efficiently to reduce costs Flexibility to address the need for more capacity Predictable response times reduce user frustration and support costs Technology Standard Edition Enterprise Edition CPU support 4 8 Multiple-instance support 16 instances More instances Maximum virtualization Data compression Backup compression Table partitioning Partitioned table parallelism Parallel index operations StreamInsight (serial processing) Ссылки − Strategies for partitioning relational data warehouses • http://www.microsoft.com/technet/prodtechnol/sql/2005/sp dw.mspx − Simply database maintenance with table partitions • http://www.microsoft.com/technet/technetmag/issues/2007/ 03/Partitioning/default.aspx − The Data Loading Performance Guide • http://msdn.microsoft.com/en-us/library/dd425070.aspx Спасибо за внимание! Иван Косяков Архитектор (SQL-BI), MTC Moscow Лидер Russian Business Intelligence User Group (PASS Chapter) [email protected]