3. Partitioning Defined
Partitioning (noun)
1. the action or state of dividing or being
divided into parts
2. a structure dividing a space into two parts
Source: http://oxforddictionaries.com/definition/english/partition
4. Types of Partitioning
• Horizontal
• Partition Table by Rows
• Vertical
• Partition Table by Columns
• File Group
• Partition Tables by File Group
5. Horizontal Partitioning
Divides the rows into small sets by
boundaries
Year PK Order ID Product ID Qty Cost Line XML
2010 1 1 1 5 1.5 <Line…
2010 2 1 1 7 2 <Line…
2011 1000000 20000 345 1000 5 <Line…
2011 1000001 20000 347 3000 12 <Line…
2012 2000000 40000 705 8000 3 <Line…
2012 2000001 40001 706 3000 7 <Line…
6. Vertical Partitioning
Divides columns from one table into multiple
tables
Year PK Order ID … Year PK Line XML
2010 1 1 … 2010 1 <Line…
2010 2 1 … 2010 2 <Line…
2011 1000000 345 … 2011 1000000 <Line…
2011 1000001 347 … 2011 1000001 <Line…
2012 2000000 705 … 2012 2000000 <Line…
2012 2000001 706 … 2012 2000001 <Line…
7. File Group Partitioning
File group partitioning is separating the storage of tables
and indexes onto separate database files
During a Primary File Group restore the whole database
will be offline
Separate the system & user tables to allow the quickest
restore time
Since the partitioned database is made up of smaller
parts it is easier to manage the storage location of the
files
8. Using Table Partitioning
Supports Horizontal Partitioning
Partition Function defines boundaries based
on a single column
Partition Scheme defines the File Group
Inserts automatically supported
All partitions share the same definition as the
table (indexes, columns, fill factor etc)
9. Table Level Limitations
Only ~200 steps for each statistics across the
whole table
Online Index rebuilds are for the whole table
not individual partitions
Fill Factor
Lock settings (Row, Page, Escalation, etc)
Indexes are defined for the whole table rather
than partitions
10. Using View Partitioning
View Partitioning allows you to overcome
Table Level Constraints
Check Constraints used to define partitions
Combine all tables with a UNION ALL View
Can be used together with Table Partitioning
Trigger required to allow INSERT with Identity
column
Allows more complex partitioning schemes
11. Candidates for Partitioning
Large vs. Small Tables
Replicated vs. Non-Replicated Tables
Normal vs. BLOB columns
Write Heavy Current data vs. Heavily
Read Historic data
Read Write vs. Read Only Tables
12. Partial Database Availability
Also referred to as Piecemeal Restore
Full Recovery Model is Required
Individual File & File Groups Restore
Only the Primary File Group is required to
restore a database
Allows restoring a subset of a correctly
partitioned database for quicker recovery
from a disaster
13. Tipping Point Why is it Table Scanning
As the number of rows in a table increase the
depth of the B+Tree increases
The number of Page Reads for a lookup is
equal to the depth of the B+Tree
The Tipping Point is the point where a Full
Table Scan requires less Page Reads than
the lookups
14. What Does Partition Give Us
Choices
Using different Tiers of Storage
Allows quicker recovery strategies
Allows partial restores of the database
Performance
Allows reduction of overhead of backups
Allows better query plans due to more
accurate statistics on large tables
15. Demos
Moving Tables to File Groups
Partial Restore + Using Partial Restore to
Initialise Replication
Moving Partition Between Tables For Current
vs. Historic
Show how View Partitioning can present a
single view of all tables & still support
partition elimination
Notas del editor
Today I will be talking about partitioning which tends to be thought about after the lack of it has caused a problem.
SQL Server MCM one of roughly 100 in the worldBI Architect/Consultant with 15 years experience of designing large scale and complex database systems
A slightly different definition of partitioning than the marketing releases from MS
Moving out BLOB columns removes SQL 2008 restrictions on Online Index RebuildsInfrequently access columns add overhead to queries which don’t require them, another good reason to avoid SELECT *
It’s best not to separate Tables and their indexes as both will have to restored to use the tables
Fill Factors waste space in the buffer pool and are only required for the active part of a tableRow Locks might be wasteful on the static historic data but required for active data
Grouping the smaller tables away from the large allows a quicker recovery from data lossInitialise Replication from a backupOnline Index Rebuilds in SQL Server 2008 don’t allow LOBsRead-Only file group is the only guaranteed way to make a table read-only, Column Stores will be Read/Write at some point
A single file from a file group can be restored while the database is online as long as it’s not from the Primary File GroupThe transaction log from the earliest file LSN to the current LSN will need to be restored to return the database into a consistent state
Mention Kimberly Trip’s blog on the Tipping Point
Today we will be covering the choices which should be considered when designing a new database and when deal with an existing database which has got new requirements like a higher uptime or scaling to larger volumes of data