{"id":546,"date":"2010-12-18T18:15:00","date_gmt":"2010-12-18T18:15:00","guid":{"rendered":"\/blogs\/jonathan\/post\/An-XEvent-a-Day-(18-of-31)-A-Look-at-Backup-Internals-and-How-to-Track-Backup-and-Restore-Throughput-(Part-2).aspx"},"modified":"2017-04-13T12:17:38","modified_gmt":"2017-04-13T16:17:38","slug":"an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\/","title":{"rendered":"An XEvent a Day (18 of 31) \u2013 A Look at Backup Internals and How to Track Backup and Restore Throughput (Part 2)"},"content":{"rendered":"<p>\nIn yesterday&rsquo;s blog post <a href=\"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-17-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-1\/\" target=\"_blank\">A Look at Backup Internals and How to Track Backup and Restore Throughput (Part 1)<\/a>, we looked at what happens when we Backup a database in SQL Server.&nbsp; Today, we are going to use the information we captured to perform some analysis of the Backup information in an attempt to find ways to decrease the time it takes to backup a database.&nbsp; When I began reviewing the data from the Backup in yesterdays post, I realized that I had made a mistake in the process and left Trace Flag 3213 off, which left some information that we&rsquo;ll need out of the results, the Backup Buffer Configuration information.&nbsp; For this post I turned Trace Flag 3213 on, and reran the Backup from yesterday, so the results may differ slightly but the same Backup command was used for the tests.\n<\/p>\n<p>\n<a href=\"http:\/\/sqlblog.com\/blogs\/jonathan_kehayias\/image_5F66CA60.png\" target=\"_blank\"><img fetchpriority=\"high\" decoding=\"async\" style=\"display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px\" src=\"http:\/\/sqlblog.com\/blogs\/jonathan_kehayias\/image_thumb_165082CD.png\" border=\"0\" alt=\"image\" title=\"image\" width=\"644\" height=\"217\" \/><\/a> <br \/>\nThe Backup Buffer Configuration information tells us how many Buffers were allocated, and what the Max Transfer Size being used is.&nbsp; In the screenshot above, this information is outlined in the red box.&nbsp; The default Buffer Count is determined by SQL Server when the BUFFERCOUNT option is not specified in the BACKUP DATABASE command.&nbsp; The calculation used is:\n<\/p>\n<blockquote>\n<p>\n\t(NumberofBackupDevices *<strong> <\/strong>GetSuggestedIoDepth) + NumberofBackupDevices + (2*DatabaseDeviceCount)\n\t<\/p>\n<\/blockquote>\n<p>\nThis is covered in detail on Amit Banerjee&rsquo;s blog post, <a href=\"https:\/\/blogs.msdn.microsoft.com\/b\/sqlserverfaq\/archive\/2010\/05\/06\/incorrect-buffercount-data-transfer-option-can-lead-to-oom-condition.aspx\" target=\"_blank\">Incorrect BufferCount data transfer option can lead to OOM condition<\/a>.&nbsp; For the Backup in yesterday&rsquo;s post, and the one that will be the baseline for today&rsquo;s post, the BUFFERCOUNT option was not specified, and the Backup, as shown above, used 7 Buffers and the default MaxTransferSize of 1MB for the backup.&nbsp; If we look at the aggregated Event and wait_type information contained in the Event Session for the Backup we can begin to see what types of Backup bottlenecks we might have in the system.\n<\/p>\n<blockquote><p>\n\t<code><span style=\"color: blue\">SELECT&nbsp;&nbsp;<br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span style=\"color: magenta\">ISNULL<\/span><span style=\"color: gray\">(<\/span><span style=\"color: black\">wait_type<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">event_name<\/span><span style=\"color: gray\">) <\/span><span style=\"color: blue\">AS <\/span><span style=\"color: black\">Operation<\/span><span style=\"color: gray\">, <br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span style=\"color: magenta\">SUM<\/span><span style=\"color: gray\">(<\/span><span style=\"color: black\">duration<\/span><span style=\"color: gray\">) <\/span><span style=\"color: blue\">AS <\/span><span style=\"color: black\">duration<\/span><span style=\"color: gray\">, <br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span style=\"color: magenta\">SUM<\/span><span style=\"color: gray\">(<\/span><span style=\"color: black\">signal_duration<\/span><span style=\"color: gray\">) <\/span><span style=\"color: blue\">AS <\/span><span style=\"color: black\">signal_duration<\/span><span style=\"color: gray\">, <br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span style=\"color: magenta\">COUNT<\/span><span style=\"color: gray\">(*) <\/span><span style=\"color: blue\">AS <\/span><span style=\"color: black\">occurences<br \/>\n\t<\/span><span style=\"color: blue\">FROM <\/span><span style=\"color: #434343\">#TestResults<br \/>\n\t<\/span><span style=\"color: blue\">WHERE <\/span><span style=\"color: gray\">(<\/span><span style=\"color: black\">duration <\/span><span style=\"color: blue\">IS <\/span><span style=\"color: gray\">NOT NULL OR <\/span><span style=\"color: black\">signal_duration <\/span><span style=\"color: blue\">IS <\/span><span style=\"color: gray\">NOT NULL)<br \/>\n\t&nbsp;&nbsp;AND <\/span><span style=\"color: magenta\">ISNULL<\/span><span style=\"color: gray\">(<\/span><span style=\"color: black\">wait_type<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">event_name<\/span><span style=\"color: gray\">) <\/span><span style=\"color: blue\">IN <br \/>\n\t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span style=\"color: gray\">(<\/span><span style=\"color: red\">&#39;BACKUPBUFFER&#39;<\/span><span style=\"color: gray\">, <\/span><span style=\"color: red\">&#39;BACKUPIO&#39;<\/span><span style=\"color: gray\">)<br \/>\n\t<\/span><span style=\"color: blue\">GROUP BY <\/span><span style=\"color: magenta\">ISNULL<\/span><span style=\"color: gray\">(<\/span><span style=\"color: black\">wait_type<\/span><span style=\"color: gray\">, <\/span><span style=\"color: black\">event_name<\/span><span style=\"color: gray\">)<\/span><\/code> <a href=\"http:\/\/sqlblog.com\/blogs\/jonathan_kehayias\/image_695B1FF1.png\" target=\"_blank\"><img decoding=\"async\" style=\"display: inline; border-width: 0px\" src=\"http:\/\/sqlblog.com\/blogs\/jonathan_kehayias\/image_thumb_48D3E03F.png\" border=\"0\" alt=\"image\" title=\"image\" width=\"357\" height=\"73\" \/><\/a>\n<\/p><\/blockquote>\n<p>\nLooking at this information, we have a large number of BACKUPBUFFER waits occurring during the backup of the database and this may be a potential tuning opportunity to improve the performance of our database Backups.&nbsp; To test this, we can change our Backup Script to include a 4GB MAXTRANSFERSIZE and a BUFFERCOUNT of 16.&nbsp; I also chose to change the filenames in the Extended Events Session to simplify working with the Target Data for each test individually.&nbsp; It is possible to specify the exact filename and metadatafile names when you read from the Target, but that requires more work than is needed in my opinion.&nbsp; For the sake of brevity I am not going to repeat all of the Extended Events information in this blog post, but instead show the outcome of running various configurations of BUFFERCOUNT against a test server.\n<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\" style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">\n<tbody>\n<tr>\n<td width=\"71\" style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">Test Number<\/td>\n<td width=\"66\" style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">Backup File Count<\/td>\n<td width=\"61\" style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">Buffer Count<\/td>\n<td width=\"79\" style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">Max Transfer Size<\/td>\n<td width=\"73\" style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">Backup Time (s)<\/td>\n<td width=\"117\" style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">BACKUPBUFFER (wait ms)<\/td>\n<td width=\"124\" style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">BACKUPIO (wait ms)<\/td>\n<td width=\"72\" style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">BACKUPBUFFER (wait count)<\/td>\n<td width=\"142\" style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">BACKUPIO (wait count)<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">1<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">1<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">7<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">1024<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">122.5<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">159471<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">62587<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">81616<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">22815<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">2<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">1<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">16<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">4096<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">105.2<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">90963<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">69091<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">14513<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">7982<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">3<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">1<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">32<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">4096<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">99.5<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">75236<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">88634<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">12298<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">8679<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">4<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">1<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">128<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">4096<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">95.9<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">70173<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">63435<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">8292<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">4679<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">5<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">1<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">256<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">4096<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">95.9<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">50988<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">48942<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">1538<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">1135<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">6<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">2<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">128<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">4096<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">96<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">152323<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">63800<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">12416<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">4925<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">7<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">2<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">256<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">4096<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">96.4<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">109565<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">46953<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">3067<\/td>\n<td style=\"padding-bottom: 5px; padding-left: 5px; padding-right: 15px; border-collapse: collapse; padding-top: 5px; border: black 1px solid\">1195<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><\/p>\n<p>\nThe same Event Session was used to gather the above metrics in seven repetitive tests.&nbsp; The test server is a Dell R710 dual quad core system with 24GB RAM and HT enabled.&nbsp; It has eight internal 15K RPM 146GB SAS drives that are configured into 2 RAID 1 drive pairs and a single 4 disk RAID 5 array.&nbsp; One of the RAID 1 drive pairs was dedicated to the OS, and SQL Binaries.&nbsp; The other was used for writing the backups, and the database data\/log\/tempdb files were placed on the RAID 5 array.&nbsp; This isn&rsquo;t the ideal configuration for a setup, but its what I had available at the moment to work with, and is similar to some of the configurations I&rsquo;ve seen in the real world as well.&nbsp; The Backups were segregated to a dedicated disk that was RAID 1 for this test to avoid RAID 5 write penalties, and to maximize the backup write throughput by isolating it from any other operations.\n<\/p>\n<p>\nThe above results can be interpreted a number of different ways.&nbsp; As the BUFFERCOUNT increases the backup time decreases, and so does the amount of time spent waiting on Backup Buffers.&nbsp; However, there is a tradeoff that is being made in memory consumption; specifically memory outside of the buffer pool from Virtual Address Space.&nbsp; On 32 bit servers this can lead to Out of Memory exceptions, the topic of Amit&rsquo;s blog post referenced previously in this blog post.&nbsp; Test Number 5, with 256 buffers and a 4MB transfer size will use 1GB of memory as shown in the Backup Buffer Configuration Information.\n<\/p>\n<p align=\"center\">\n<img decoding=\"async\" style=\"display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px\" src=\"http:\/\/sqlblog.com\/blogs\/jonathan_kehayias\/image_thumb_61637D8F.png\" border=\"0\" alt=\"image\" title=\"image\" width=\"644\" height=\"246\" \/>\n<\/p>\n<p>\nOn the test server used for this testing, the bottleneck is the disks that the backup file is being written to and further improvements in performance will require additional IO to accomplish.&nbsp; The test database has 30GB of data in it, and with backup compression, the backup size is 7.8GB in size on disk.&nbsp; For a full backup to take just over a minute and a half for this database is not that bad, but it is going to local disks and there is no safeguard for the data in the event of a catastrophic loss of the physical server entirely unless the data gets copied to another location in the network after a local backup occurs.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In yesterday&rsquo;s blog post A Look at Backup Internals and How to Track Backup and Restore Throughput (Part 1), we looked at what happens when we Backup a database in SQL Server.&nbsp; Today, we are going to use the information we captured to perform some analysis of the Backup information in an attempt to find [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23,38,45],"tags":[],"class_list":["post-546","post","type-post","status-publish","format-standard","hentry","category-extended-events","category-sql-server-2008","category-xevent-a-day-series"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>An XEvent a Day (18 of 31) \u2013 A Look at Backup Internals and How to Track Backup and Restore Throughput (Part 2) - Jonathan Kehayias<\/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\/jonathan\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"An XEvent a Day (18 of 31) \u2013 A Look at Backup Internals and How to Track Backup and Restore Throughput (Part 2) - Jonathan Kehayias\" \/>\n<meta property=\"og:description\" content=\"In yesterday&rsquo;s blog post A Look at Backup Internals and How to Track Backup and Restore Throughput (Part 1), we looked at what happens when we Backup a database in SQL Server.&nbsp; Today, we are going to use the information we captured to perform some analysis of the Backup information in an attempt to find [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Jonathan Kehayias\" \/>\n<meta property=\"article:published_time\" content=\"2010-12-18T18:15:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-04-13T16:17:38+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/sqlblog.com\/blogs\/jonathan_kehayias\/image_thumb_165082CD.png\" \/>\n<meta name=\"author\" content=\"Jonathan Kehayias\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jonathan Kehayias\" \/>\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\":\"Article\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\\\/\"},\"author\":{\"name\":\"Jonathan Kehayias\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#\\\/schema\\\/person\\\/01c10d94f3648654ef706d5e6305f69c\"},\"headline\":\"An XEvent a Day (18 of 31) \u2013 A Look at Backup Internals and How to Track Backup and Restore Throughput (Part 2)\",\"datePublished\":\"2010-12-18T18:15:00+00:00\",\"dateModified\":\"2017-04-13T16:17:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\\\/\"},\"wordCount\":894,\"commentCount\":1,\"image\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/sqlblog.com\\\/blogs\\\/jonathan_kehayias\\\/image_thumb_165082CD.png\",\"articleSection\":[\"Extended Events\",\"SQL Server 2008\",\"XEvent a Day Series\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\\\/\",\"url\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\\\/\",\"name\":\"An XEvent a Day (18 of 31) \u2013 A Look at Backup Internals and How to Track Backup and Restore Throughput (Part 2) - Jonathan Kehayias\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/sqlblog.com\\\/blogs\\\/jonathan_kehayias\\\/image_thumb_165082CD.png\",\"datePublished\":\"2010-12-18T18:15:00+00:00\",\"dateModified\":\"2017-04-13T16:17:38+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#\\\/schema\\\/person\\\/01c10d94f3648654ef706d5e6305f69c\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\\\/#primaryimage\",\"url\":\"http:\\\/\\\/sqlblog.com\\\/blogs\\\/jonathan_kehayias\\\/image_thumb_165082CD.png\",\"contentUrl\":\"http:\\\/\\\/sqlblog.com\\\/blogs\\\/jonathan_kehayias\\\/image_thumb_165082CD.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Extended Events\",\"item\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/category\\\/extended-events\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"An XEvent a Day (18 of 31) \u2013 A Look at Backup Internals and How to Track Backup and Restore Throughput (Part 2)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#website\",\"url\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/\",\"name\":\"Jonathan Kehayias - The Rambling DBA\",\"description\":\"The Rambling DBA\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.sqlskills.com\\\/blogs\\\/jonathan\\\/#\\\/schema\\\/person\\\/01c10d94f3648654ef706d5e6305f69c\",\"name\":\"Jonathan Kehayias\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g\",\"caption\":\"Jonathan Kehayias\"},\"sameAs\":[\"http:\\\/\\\/3.209.169.194\\\/blogs\\\/jonathan\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"An XEvent a Day (18 of 31) \u2013 A Look at Backup Internals and How to Track Backup and Restore Throughput (Part 2) - Jonathan Kehayias","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\/jonathan\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\/","og_locale":"en_US","og_type":"article","og_title":"An XEvent a Day (18 of 31) \u2013 A Look at Backup Internals and How to Track Backup and Restore Throughput (Part 2) - Jonathan Kehayias","og_description":"In yesterday&rsquo;s blog post A Look at Backup Internals and How to Track Backup and Restore Throughput (Part 1), we looked at what happens when we Backup a database in SQL Server.&nbsp; Today, we are going to use the information we captured to perform some analysis of the Backup information in an attempt to find [&hellip;]","og_url":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\/","og_site_name":"Jonathan Kehayias","article_published_time":"2010-12-18T18:15:00+00:00","article_modified_time":"2017-04-13T16:17:38+00:00","og_image":[{"url":"http:\/\/sqlblog.com\/blogs\/jonathan_kehayias\/image_thumb_165082CD.png","type":"","width":"","height":""}],"author":"Jonathan Kehayias","twitter_misc":{"Written by":"Jonathan Kehayias","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\/#article","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\/"},"author":{"name":"Jonathan Kehayias","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#\/schema\/person\/01c10d94f3648654ef706d5e6305f69c"},"headline":"An XEvent a Day (18 of 31) \u2013 A Look at Backup Internals and How to Track Backup and Restore Throughput (Part 2)","datePublished":"2010-12-18T18:15:00+00:00","dateModified":"2017-04-13T16:17:38+00:00","mainEntityOfPage":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\/"},"wordCount":894,"commentCount":1,"image":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\/#primaryimage"},"thumbnailUrl":"http:\/\/sqlblog.com\/blogs\/jonathan_kehayias\/image_thumb_165082CD.png","articleSection":["Extended Events","SQL Server 2008","XEvent a Day Series"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\/","url":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\/","name":"An XEvent a Day (18 of 31) \u2013 A Look at Backup Internals and How to Track Backup and Restore Throughput (Part 2) - Jonathan Kehayias","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\/#primaryimage"},"image":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\/#primaryimage"},"thumbnailUrl":"http:\/\/sqlblog.com\/blogs\/jonathan_kehayias\/image_thumb_165082CD.png","datePublished":"2010-12-18T18:15:00+00:00","dateModified":"2017-04-13T16:17:38+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#\/schema\/person\/01c10d94f3648654ef706d5e6305f69c"},"breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\/#primaryimage","url":"http:\/\/sqlblog.com\/blogs\/jonathan_kehayias\/image_thumb_165082CD.png","contentUrl":"http:\/\/sqlblog.com\/blogs\/jonathan_kehayias\/image_thumb_165082CD.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/an-xevent-a-day-18-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/"},{"@type":"ListItem","position":2,"name":"Extended Events","item":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/category\/extended-events\/"},{"@type":"ListItem","position":3,"name":"An XEvent a Day (18 of 31) \u2013 A Look at Backup Internals and How to Track Backup and Restore Throughput (Part 2)"}]},{"@type":"WebSite","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#website","url":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/","name":"Jonathan Kehayias - The Rambling DBA","description":"The Rambling DBA","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/#\/schema\/person\/01c10d94f3648654ef706d5e6305f69c","name":"Jonathan Kehayias","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/86630e27f5deecc5c393ea57fc7c3b6a068949f4fd6b5309f81de5a276f12855?s=96&d=mm&r=g","caption":"Jonathan Kehayias"},"sameAs":["http:\/\/3.209.169.194\/blogs\/jonathan"]}]}},"_links":{"self":[{"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/posts\/546","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/comments?post=546"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/posts\/546\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/media?parent=546"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/categories?post=546"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/jonathan\/wp-json\/wp\/v2\/tags?post=546"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}