Partitioned Tables and Query Performance
The Obligatory Bio Page Jay Robinson Senior Systems Engineer, Salesforce Marketing Cloud (formerly ExactTarget) PASS Program Manager Email: downshiftdata@gmail.com Twitter/Slack: @downshiftdata Blog: downshiftdata.arksoftware.net
Come to Indianapolis! Pre-Cons Jonathan Stewart - In-depth Guide to Visualization Ben Miller - Powershell Modules to make SQL Server easy Shannon Lowder - BIML Bootcamp
Concepts Common Use Cases Optimizer Issues and Query Tactics Summary Concepts Common Use Cases Optimizer Issues and Query Tactics
Concepts Partition Function Assuming integer VALUES of 10, 20, 30... CREATE PARTITION FUNCTION {pf_name} ({param1}) AS RANGE LEFT|RIGHT FOR VALUES ({val1}, {val2}, ... {valN}); sys.partition_functions, sys.partition_parameters, and sys.partition_range_values Assuming integer VALUES of 10, 20, 30... RANGE LEFT: <= 10, 11 to 20, 21 to 30, > 30 RANGE RIGHT: < 10, 10 to 19, 20 to 29, >= 30
Concepts Partition Scheme CREATE PARTITION SCHEME {ps_name} AS PARTITION {pf_name} TO ({fg1}, {fg2}, ... {fgN}); sys.data_spaces and sys.partition_schemes Number of filegroups must match number of values + 1
Concepts Partitioned Tables and Indexes CREATE TABLE {t_name} ({column_defs}) ON {ps_name}({col_name}); sys.partitions and sys.dm_db_partition_stats
Concepts Aligned v Non-Aligned Indexes Partition Elimination Whether or not the index’s partitioning matches the table partitioning Partition Elimination The optimizer’s act of limiting query processing to only relevant partitions
Use Cases for Partitioned Tables Data Deprecation ALTER TABLE ... SWITCH followed by TRUNCATE TABLE SQL Server 2016: WITH PARTITIONS ETL Operations (e.g. OLTP to OLAP) Migration Tasks (e.g. adding compression) Improved Write Performance (striping)
If you know the partition, use the partition function DEMO Scenario 1 Partitioning By Date If you know the partition, use the partition function
Don’t rely on the partition function DEMO Scenario 2 Using a Persisted Computed Column Don’t rely on the partition function
For discrete values, lead with the partitioned column DEMO Scenario 3 Leading with the Computed Column For discrete values, lead with the partitioned column
Introducing Non-Clustered Indexes DEMO Scenario 4 Introducing Non-Clustered Indexes The optimizer isn’t always right
Spanning Multiple Partitions DEMO Scenario 5 Spanning Multiple Partitions Treat each partition independently
Microsoft Connect Issue #240968
Where do we go from here? MSDN (duh!) Video: @Kendra_Little Columnstore: @NikoNeugebauer http://www.nikoport.com/columnstore/ @KimberlyLTripp, @PaulRandal, @BrentO sqlcommunity.slack.com And, as always, #sqlhelp
Thank You! "When I look fast, I'm not smooth and I am going slowly. And when I look slow, I am smooth and going fast." - Alain Prost Jay Robinson Email: downshiftdata@gmail.com Twitter/Slack: @downshiftdata Blog: downshiftdata.arksoftware.net