{"id":522,"date":"2011-10-18T08:17:00","date_gmt":"2011-10-18T08:17:00","guid":{"rendered":"\/blogs\/joe\/post\/Adjusting-target-recovery-time-by-database-in-SQL-Server-2012.aspx"},"modified":"2013-01-20T10:53:54","modified_gmt":"2013-01-20T18:53:54","slug":"setting-indirect-checkpoints-by-database-in-sql-server-2012","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/joe\/setting-indirect-checkpoints-by-database-in-sql-server-2012\/","title":{"rendered":"Setting indirect checkpoints by database in SQL Server 2012"},"content":{"rendered":"<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 10pt;\"><em><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">This blog post applies to\u00a0SQL Server 2012 CTP3 (11.0.1440).<\/span><\/span><\/em><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 10pt;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">SQL Server 2012 introduces the \u201cindirect checkpoints\u201d feature.<span>\u00a0 <\/span>At a high level, it allows you to adjust the target recovery time of a specific database, rather than relying entirely on the SQL Server instance-level \u2018recovery interval (min)\u2019 setting. <\/span><\/span><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">To demonstrate the impact, I\u2019ll walk through a scenario where we\u2019re performing large batch inserts into a data warehousing\u00a0Fact table.<span>\u00a0 <\/span>In this\u00a0demo I\u2019m using the Codeplex \u201cAdventureWorksDWDenali\u201d database.<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 10pt;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">As a first step, I\u2019ll back up the database so that I can reset the baseline in order to compare the default checkpoint behavior with the new indirect checkpoint setting:<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">USE master<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">GO<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">BACKUP DATABASE [AdventureWorksDWDenali] <\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">TO<span>\u00a0 <\/span>DISK = N&#8217;C:\\Program Files\\Microsoft SQL Server\\MSSQL11.MSSQLSERVER\\MSSQL\\Backup\\IndirectCheckpoint_AWDW.bak&#8217;<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span><span style=\"font-size: 11pt;\">\u00a0<\/span><\/span><span style=\"font-size: 11pt;\">WITH NOFORMAT, NOINIT,<span>\u00a0 <\/span>NAME = N&#8217;AdventureWorksDWDenali-Full Database Backup&#8217;, CHECKSUM<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">GO<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 10pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 10pt;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">Now with that out of the way I\u2019ll check the recovery interval of the SQL Server instance:<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">SELECT value_in_use\u00a0<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">FROM sys.configurations<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">WHERE name = &#8216;recovery interval (min)&#8217;<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">The value in use is \u201c0\u201d \u2013 the default.<span>\u00a0 <\/span>So basically the estimated checkpoint will be every minute for an active database (although I\u2019m over-simplifying things here \u2013 since automatic checkpoint frequency varies based on other factors as well &#8211; but for this demo you&#8217;ll still see a clear difference in the before-and-after).<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">Now I\u2019ll check the indirect checkpoint time for the AdventureWorksDWDenali database:<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">SELECT target_recovery_time_in_seconds<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">FROM sys.databases<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">WHERE name = &#8216;AdventureWorksDWDenali&#8217;<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">This returns \u201c0\u201d \u2013 meaning we haven\u2019t configured this new SQL Server 2012 database option (yet) and so the SQL Server instance level setting is in effect.<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">Now I\u2019ll create an extended events session to track the individual checkpoint events for the database (database_id &#8220;5&#8221; happens to be the AdventureWorksDWDenali database on my instance):<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">CREATE EVENT SESSION [track_checkpoints] ON SERVER <\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">ADD EVENT sqlserver.checkpoint_end(<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span><span style=\"font-size: 11pt;\">\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 11pt;\">ACTION(sqlserver.database_id,sqlserver.database_name,sqlserver.is_system)<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span><span style=\"font-size: 11pt;\">\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 11pt;\">WHERE ([sqlserver].[database_id]=(5))) <\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">ADD TARGET package0.ring_buffer(SET max_memory=(2048))<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">GO<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">(<em>By the way &#8211; I updated max_memory down to 2MB from the 100MB per Jonathan Kehayias&#8217; heads up on potential\u00a0limits\u00a0&#8211; not to mention that this was more memory than needed for this example<\/em>).<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">\u00a0Next I\u2019ll turn it on:<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">ALTER EVENT SESSION [track_checkpoints] ON SERVER STATE=START<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">GO<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">And now I\u2019m going to push some I\/O by creating a new table and populating it multiple times from the FactInternetSales table:<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">USE AdventureWorksDWDenali<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">GO<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">SELECT *<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">INTO dbo.CheckPoint_Test_FactInternetSales<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">FROM dbo.FactInternetSales<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">GO<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">INSERT dbo.CheckPoint_Test_FactInternetSales<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">SELECT ProductKey, OrderDateKey, DueDateKey, ShipDateKey, CustomerKey, PromotionKey, CurrencyKey, SalesTerritoryKey, LEFT(CAST(NEWID() AS NVARCHAR(36)),20), SalesOrderLineNumber, RevisionNumber, OrderQuantity, UnitPrice, ExtendedAmount, UnitPriceDiscountPct, DiscountAmount, ProductStandardCost, TotalProductCost, SalesAmount, <\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">TaxAmt, Freight, CarrierTrackingNumber, CustomerPONumber, OrderDate, DueDate, ShipDate<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">FROM dbo.FactInternetSales<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">GO 10<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">This shows the following rows affected:<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">(60398 row(s) affected)<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">Beginning execution loop<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">(60398 row(s) affected)<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">(60398 row(s) affected)<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">(60398 row(s) affected)<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">(60398 row(s) affected)<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">(60398 row(s) affected)<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">(60398 row(s) affected)<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">(60398 row(s) affected)<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">(60398 row(s) affected)<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">(60398 row(s) affected)<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">(60398 row(s) affected)<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">Batch execution completed 10 times.<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">Now I\u2019ll query the track_checkpoints Extended Event session (** and thanks to my colleague\u00a0Jonathan Kehayias for the following query which I just modified to query against track_checkpoints and then change a few column names **):<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">SELECT <\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span><span style=\"font-size: 11pt;\">\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 11pt;\">n.value(&#8216;(event\/@name)[1]&#8217;, &#8216;varchar(50)&#8217;) AS event_name,<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span><span style=\"font-size: 11pt;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 11pt;\">n.value(&#8216;(event\/@timestamp)[1]&#8217;, &#8216;datetime&#8217;) as event_datetime<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">FROM<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">(<span>\u00a0\u00a0\u00a0 <\/span>SELECT td.query(&#8216;.&#8217;) as n<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span><span style=\"font-size: 11pt;\">\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 11pt;\">FROM <\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span><span style=\"font-size: 11pt;\">\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 11pt;\">(<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span><span style=\"font-size: 11pt;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 11pt;\">SELECT CAST(target_data AS XML) as target_data<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span><span style=\"font-size: 11pt;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 11pt;\">FROM sys.dm_xe_sessions AS s<\/span><span><span style=\"font-size: 11pt;\">\u00a0\u00a0\u00a0 <\/span><\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span><span style=\"font-size: 11pt;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 11pt;\">JOIN sys.dm_xe_session_targets AS t<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span><span style=\"font-size: 11pt;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 11pt;\">ON s.address = t.event_session_address<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span><span style=\"font-size: 11pt;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 11pt;\">WHERE s.name = &#8216;track_checkpoints&#8217;<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span><span style=\"font-size: 11pt;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 11pt;\">AND t.target_name = &#8216;ring_buffer&#8217;<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span><span style=\"font-size: 11pt;\">\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 11pt;\">) AS sub<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span><span style=\"font-size: 11pt;\">\u00a0\u00a0\u00a0 <\/span><\/span><span style=\"font-size: 11pt;\">CROSS APPLY target_data.nodes(&#8216;RingBufferTarget\/event&#8217;) AS q(td)<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">) as tab<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">GO<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">This returns the following checkpoint event data:<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">event_name<span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span>event_datetime<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">checkpoint_end2011-10-18 20:54:46.200<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">checkpoint_end2011-10-18 20:54:46.650<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">checkpoint_end2011-10-18 20:54:47.063<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">checkpoint_end2011-10-18 20:54:47.433<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">checkpoint_end2011-10-18 20:54:47.647<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">checkpoint_end2011-10-18 20:54:48.200<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">checkpoint_end2011-10-18 20:54:48.597<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">checkpoint_end2011-10-18 20:54:49.157<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">checkpoint_end2011-10-18 20:54:49.620<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">checkpoint_end2011-10-18 20:54:50.127<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">So we see 10 checkpoints for the default behavior.<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">And now I\u2019m going to stop the event session and restore the database back to its original state to show you the comparison to the SQL Server 2012 indirect checkpoint option:<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">ALTER EVENT SESSION [track_checkpoints] ON SERVER STATE=STOP<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">&#8212; Restoring the database back to the original format<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">USE master<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">GO<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">RESTORE DATABASE [AdventureWorksDWDenali] <\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">FROM<span>\u00a0 <\/span>DISK = N&#8217;C:\\Program Files\\Microsoft SQL Server\\MSSQL11.MSSQLSERVER\\MSSQL\\Backup\\IndirectCheckpoint_AWDW.bak&#8217; <\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">WITH<span>\u00a0 <\/span>FILE = 1<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">GO<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">Next I\u2019m going to change the database\u2019s TARGET_RECOVERY_TIME to 5 minutes (this is the SQL Server 2012 indirect checkpoints feature I was talking about):<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; text-indent: 0.5in; margin: 0in 0in 0pt;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">ALTER DATABASE AdventureWorksDWDenali <\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; text-indent: 0.5in; margin: 0in 0in 0pt;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">SET TARGET_RECOVERY_TIME = 5 MINUTES<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; text-indent: 0.5in; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">Just to confirm that it \u201ctook\u201d \u2013 I\u2019ll validate sys.databases:<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">SELECT target_recovery_time_in_seconds<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">FROM sys.databases<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">WHERE name = &#8216;AdventureWorksDWDenali&#8217;<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">This returns 300 seconds instead of the 0 seconds we saw before \u2013 300 representing the new target recovery time I just set in minutes.<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">And now I\u2019m going to enable the event session again and re-populate the table:<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">ALTER EVENT SESSION [track_checkpoints] ON SERVER STATE=START<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">GO<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">USE AdventureWorksDWDenali<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">GO<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">SELECT *<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">INTO dbo.CheckPoint_Test_FactInternetSales<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">FROM dbo.FactInternetSales<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">GO<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">INSERT dbo.CheckPoint_Test_FactInternetSales<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">SELECT ProductKey, OrderDateKey, DueDateKey, ShipDateKey, CustomerKey, PromotionKey, CurrencyKey, SalesTerritoryKey, LEFT(CAST(NEWID() AS NVARCHAR(36)),20), SalesOrderLineNumber, RevisionNumber, OrderQuantity, UnitPrice, ExtendedAmount, UnitPriceDiscountPct, DiscountAmount, ProductStandardCost, TotalProductCost, SalesAmount, <\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">TaxAmt, Freight, CarrierTrackingNumber, CustomerPONumber, OrderDate, DueDate, ShipDate<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">FROM dbo.FactInternetSales<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">GO 10<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">How many checkpoints will we see now?<span>\u00a0 With all things equal between tests, we now only see four checkpoints:<\/span><\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">event_name<span>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span>event_datetime<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">checkpoint_end2011-10-18 21:06:52.697<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">checkpoint_end2011-10-18 21:06:53.520<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">checkpoint_end2011-10-18 21:06:54.717<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">checkpoint_end2011-10-18 21:06:56.277<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt 0.5in;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">I tested this before-and-after scenario three times, and each time I saw the identical change in the number of checkpoints.<span>\u00a0 <\/span>So I saw a consistent result given an identical test setup.<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\"><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">That\u2019s all for now \u2013 but two closing thoughts:<\/span><\/span><\/p>\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoNormal\" style=\"line-height: 13pt; margin: 0in 0in 0pt;\">\n<p class=\"MsoListParagraphCxSpFirst\" style=\"line-height: 13pt; text-indent: -0.25in; margin: 0in 0in 0pt 0.5in;\"><span><span><span style=\"font-family: Symbol;\"><span style=\"font-size: 11pt;\">\u00b7<\/span><\/span><span style=\"line-height: normal;\"><span style=\"font-family: Times New Roman;\"><span style=\"font-size: 7pt;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><\/span><\/span><\/span><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">I like how we\u2019re able to adjust this target recovery time <em><span style=\"text-decoration: underline;\">at the database level<\/span><\/em>.<span>\u00a0 <\/span>This allows us to take into account the recovery time requirements per application if we need to\u00a0\u2013 adjusting upward or downward based on different requirements or issues. <\/span><\/span><\/p>\n<p class=\"MsoListParagraphCxSpLast\" style=\"line-height: 13pt; text-indent: -0.25in; margin: 0in 0in 0pt 0.5in;\"><span><span><span style=\"font-family: Symbol;\"><span style=\"font-size: 11pt;\">\u00b7<\/span><\/span><span style=\"line-height: normal;\"><span style=\"font-family: Times New Roman;\"><span style=\"font-size: 7pt;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><\/span><\/span><\/span><\/span><span style=\"font-family: Calibri;\"><span style=\"font-size: 11pt;\">I didn\u2019t measure the actual performance impact against the load, but if I had I imagine we would have seen\u00a0some performance improvement with the second scenario of less frequent checkpoints (but with a trade-off of longer recovery time &#8211; a nontrivial consideration).<\/span><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This blog post applies to\u00a0SQL Server 2012 CTP3 (11.0.1440). SQL Server 2012 introduces the \u201cindirect checkpoints\u201d feature.\u00a0 At a high level, it allows you to adjust the target recovery time of a specific database, rather than relying entirely on the SQL Server instance-level \u2018recovery interval (min)\u2019 setting. To demonstrate the impact, I\u2019ll walk through a [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[28],"tags":[],"class_list":["post-522","post","type-post","status-publish","format-standard","hentry","category-performance"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.9.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>SQL Server Indirect Checkpoints - Joe Sack<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.sqlskills.com\/blogs\/joe\/setting-indirect-checkpoints-by-database-in-sql-server-2012\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SQL Server Indirect Checkpoints - Joe Sack\" \/>\n<meta property=\"og:description\" content=\"This blog post applies to\u00a0SQL Server 2012 CTP3 (11.0.1440). SQL Server 2012 introduces the \u201cindirect checkpoints\u201d feature.\u00a0 At a high level, it allows you to adjust the target recovery time of a specific database, rather than relying entirely on the SQL Server instance-level \u2018recovery interval (min)\u2019 setting. To demonstrate the impact, I\u2019ll walk through a [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/joe\/setting-indirect-checkpoints-by-database-in-sql-server-2012\/\" \/>\n<meta property=\"og:site_name\" content=\"Joe Sack\" \/>\n<meta property=\"article:published_time\" content=\"2011-10-18T08:17:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2013-01-20T18:53:54+00:00\" \/>\n<meta name=\"author\" content=\"Joseph Sack\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joseph Sack\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/setting-indirect-checkpoints-by-database-in-sql-server-2012\/\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/setting-indirect-checkpoints-by-database-in-sql-server-2012\/\",\"name\":\"SQL Server Indirect Checkpoints - Joe Sack\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#website\"},\"datePublished\":\"2011-10-18T08:17:00+00:00\",\"dateModified\":\"2013-01-20T18:53:54+00:00\",\"author\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/533eb0113a15fb5a6e8067a49e4ae648\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/setting-indirect-checkpoints-by-database-in-sql-server-2012\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqlskills.com\/blogs\/joe\/setting-indirect-checkpoints-by-database-in-sql-server-2012\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/setting-indirect-checkpoints-by-database-in-sql-server-2012\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Performance\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/category\/performance\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Setting indirect checkpoints by database in SQL Server 2012\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#website\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/\",\"name\":\"Joe Sack\",\"description\":\"SQL Server Performance Tuning, High Availability and Disaster Recovery Blog\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/533eb0113a15fb5a6e8067a49e4ae648\",\"name\":\"Joseph Sack\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a4b39a7719a6bfff1add3ec00527810734579ee114d6d983e8e68f937b77be96?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a4b39a7719a6bfff1add3ec00527810734579ee114d6d983e8e68f937b77be96?s=96&d=mm&r=g\",\"caption\":\"Joseph Sack\"},\"description\":\"Joe Sack is a Principal Consultant with SQLskills. He has worked as a SQL Server professional since 1997 and has supported and developed for SQL Server environments in financial services, IT consulting, manufacturing, retail and the real estate industry. Prior to joining SQLskills he worked at Microsoft as a Premier Field Engineer supporting very large enterprise customer environments. He was responsible for providing deep SQL Server advisory services, training, troubleshooting and ongoing solutions guidance. His areas of expertise include performance tuning, scalability, T-SQL development and high-availability. In 2006 Joe earned the \u201cMicrosoft Certified Master: SQL Server 2005\u201d certification and in 2008 he earned the \u201cMicrosoft Certified Master: SQL Server 2008\u201d certification. In 2009 he took over responsibility for the entire SQL Server Microsoft Certified Master program and held that post until 2011. He was given the SQL Server MVP award in 2013.\",\"sameAs\":[\"http:\/\/3.209.169.194\/blogs\/joe\",\"https:\/\/twitter.com\/https:\/\/twitter.com\/josephsack\"],\"url\":\"https:\/\/www.sqlskills.com\/blogs\/joe\/author\/joe\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"SQL Server Indirect Checkpoints - Joe Sack","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.sqlskills.com\/blogs\/joe\/setting-indirect-checkpoints-by-database-in-sql-server-2012\/","og_locale":"en_US","og_type":"article","og_title":"SQL Server Indirect Checkpoints - Joe Sack","og_description":"This blog post applies to\u00a0SQL Server 2012 CTP3 (11.0.1440). SQL Server 2012 introduces the \u201cindirect checkpoints\u201d feature.\u00a0 At a high level, it allows you to adjust the target recovery time of a specific database, rather than relying entirely on the SQL Server instance-level \u2018recovery interval (min)\u2019 setting. To demonstrate the impact, I\u2019ll walk through a [&hellip;]","og_url":"https:\/\/www.sqlskills.com\/blogs\/joe\/setting-indirect-checkpoints-by-database-in-sql-server-2012\/","og_site_name":"Joe Sack","article_published_time":"2011-10-18T08:17:00+00:00","article_modified_time":"2013-01-20T18:53:54+00:00","author":"Joseph Sack","twitter_misc":{"Written by":"Joseph Sack","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/setting-indirect-checkpoints-by-database-in-sql-server-2012\/","url":"https:\/\/www.sqlskills.com\/blogs\/joe\/setting-indirect-checkpoints-by-database-in-sql-server-2012\/","name":"SQL Server Indirect Checkpoints - Joe Sack","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#website"},"datePublished":"2011-10-18T08:17:00+00:00","dateModified":"2013-01-20T18:53:54+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/533eb0113a15fb5a6e8067a49e4ae648"},"breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/setting-indirect-checkpoints-by-database-in-sql-server-2012\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/joe\/setting-indirect-checkpoints-by-database-in-sql-server-2012\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/setting-indirect-checkpoints-by-database-in-sql-server-2012\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/joe\/"},{"@type":"ListItem","position":2,"name":"Performance","item":"https:\/\/www.sqlskills.com\/blogs\/joe\/category\/performance\/"},{"@type":"ListItem","position":3,"name":"Setting indirect checkpoints by database in SQL Server 2012"}]},{"@type":"WebSite","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#website","url":"https:\/\/www.sqlskills.com\/blogs\/joe\/","name":"Joe Sack","description":"SQL Server Performance Tuning, High Availability and Disaster Recovery Blog","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqlskills.com\/blogs\/joe\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/533eb0113a15fb5a6e8067a49e4ae648","name":"Joseph Sack","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqlskills.com\/blogs\/joe\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/a4b39a7719a6bfff1add3ec00527810734579ee114d6d983e8e68f937b77be96?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a4b39a7719a6bfff1add3ec00527810734579ee114d6d983e8e68f937b77be96?s=96&d=mm&r=g","caption":"Joseph Sack"},"description":"Joe Sack is a Principal Consultant with SQLskills. He has worked as a SQL Server professional since 1997 and has supported and developed for SQL Server environments in financial services, IT consulting, manufacturing, retail and the real estate industry. Prior to joining SQLskills he worked at Microsoft as a Premier Field Engineer supporting very large enterprise customer environments. He was responsible for providing deep SQL Server advisory services, training, troubleshooting and ongoing solutions guidance. His areas of expertise include performance tuning, scalability, T-SQL development and high-availability. In 2006 Joe earned the \u201cMicrosoft Certified Master: SQL Server 2005\u201d certification and in 2008 he earned the \u201cMicrosoft Certified Master: SQL Server 2008\u201d certification. In 2009 he took over responsibility for the entire SQL Server Microsoft Certified Master program and held that post until 2011. He was given the SQL Server MVP award in 2013.","sameAs":["http:\/\/3.209.169.194\/blogs\/joe","https:\/\/twitter.com\/https:\/\/twitter.com\/josephsack"],"url":"https:\/\/www.sqlskills.com\/blogs\/joe\/author\/joe\/"}]}},"_links":{"self":[{"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/posts\/522","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/comments?post=522"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/posts\/522\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/media?parent=522"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/categories?post=522"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/joe\/wp-json\/wp\/v2\/tags?post=522"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}