# CCNZ
What is going on here???
Steven Wang Senior DBA/Senior BI Specialist at BNZ MCITP/MCTS: BI Developer, Database Developer and Database Administrator Owner of TellYes Data Intelligence Blogs:
Agenda What Is minimal logging and why does it matter? What can be minimally logged? Metadata-Only Operations Things under the hood (Demo) Data Manoeuvring technics on very large tables Real world example Q & A
Small Quiz A.A minimally logged operation will always reduce the transaction log backup size? TrueFalse B.A minimally logged operation will always reduce the transaction log size? TrueFalse C.A minimally logged operation is always faster than fully logged operation ? TrueFalse
Answer A.A minimally logged operation will always reduce the transaction log backup size? TrueFalse B.A minimally logged operation will always reduce the transaction log size? TrueFalse C.A minimally logged operation is always faster than fully logged operation? TrueFalse
What is Minimal Logging and why does it matter? SQL server uses ‘write-ahead logging’. Everything has to be written on to log file first A minimally logged operation is one that does not always log every row; it only logs the extend allocations Transaction log will fill rapidly under full recovery model, it is likely to be grown during a large quantity of data operation “The transaction log is ALWAYS zero initialized when first created, manually grown, or auto- grown.” -- Paul Randal
What can be minimally logged? SELECT INTO …. FROM Table Bulk Import Operation: BCP BULK Insert INSERT INTO … SELECT FROM OPENROWSET(BULK…) Create/Rebuild Index Using the.Write in the Update for new data The Creation of new heap by Dropping Index
Conditions It has to be under Bulk-Logged or Simple Recovery Model Table is not being replicated Tablock hint needs to be used Something talking about later
Conditions (Continue) Heap + Tablock
Conditions (Continue) Clustered + Tablock
Conditions (Continue) Use Trace Flag 610 Can be used to get minimal logging for empty heap and clustered table Can be used to get minimal logging in a non-empty B-Tree Tablock hint is not needed for table without nonclustered index The first page is always fully logged Can be turned on instance-wide or session-wide Fully tested in your environment before use
Metadata-Only Operations Truncate Table Drop Table Partition Switch Partition Merge for 2 empty partitions Partition Split for an empty partition
Things Under the Hood (Demo)
Data Manoeuvring technics on very large tables Bulk Load Partitioned Table Use parallelism, per bulk load per CPU core Create staging tables having exactly same structure as target table in same filegroup with no indexes Bulk load data into staging tables Create indexes and constraints on staging tables. Switch the staging tables into partitioned table partitions
Alter database MyDB Set recovery Bulk_Logged; Go Alter Database MyDB Modify Filegroup FG1 Default; GO Select Col1, Col2, Col3,… Into Stage_1 From Target_Table Where 0=1 Go... Go Alter Database MyDB Modify Filegroup FG4 Default; GO Select Col1, Col2, Col3,… Into Stage_4 From Target_Table Where 0=1 Go
1.Create Indexes; 2.Apply other settings to comply with target; 3.Create constraints;
Alter Table Stage_1 SWITCH TO MyTargetTable Partition 1; Go... Go Alter Table Stage_4 SWITCH TO MyTargetTable Partition 4;
Data Manoeuvring technics on very large tables (Continues) Delete a very large amount of rows in a table, for example, over 50% of the total Don’t Delete! Think of using truncate or drop table instead. How??
Data Manoeuvring technics on very large tables (Continues) Really?? ?? Update a very large amount of rows in a table for majority of columns Don’t Update! Think of using inserting data instead to achieve minimal logging.
Drop MyData Truncate MyData_New Rename MyData_Temp to MyData
I believe that you have already got a fairly good idea how to apply the similar technical to perform the update on partitioned table.
Real World Example A Table has to be partitioned daily The data has to be kept more than 7 years Every first day of the month a partition merge operation will be performed to consolidate one month’s partitions which is 30 month old to one partition How will you do it?
Thank You Blogs: Linkedin: wang/1b/ab/b8b wang/1b/ab/b8b
Premier Partners Sponsor Associated Partners Supporting Partners