55
Параллельная загрузка данных с использованием секционирования Иван Косяков Архитектор (SQL-BI), MTC Moscow Лидер Russian Business Intelligence User Group (PASS Chapter)

Параллельная загрузка данных с использованием секционирования

  • Upload
    nova

  • View
    85

  • Download
    2

Embed Size (px)

DESCRIPTION

Параллельная загрузка данных с использованием секционирования. Иван Косяков Архитектор (SQL-BI), MTC Moscow Лидер Russian Business Intelligence User Group (PASS Chapter). Благодарности. Microsoft Services – за демонстрационный стенд Hewlett Packard – за оборудование для стенда - PowerPoint PPT Presentation

Citation preview

Page 1: Параллельная загрузка данных с использованием секционирования

Параллельная загрузка данных с использованием секционирования

Иван Косяков Архитектор (SQL-BI), MTC MoscowЛидер Russian Business Intelligence User Group (PASS Chapter)

Page 2: Параллельная загрузка данных с использованием секционирования

Благодарности Microsoft Services –

за демонстрационный стенд Hewlett Packard –

за оборудование для стенда Kevin Cox –

за слайды с анимацией MTC Moscow –

за предоставленную инфраструктуру

Page 3: Параллельная загрузка данных с использованием секционирования

Содержание Введение Секционирование Управление секциями Параллельная загрузка (SSIS) Блокировки при секционировании Распараллеливание запросов к секционированным

таблицам (движок) FastTrack DW Заключение

Page 4: Параллельная загрузка данных с использованием секционирования

Введение

Page 5: Параллельная загрузка данных с использованием секционирования

Производительность SQL Server 2008

Real-world, predictable performance

Scale up with today’s hardware

Scale out for the enterprise

TPC benchmarksWorkload

prioritization

Tuning and optimization

tools

Enterprise health

monitoring

Improved BI performance Multi-

instance architecture

6464-bit

technologies

NUMANUMA

Support

+Hot-add hardware

Scalable shared databases

Distributed partitioned views

Peer-to-peer replication

Query notifications

Service Broker

Data dependent

routing

Scalable shared

databases for Analysis Services

Page 6: Параллельная загрузка данных с использованием секционирования

Производительность реляционной базы

Измеряемая производительность на реальных задачах• TPC-E

• TPC-H• SAP-SD

Инструменты оптимизации• SQL Server

Profiler• Database

Engine Tuning Advisor

Движок обработк

и запросов

• Cost-based optimization

• Read-ahead scans

• Partitioning

Page 7: Параллельная загрузка данных с использованием секционирования

Секцианирование

Page 8: Параллельная загрузка данных с использованием секционирования

Секционирование и параллельная загрузка

Быстрое и эффективное управление и доступ к наборам данных

Упрощение и ускорения настройки файловых групп

Ускорение загрузки и управления данными

Использование всех процессоров для ускорения операций

Page 9: Параллельная загрузка данных с использованием секционирования

Секционированные таблицы и индексы

Разбиты на объекты хранения по значению колонки (диапазоны значений)

Для запросов считаются одним объектом Обрабатываются движком хранения как

различные объекты (B-Trees) До1000 секций на объект

Page 10: Параллельная загрузка данных с использованием секционирования

Преимущества секционированных таблиц Управляемость

Быстрое удаление и загрузка данных Управление индексами на уровне секций Уменьшение фрагментации индексов (для секций по

дате) Резервирование и восстановление исторических

данных по частям Альтернативное хранение для исторических данных

Быстрые запросы к большим таблицам Эффективные операции «Join» Меньше дерево индекса и сканирование таблицы

при запросе к секции

Page 11: Параллельная загрузка данных с использованием секционирования

Главные термины секционирования

Объекты: Функция секционирования Схема секционирования

Операции: SPLIT (разделение секций) MERGE (объединение секций) SWITCH (переключение секций)

Page 12: Параллельная загрузка данных с использованием секционирования

Функция секционированияPartitioning function Привязывает области данных к целочисленным значениям Определяется заданием граничных точек

(boundary points) N граничных точек определяют N+1 секций

Номер секции 1 2 3 4 5

1 2 3 4Граничная точка

CREATE PARTITION FUNCTION myRangePF1 (int) AS RANGE LEFT FOR VALUES (1, 100, 1000);

Page 13: Параллельная загрузка данных с использованием секционирования

Схема секционированияPartitioning scheme Связывает место хранения – группу файлов

(filegroup) с каждой секцией (partition) через функцию секционирования (partitioning function)

Не требуется использовать различных группы файлов для различных секций

Лучшая практика: Распределите все группы файлов в схеме секционирования

между всеми дисковыми шпинделями

CREATE PARTITION SCHEME myRangePS1 AS PARTITION myRangePF1 TO (test1fg, test2fg, test3fg, test4fg);

Page 14: Параллельная загрузка данных с использованием секционирования

Секционированные таблицы и индексы Ключ секционирования (Partitioning Key) – отдельная колонка Создаются на базе схем секционирования (Partition Schemes)

вместо групп файлов (Filegroups) Секции прозрачны для запросов Различные таблицы и индексы могут использовать одни и те

же функции и схемы секционирования

Table orIndex

PartitionScheme

PartitionFunction

1 many many

Page 15: Параллельная загрузка данных с использованием секционирования

Создание секционированной таблицы и индекса

16

CREATE TABLE Order_History (Order_ID bigint,Order_Date datetime,Customer_ID bigint…

) ON Annual_Scheme_1(Order_Date)

CREATE INDEX Order_Cust_IdxON Order_History(Order_ID)

ON Annual_Scheme_1(Order_Date)

Page 16: Параллельная загрузка данных с использованием секционирования

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)

Page 17: Параллельная загрузка данных с использованием секционирования

Объекты секционирования

Группа файлов

Секция

Секционированный индекс

Схема секционирования

Секционированная таблица

Состоит из

Строится для

ОпределяетСтроится над

Функция секционирования

Определяет

Page 18: Параллельная загрузка данных с использованием секционирования

Параллельная загрузка (SSIS)

Page 19: Параллельная загрузка данных с использованием секционирования

Проектирование параллельной загрузки Разделение данных на куски одинакового

размера Секционированный источник или отдельные файлы Секционирование приемника –

команда SWITCH

Исключение конфликтов Независимые объекты (локировки) Минимум общих ресурсов (ввод-вывод, процессоры,

память)

Эффективный план запуска Диаграмма Ганта

Page 20: Параллельная загрузка данных с использованием секционирования

SSIS – настройки параллелизма• Свойство пакета: MaxConcurrentExecutables

− По умолчанию: -1

• Свойство Data Flow Task: EngineThreads − По умолчанию: 5

Источник: ttp://blogs.msdn.com/sqlperf/archive/2007/05/11/implement-parallel-execution-in-ssis.aspx

Page 21: Параллельная загрузка данных с использованием секционирования

Демонстрация.Параллельная загрузка

Иван Косяков Архитектор (SQL-BI), MTC MoscowЛидер Russian Business Intelligence UG (PASS Chapter)

Демонстрационный сценарий подготовлен специалистами

Page 22: Параллельная загрузка данных с использованием секционирования

Управление секциями

Page 23: Параллельная загрузка данных с использованием секционирования

Управление секциями SPLIT MERGE

ALTER PARTITION FUNCTION partition_function_name() { SPLIT RANGE ( boundary_value ) | MERGE RANGE ( boundary_value ) } [ ; ]

SWITCHALTER TABLE PartitionTable

SWITCH PARTITION 2 TO NonPartitionTable ;

Page 24: Параллельная загрузка данных с использованием секционирования

Switch – Table to Partition

Alter Table BSWITCH TO APARTITION 2

Partition# 2006 Data 2007 Data 2008 Data 2009 &

Later2005 Data

1 2 3 4 52004 & Earlier

6

Table B:

Filegroup DATA_2005

[EMPTY]

CHECK CONSTRAINT:B.Date_Key >= ‘20050101’ andB.Date_Key < ‘20060101’

Table A:

Page 25: Параллельная загрузка данных с использованием секционирования

Loading Most Recent Data

1. Create staging table in same filegroup as target partition (2005)

2. Split most recent partition,adding boundary pointfor following period

3. Bulk load and index staging table4. Switch data into next-to-last partition

Partition #1 2 3 4 5

2004 & Earlier

2005 Data 2006 Data 2007 Data 2008 & Later

[EMPTY] [EMPTY] [EMPTY]

2008 Data 2009 & Later

6

2008 Staging Table

Page 26: Параллельная загрузка данных с использованием секционирования

Unloading Oldest Data

1. Create Unload Table in same filegroup as partition to remove (2005)

2. Switch data out of second partition3. Merge first partition, removing the boundary point

for the unload period4. Archive or Truncate the unload table

Partition #2006 Data 2007 Data

[EMPTY]

2008 Data 2009 & Later

2005 Unload Table

[EMPTY]

1 2 3 4 52005 & Earlier2005 Data2004 &

Earlier

[EMPTY]

Page 27: Параллельная загрузка данных с использованием секционирования

Dropping and merging in the middle (left range case) – not optimal

1. Create Unload Table in same filegroup as partition to remove (2006)

2. Switch data out of third partition3. Merge second and third partition, removing the

boundary point for the unload period4. Data will move from 2005 range to origin 2006 range

long run time, high Tlog consumption

2006 Data 2007 Data

[EMPTY]

2008 Data 2009 & Later

2006 Unload Table

2005 Data2004 & Earlier

[EMPTY]

2005 & 2006 Data Range

Page 28: Параллельная загрузка данных с использованием секционирования

Dropping and merging in the middle – better way

1. Create Unload Tables in same filegroup as partitions to remove 2005 and 2006 partitions

2. Switch data out of second and third partition3. Merge second and third partition, removing the

boundary point for the unload period4. Move 2005 data back into partitioned table again

29

2006 Data 2007 Data

[EMPTY]

2008 Data 2009 & Later

2006 Unload Table

2005 Data2004 & Earlier

[EMPTY]

2005 & 2006 Data Range

2005 Unload Table

Page 29: Параллельная загрузка данных с использованием секционирования

Демонстрация.Управление секциями

Иван Косяков Архитектор (SQL-BI), MTC MoscowЛидер Russian Business Intelligence UG (PASS Chapter)

Демонстрационный сценарий подготовлен специалистами

Page 30: Параллельная загрузка данных с использованием секционирования

Блокировки при секционировании

Page 31: Параллельная загрузка данных с использованием секционирования

Конкурентные запросы

Transaction isolation

•Read uncommitted•Read committed•Repeatable read•Serializable•Read committed (with row versioning)•Snapshot

Lock escalation granularity

•Row•Page•Partition•Table

Page 32: Параллельная загрузка данных с использованием секционирования

Совместимость блокировок

Запрошенный режим IS S U IX SIX X

Общая блокировка намерения (IS) Да Да Да Да Да Нет

Общая блокировка (S) Да Да Да Нет Нет Нет

Блокировка обновления (U) Да Да Нет Нет Нет Нет

Монопольная блокировка намерения (IX) Да Нет Нет Да Нет Нет

Общая блокировка с монопольным намерением (SIX) Да Нет Нет Нет Нет Нет

Монопольная (X) Нет Нет Нет Нет Нет Нет

Page 33: Параллельная загрузка данных с использованием секционирования

Анализ блокировок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.

Page 34: Параллельная загрузка данных с использованием секционирования

Демонстрация.Блокировка секций

Иван Косяков Архитектор (SQL-BI), MTC MoscowЛидер Russian Business Intelligence UG (PASS Chapter)

Демонстрационный сценарий подготовлен специалистами

Page 35: Параллельная загрузка данных с использованием секционирования

Распараллеливание запросов к секционированным таблицам

Page 36: Параллельная загрузка данных с использованием секционирования

Распараллеливание запросов Уровень параллелизма для экземпляра SQL Server –

‘max degree of parallelism’ Минимальная граница для возможности

параллелизма – ‘cost threshold for parallelism’

Можно установить для Обычных запросов Команд управления индексами

Уровень параллелизма (во время запуска): Имеющаяся память Имеющиеся процессорные ресурсы

Page 37: Параллельная загрузка данных с использованием секционирования

Parallelism against Partitioned Tables – Default SQL Server 2005

• Scan against single partition (e.g. select * from my_partitioned_table where Year = ‘2005’ Parallelism for scan possible

1 2 3 4 52004 & Earlier

2005 Data 2006 Data 2007 Data

[EMPTY] [EMPTY]

2008 Data 2009 & Later

6

Page 38: Параллельная загрузка данных с использованием секционирования

Parallelism against Partitioned Tables – Default SQL Server 2005

• 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

1 2 3 4 52004 & Earlier

2005 Data 2006 Data 2007 Data

[EMPTY] [EMPTY]

2008 Data 2009 & Later

6

Page 39: Параллельная загрузка данных с использованием секционирования

Parallelism against Partitioned Tables – SQL Server 2008

• 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

1 2 3 4 52004 & Earlier

2005 Data 2006 Data 2007 Data

[EMPTY] [EMPTY]

2008 Data 2009 & Later

6

n/k threadsn/k threads

Page 40: Параллельная загрузка данных с использованием секционирования

Parallelism against Partitioned Tables –SQL Server 2008 option using trace flag 2440

• 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

1 2 3 4 52004 & Earlier

2005 Data 2006 Data 2007 Data

[EMPTY] [EMPTY]

2008 Data 2009 & Later

6

k threads

Page 41: Параллельная загрузка данных с использованием секционирования

FastTrack DW

Page 42: Параллельная загрузка данных с использованием секционирования

Что такое SQL Server Fast TrackData Warehouse (FTDW)? Предложение помощи клиентам и партнерам

ускорить внедрение хранилищ данных (ХД)

12 симметричных мультипроцессорных (SMP) рекомендованных (reference) архитектур (RA)

Page 43: Параллельная загрузка данных с использованием секционирования

Фокус SQL Server FTDWИсточники

Промежуточнаяобласть

ХД,Витрины данных

Аналитические кубы

ERP

CRM

HRMS

Фокус рекомендованных архитектур

Портал

Page 44: Параллельная загрузка данных с использованием секционирования

Возможные проблемы архитектурОптимизированы под транзакцииНе сбалансированыНет гарантии положительного результата масштабирования

Page 45: Параллельная загрузка данных с использованием секционирования

Шаблоны нагрузки для сценариев ХД Интенсивное сканирование

Чтение с диска большого количества строк Не волатильные данные

После записи данных они редко меняются Мало индексов

Минимальное использование вторичных индексов Использование разделов

Упрощает управление жизненным циклом данных и способствует уменьшению фрагментации

Page 46: Параллельная загрузка данных с использованием секционирования

Зачем нужны рекомендованные архитектуры?Сбалансированы между всеми компонентамиПодробно описаныОснованы на последовательном вводе/выводе и нагрузке, характерной для ХДНиже стоимость владения (TCO)Масштабируемость и производительность

Page 47: Параллельная загрузка данных с использованием секционирования

Состав FTDW Метод разработки оптимальных по цене, сбалансированных

систем для задач ХД Рекомендованные конфигурации аппаратного обеспечения,

разработанные совместно с партнерами Лучшие практики организации данных, загрузки и управления

Только для реляционных баз.

Не предназначены для − Analysis Services− Integration Services− Reporting Services

Page 48: Параллельная загрузка данных с использованием секционирования

Область действия RA

Пут

ь да

нны

х

Кубы Analysis Services

PerformancePoint

Выделенный SAN, Массив хранения

Reporting Services

Инструменты веб-анализа

Пакеты загрузки Integration Services

SharePoint Services

Microsoft Office SharePoint

Хранилище данных,Промежуточная область,Пакетная загрузка

Поддерживающие системы

Системы хранения аналитических данных

Системы презентационного уровня

Область действия рекомендованных архитектур (пунктиром)

Excel Services

Дан

ные

для

отоб

раже

ния

Page 49: Параллельная загрузка данных с использованием секционирования

Пример оценки пропускной способности

Page 50: Параллельная загрузка данных с использованием секционирования

Fast Track SMP RA for SQL Server 2008 CPU Core Calculator v2.4Updated 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 3 000users

Adjust for workload mix

Estimated % of workload

Estimated % data found in

SQL Server cache

Estimated Query Data

Scan Volume MB (Uncompressed)

Desired Query Response Time

(seconds)(under load)

Estimated Disk Scan volume MB (Uncompressed)

Estimated percent of actual query concurrency 1%concurrency Simple 70% 10% 8 000 25 7 200Fast Track DW CPU max core consumption rate (MCR) in

MB/s of page compressed data per core 200MB/s Average 20% 0% 75 000 180 75 000Estimated compression ratio (default = 2.5:1) 2,5:1 Complex 10% 0% 450 000 1 200 450 000

Estimated drive serial throughput speed in compressed MB/s 100MB/s 100%

Number of data drives in single storage array 8drivesUsable capacity per drive 272GB

Space Reserved for TempDB 26%

Calculations and Results % of core

consumption rate achieved

Expected per CPU core consumption

rate (MB/s)

Calculated Single Query Scan Volume

in MB (compressed)

Calculated Target Concurrent

Queries

Estimated Target Queries per

Hour

Required IO Throughput in

MB/s

Estimated Number of Cores

Required

Estimated Single Query Run Time

(seconds)Simple 100% 200 2 880 21 3 024 2 419 12,10 0,5

Average 50% 100 30 000 6 120 1 000 10,00 9,4Complex 25% 50 180 000 3 9 450 9,00 112,5

30 3 153 3 869 32,00

Arrays Required based on

throughput requirements

Single Array Throughput in

MB/s

Throughput in MB/s for All

Required Arrays5 800 4 000

Suggested Fast Track RA Server Requirements

No of CPU cores Number of arrays Total Compressed Data Capacity (TB)

Max achievable IO Throughput in

MB/s

Max achievable CPU

consumption in MB/s

Required IO Throughput in

MB/s32 8 16 6 400 6 400 3 869

Определение требований к процессорному ядру для заданной нагрузки

Page 51: Параллельная загрузка данных с использованием секционирования

Дополнительная информация

Main Fast Track Websitehttp://www.microsoft.com/sqlserver/2008/en/us/fasttrack.aspx

Intro to Fast Trackhttp://msdn.microsoft.com/en-us/library/dd459146.aspx

Fast Track Data Warehouse 2.0 Architecturehttp://msdn.microsoft.com/en-us/library/dd459178.aspx

Hardware vendor’s datasheets HP IBM Dell

Page 52: Параллельная загрузка данных с использованием секционирования

Заключение

Page 53: Параллельная загрузка данных с использованием секционирования

Масштабируемость и производительность 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)

Page 54: Параллельная загрузка данных с использованием секционирования

Ссылки−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

Page 55: Параллельная загрузка данных с использованием секционирования

Спасибо за внимание!

Иван Косяков Архитектор (SQL-BI), MTC MoscowЛидер Russian Business Intelligence User Group (PASS Chapter)[email protected]