Partitioned Tables and Query Performance Jay Robinson SQL Saturday #720 ALBUQUERQUE, 2018
The what, how, and why of table partitioning in SQL Server. Summary Concepts And Common Use Cases The what, how, and why of table partitioning in SQL Server. Optimizer Issues And Query Tactics What can happen when you try to query partitioned data, and what you can do about it.
Jay Robinson 24HOP 6.5+ C# DevOps Enterprise ETL ExactTarget IndyPASS Linux .NET PASS Performance PHP Postgresql Salesforce SqlClient SQLSaturday T-SQL VB3 downshiftdata@gmail.com | @downshiftdata | downshiftdata.arksoftware.net
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
DEMO Scenario 2 Using a Persisted Computed Column Don’t rely on the partition function
DEMO Scenario 3 Leading with the Computed Column For discrete values, lead with the partitioned column
DEMO Scenario 4 Introducing Non-Clustered Indexes The optimizer isn’t always right
DEMO Scenario 5 Spanning Multiple Partitions Treat each partition independently
Microsoft Connect Issue #240968
It Lives! https://bit.ly/2w6w26K
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! Your feedback is appreciated... http://ow.ly/q5xt30ejhy7 "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 downshiftdata@gmail.com | @downshiftdata | downshiftdata.arksoftware.net