{"id":2387,"date":"2014-05-07T11:00:02","date_gmt":"2014-05-07T15:00:02","guid":{"rendered":"http:\/\/sqlity.net\/en\/?p=2387"},"modified":"2014-11-13T13:38:39","modified_gmt":"2014-11-13T18:38:39","slug":"dcm","status":"publish","type":"post","link":"https:\/\/sqlity.net\/en\/2387\/dcm\/","title":{"rendered":"Differential Changed Map (DCM): How SQL Server Tracks Changed Pages"},"content":{"rendered":"<div>\n<h3>Introduction<\/h3>\n<p>\nSQL Server has three backup modes:\n<\/p>\n<ul>\n<li>Full<\/li>\n<li>Differential<\/li>\n<li>Log<\/li>\n<\/ul>\n<p>\nThe full backup writes a copy of all database pages (including empty ones) to the backup file. The full backup also captures enough of the database log to be able to recover the database to a transactionally consistent state at restore time.\n<\/p>\n<p>\nThe differential backup works in a similar way, but includes only those extents in the backup that were changed since the last full backup.\n<\/p>\n<p>\nThe log backup is independent of the other two backup types and backs up the piece of the log file that has changed since the last log backup was taken. If no log backup had been taken of the database since it was created (or switched out of simple recovery mode), the log backup backs up the piece of the log since the last full backup.\n<\/p>\n<h3>The Differential Change Map (DCM)<\/h3>\n<p>\nFor SQL Server to be able to backup only those extents during a differential backup that changed since the last full backup, it needs a way to identify pages that changed. In the page header of each page, SQL Server stores the last LSN that changed that\t page (in the <span class=\"tt\">m_lsn<\/span> field).<br \/>\nIt also stores the last LSN number included in the last full backup. That means, SQL Server could read each page, compare the two LSN values and copy the page to the backup file, if its LSN is larger than the full-backup-LSN. However, that would require every page to be read into memory, quite an expensive operation for large databases.\n<\/p>\n<p>\nInstead SQL Server uses a bitmap, similar to the one in <a href=\"http:\/\/sqlity.net\/en\/2351\/gam\/\">GAM<\/a> pages, to keep track of extents that changed since the last full backup. This bitmap is called Differential Changed Map or DCM. The DCM is spread over several DCM pages in the database. Each DCM page covers a single <a href=\"http:\/\/sqlity.net\/en\/2331\/gam-interval\/\">GAM interval<\/a>. The DCM page for each GAM interval is the seventh page within that interval, and as such it is part of the <a href=\"http:\/\/sqlity.net\/en\/2331\/gam-interval\/\">GAM extent<\/a>. If the bit for a particular extent is set in its DCM page, at least one page within that extent has been changed since the last full backup.\n<\/p>\n<h3>A DCM Example<\/h3>\n<p>\nTo demonstrate the DCM in action, we first need a simple table:\n<\/p>\n<div>\n[sql]\nIF OBJECT_ID('dbo.ATable') IS NOT NULL DROP TABLE dbo.ATable;<br \/>\nCREATE TABLE dbo.ATable(id INT IDENTITY(1,1) PRIMARY KEY CLUSTERED, cc CHAR(8000));<br \/>\nGO<br \/>\nINSERT INTO dbo.ATable(cc) SELECT CAST(NEWID() AS VARCHAR(MAX));<br \/>\nGO 7000<br \/>\n[\/sql]\n<\/div>\n<p>\nAfter creating that table, we can take a full backup:\n<\/p>\n<div>\n[sql]\nBACKUP DATABASE [Image \u00a9sqlity.net 2014] TO DISK = 'c:\\temp\\Backup.bak' WITH FORMAT,INIT;<br \/>\n[\/sql]\n<\/div>\n<p>\nAfter every backup, SQL Server stores information about that backup in the database. That causes some pages to change right away, so you will never see a completely empty DCM:\n<\/p>\n<p>\n<a href=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/DCM_after_full_backup.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/DCM_after_full_backup.jpg\" alt=\"The DCM after the first full backup.\" title=\"The DCM after the first full backup.\" width=\"816\" height=\"483\" class=\"aligncenter size-full wp-image-2390\" srcset=\"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/DCM_after_full_backup.jpg 816w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/DCM_after_full_backup-300x177.jpg 300w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/DCM_after_full_backup-150x88.jpg 150w\" sizes=\"auto, (max-width: 816px) 100vw, 816px\" \/><\/a>\n<\/p>\n<p>\nThe complete output of the <span class=\"tt\">DBCC PAGE<\/span> command for the first DCM page (page 6) is below. (Remember to set <a href=\"http:\/\/sqlity.net\/en\/2033\/the-page\/\">trace flag 3604 before using <span class=\"tt\">DBCC PAGE<\/span><\/a>.)\n<\/p>\n<div>\n[sourcecode]\nPAGE: (1:6)<\/p>\n<p>BUFFER:<\/p>\n<p>BUF @0x0000000004812C40<\/p>\n<p>bpage = 0x00000001F3D1E000          bhash = 0x0000000000000000          bpageno = (1:6)<br \/>\nbdbid = 16                          breferences = 15                    bcputicks = 670<br \/>\nbsampleCount = 3                    bUse1 = 47227                       bstat = 0xb<br \/>\nblog = 0x7a7a7a7a                   bnext = 0x0000000000000000          <\/p>\n<p>PAGE HEADER:<\/p>\n<p>Page @0x00000001F3D1E000<\/p>\n<p>m_pageId = (1:6)                    m_headerVersion = 1                 m_type = 16<br \/>\nm_typeFlagBits = 0x0                m_level = 0                         m_flagBits = 0x0<br \/>\nm_objId (AllocUnitId.idObj) = 99    m_indexId (AllocUnitId.idInd) = 0   Metadata: AllocUnitId = 6488064<br \/>\nMetadata: PartitionId = 0           Metadata: IndexId = 0               Metadata: ObjectId = 99<br \/>\nm_prevPage = (0:0)                  m_nextPage = (0:0)                  pminlen = 90<br \/>\nm_slotCnt = 2                       m_freeCnt = 6                       m_freeData = 8182<br \/>\nm_reservedCnt = 0                   m_lsn = (285:2064:1)                m_xactReserved = 0<br \/>\nm_xdesId = (0:0)                    m_ghostRecCnt = 0                   m_tornBits = -2051141691<br \/>\nDB Frag ID = 1                      <\/p>\n<p>Allocation Status<\/p>\n<p>GAM (1:2) = ALLOCATED               SGAM (1:3) = NOT ALLOCATED          PFS (1:1) = 0x44 ALLOCATED 100_PCT_FULL<br \/>\nDIFF (1:6) = CHANGED                ML (1:7) = NOT MIN_LOGGED           <\/p>\n<p>DIFF_MAP: Header @0x000000006E28A064 Slot 0, Offset 96<\/p>\n<p>status = 0x0                        <\/p>\n<p>DIFF_MAP: Extent Alloc Status @0x000000006E28A0C2<\/p>\n<p>(1:0)        - (1:16)       =     CHANGED<br \/>\n(1:24)       - (1:56)       = NOT CHANGED<br \/>\n(1:64)       -              =     CHANGED<br \/>\n(1:72)       - (1:144)      = NOT CHANGED<br \/>\n(1:152)      -              =     CHANGED<br \/>\n(1:160)      - (1:7680)     = NOT CHANGED                                <\/p>\n<p>DBCC execution completed. If DBCC printed error messages, contact your system administrator.<br \/>\n[\/sourcecode]\n<\/p><\/div>\n<p>\nIn the header you can see that the page type of DCM pages is 16. At the end of the output is the list of the extents that contain changed pages. There are currently five changed extents listed (1:0, 1:8, 1:16, 1:64, 1:152).\n<\/p>\n<p>\nNow let us apply a few changes to the table:\n<\/p>\n<div>\n[sql]\nUPDATE dbo.ATable SET<br \/>\n  cc = CAST(NEWID() AS VARCHAR(MAX))<br \/>\n WHERE id IN (100,800,1500,2200);<br \/>\n[\/sql]\n<\/div>\n<p>\nThis will cause at least four pages to change. In the example, they happen to be located in four different extents too:\n<\/p>\n<p>\n<a href=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/DMC_after_update.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/DMC_after_update.jpg\" alt=\"The DCM after the first UPDATE.\" title=\"The DCM after the first UPDATE.\" width=\"816\" height=\"483\" class=\"aligncenter size-full wp-image-2388\" srcset=\"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/DMC_after_update.jpg 816w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/DMC_after_update-300x177.jpg 300w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/DMC_after_update-150x88.jpg 150w\" sizes=\"auto, (max-width: 816px) 100vw, 816px\" \/><\/a>\n<\/p>\n<p>\nThe full differential changed map looks like this:\n<\/p>\n<div>\n[sourcecode]\nDIFF_MAP: Header @0x000000006E28A064 Slot 0, Offset 96<\/p>\n<p>status = 0x0                        <\/p>\n<p>DIFF_MAP: Extent Alloc Status @0x000000006E28A0C2<\/p>\n<p>(1:0)        - (1:16)       =     CHANGED<br \/>\n(1:24)       - (1:56)       = NOT CHANGED<br \/>\n(1:64)       -              =     CHANGED<br \/>\n(1:72)       - (1:144)      = NOT CHANGED<br \/>\n(1:152)      -              =     CHANGED<br \/>\n(1:160)      - (1:432)      = NOT CHANGED<br \/>\n(1:440)      -              =     CHANGED<br \/>\n(1:448)      - (1:1152)     = NOT CHANGED<br \/>\n(1:1160)     -              =     CHANGED<br \/>\n(1:1168)     - (1:1856)     = NOT CHANGED<br \/>\n(1:1864)     -              =     CHANGED<br \/>\n(1:1872)     - (1:2552)     = NOT CHANGED<br \/>\n(1:2560)     -              =     CHANGED<br \/>\n(1:2568)     - (1:7680)     = NOT CHANGED<br \/>\n[\/sourcecode]\n<\/p><\/div>\n<p>\nIn addition to the extents that were marked as changed before (1:0, 1:8, 1:16,1:64, 1:152), now there are four new ones: 1:440, 1:1160, 1:1864 and 1:2560\n<\/p>\n<p>\nThat means that there are currently nine extents or 72 pages marked as changed since the last full backup was taken. Let us try to take a differential backup now:\n<\/p>\n<div>\n[sql]\nBACKUP DATABASE [Image \u00a9sqlity.net 2014] TO DISK = 'c:\\temp\\Backup.bak' WITH DIFFERENTIAL;<br \/>\n[\/sql]\n<\/div>\n<p>\nThis backup writes 96 pages to disk, 24 more than expected:\n<\/p>\n<p>\n<a href=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/differential_backup_after_1st_update.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/differential_backup_after_1st_update.jpg\" alt=\"Pages affected by differential backup after first update.\" title=\"Pages affected by differential backup after first update.\" width=\"816\" height=\"483\" class=\"aligncenter size-full wp-image-2391\" srcset=\"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/differential_backup_after_1st_update.jpg 816w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/differential_backup_after_1st_update-300x177.jpg 300w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/differential_backup_after_1st_update-150x88.jpg 150w\" sizes=\"auto, (max-width: 816px) 100vw, 816px\" \/><\/a>\n<\/p>\n<p>\nThose additional pages do not come from a second <a href=\"http:\/\/sqlity.net\/en\/2331\/gam-interval\/\">GAM interval<\/a> as you might think. They are just additional internal pages that SQL Server requires to be part of the differential backup.\n<\/p>\n<p>\nLet us change a few more records in that table:\n<\/p>\n<div>\n[sql]\nUPDATE dbo.ATable SET<br \/>\n  cc = CAST(NEWID() AS VARCHAR(MAX))<br \/>\n WHERE id IN (3100,3800,4500,5200);<br \/>\n[\/sql]\n<\/div>\n<p>\nThis will again change four pages, each in a separate extent:\n<\/p>\n<p>\n<a href=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/DMC_after_2nd_update.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/DMC_after_2nd_update.jpg\" alt=\"The DCM after the second backup\" title=\"The DCM after the second backup\" width=\"816\" height=\"483\" class=\"aligncenter size-full wp-image-2393\" srcset=\"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/DMC_after_2nd_update.jpg 816w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/DMC_after_2nd_update-300x177.jpg 300w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/DMC_after_2nd_update-150x88.jpg 150w\" sizes=\"auto, (max-width: 816px) 100vw, 816px\" \/><\/a>\n<\/p>\n<p>\nThe complete DCM now looks like this:\n<\/p>\n<div>\n[sourcecode]\n(1:0)        - (1:16)       =     CHANGED<br \/>\n(1:24)       - (1:56)       = NOT CHANGED<br \/>\n(1:64)       -              =     CHANGED<br \/>\n(1:72)       -              = NOT CHANGED<br \/>\n(1:80)       -              =     CHANGED<br \/>\n(1:88)       - (1:128)      = NOT CHANGED<br \/>\n(1:136)      -              =     CHANGED<br \/>\n(1:144)      -              = NOT CHANGED<br \/>\n(1:152)      -              =     CHANGED<br \/>\n(1:160)      - (1:296)      = NOT CHANGED<br \/>\n(1:304)      -              =     CHANGED<br \/>\n(1:312)      - (1:432)      = NOT CHANGED<br \/>\n(1:440)      -              =     CHANGED<br \/>\n(1:448)      - (1:1152)     = NOT CHANGED<br \/>\n(1:1160)     -              =     CHANGED<br \/>\n(1:1168)     - (1:1856)     = NOT CHANGED<br \/>\n(1:1864)     -              =     CHANGED<br \/>\n(1:1872)     - (1:2552)     = NOT CHANGED<br \/>\n(1:2560)     -              =     CHANGED<br \/>\n(1:2568)     - (1:3456)     = NOT CHANGED<br \/>\n(1:3464)     -              =     CHANGED<br \/>\n(1:3472)     - (1:4160)     = NOT CHANGED<br \/>\n(1:4168)     -              =     CHANGED<br \/>\n(1:4176)     - (1:4864)     = NOT CHANGED<br \/>\n(1:4872)     -              =     CHANGED<br \/>\n(1:4880)     - (1:5568)     = NOT CHANGED<br \/>\n(1:5576)     -              =     CHANGED<br \/>\n(1:5584)     - (1:7680)     = NOT CHANGED<br \/>\n[\/sourcecode]\n<\/div>\n<p>\nIt lists 13 changed extends. Therefore, we would expect 104 pages to be included in the next differential backup. Let us try:\n<\/p>\n<div>\n[sql]\nBACKUP DATABASE [Image \u00a9sqlity.net 2014] TO DISK = 'c:\\temp\\Backup.bak' WITH DIFFERENTIAL;<br \/>\n[\/sql]\n<\/div>\n<p>\nAgain, that actual number is a little higher:\n<\/p>\n<p>\n<a href=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/differential_backup_after_2nd_update.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/differential_backup_after_2nd_update.jpg\" alt=\"Pages affected by differential backup after second update.\" title=\"Pages affected by differential backup after second update.\" width=\"816\" height=\"483\" class=\"aligncenter size-full wp-image-2392\" srcset=\"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/differential_backup_after_2nd_update.jpg 816w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/differential_backup_after_2nd_update-300x177.jpg 300w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/differential_backup_after_2nd_update-150x88.jpg 150w\" sizes=\"auto, (max-width: 816px) 100vw, 816px\" \/><\/a>\n<\/p>\n<p>\nIn fact, it is higher by 24.But that is the exact same number that we had before as overage. So it seems that SQL Server backs up three extends in addition to the extents listed in the DCM.\n<\/p>\n<p>\nThe DCM is reset, every time a full backup is taken (unless <span class=\"tt\">COPY_ONLY<\/span> is specified):\n<\/p>\n<p>\n<a href=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/DCM_after_2nd_full_backup.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/DCM_after_2nd_full_backup.jpg\" alt=\"The DCM after the second full backup.\" title=\"The DCM after the second full backup.\" width=\"816\" height=\"483\" class=\"aligncenter size-full wp-image-2389\" srcset=\"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/DCM_after_2nd_full_backup.jpg 816w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/DCM_after_2nd_full_backup-300x177.jpg 300w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/DCM_after_2nd_full_backup-150x88.jpg 150w\" sizes=\"auto, (max-width: 816px) 100vw, 816px\" \/><\/a>\n<\/p>\n<p>\nThese are the same five changed extents that we had after the first full backup.\n<\/p>\n<h3>Summary<\/h3>\n<p>\nThe Differential Changed Map or DCM is a bitmap that SQL Server uses to track which pages changed since the last full backup. It is stored in DCM pages, one per GAM interval. A differential backup will backup the pages marked as changed in the DCM. There are usually three additional extents included in a differential backup.\n<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>SQL Server uses the Differential Changed Map to determine, which pages changed since the last full backup. Read on to find out how the DCM is working.<\/p>\n<p> <a href=\"https:\/\/sqlity.net\/en\/2387\/dcm\/\">[more&#8230;]<\/a><\/p>\n","protected":false},"author":3,"featured_media":2390,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[69,5,27,14,105],"tags":[70,111,179,158,159,15,109],"class_list":["post-2387","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-backup","category-general","category-series","category-sql-server-internals","category-storage-wednesday","tag-backup-2","tag-dbcc-page","tag-dcm-page","tag-gam","tag-gam-interval","tag-sql-server","tag-storage-engine"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Differential Changed Map (DCM): How SQL Server Tracks Changed Pages - sqlity.net<\/title>\n<meta name=\"description\" content=\"SQL Server uses the Differential Changed Map to determine, which pages changed since the last full backup. Read on to find out how the DCM is working.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/sqlity.net\/en\/2387\/dcm\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Differential Changed Map (DCM): How SQL Server Tracks Changed Pages - sqlity.net\" \/>\n<meta property=\"og:description\" content=\"SQL Server uses the Differential Changed Map to determine, which pages changed since the last full backup. Read on to find out how the DCM is working.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sqlity.net\/en\/2387\/dcm\/\" \/>\n<meta property=\"og:site_name\" content=\"sqlity.net\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/sqlity.net\" \/>\n<meta property=\"article:published_time\" content=\"2014-05-07T15:00:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2014-11-13T18:38:39+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/DCM_after_full_backup.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"816\" \/>\n\t<meta property=\"og:image:height\" content=\"483\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Sebastian Meine\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@sqlity\" \/>\n<meta name=\"twitter:site\" content=\"@sqlity\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sebastian Meine\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2387\\\/dcm\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2387\\\/dcm\\\/\"},\"author\":{\"name\":\"Sebastian Meine\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/#\\\/schema\\\/person\\\/bcffd8c572bc2f1bd10fdba80135e53c\"},\"headline\":\"Differential Changed Map (DCM): How SQL Server Tracks Changed Pages\",\"datePublished\":\"2014-05-07T15:00:02+00:00\",\"dateModified\":\"2014-11-13T18:38:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2387\\\/dcm\\\/\"},\"wordCount\":1212,\"commentCount\":3,\"image\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2387\\\/dcm\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/sqlity.net\\\/wp-content\\\/uploads\\\/2014\\\/05\\\/DCM_after_full_backup.jpg\",\"keywords\":[\"backup\",\"DBCC PAGE\",\"DCM page\",\"GAM\",\"GAM Interval\",\"SQL Server\",\"storage engine\"],\"articleSection\":[\"Backup\",\"General\",\"Series\",\"SQL Server Internals\",\"Storage Wednesday\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/sqlity.net\\\/en\\\/2387\\\/dcm\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2387\\\/dcm\\\/\",\"url\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2387\\\/dcm\\\/\",\"name\":\"Differential Changed Map (DCM): How SQL Server Tracks Changed Pages - sqlity.net\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2387\\\/dcm\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2387\\\/dcm\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/sqlity.net\\\/wp-content\\\/uploads\\\/2014\\\/05\\\/DCM_after_full_backup.jpg\",\"datePublished\":\"2014-05-07T15:00:02+00:00\",\"dateModified\":\"2014-11-13T18:38:39+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/#\\\/schema\\\/person\\\/bcffd8c572bc2f1bd10fdba80135e53c\"},\"description\":\"SQL Server uses the Differential Changed Map to determine, which pages changed since the last full backup. Read on to find out how the DCM is working.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2387\\\/dcm\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/sqlity.net\\\/en\\\/2387\\\/dcm\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2387\\\/dcm\\\/#primaryimage\",\"url\":\"https:\\\/\\\/sqlity.net\\\/wp-content\\\/uploads\\\/2014\\\/05\\\/DCM_after_full_backup.jpg\",\"contentUrl\":\"https:\\\/\\\/sqlity.net\\\/wp-content\\\/uploads\\\/2014\\\/05\\\/DCM_after_full_backup.jpg\",\"width\":816,\"height\":483,\"caption\":\"The DCM after the first full backup.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2387\\\/dcm\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/sqlity.net\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Differential Changed Map (DCM): How SQL Server Tracks Changed Pages\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/sqlity.net\\\/en\\\/\",\"name\":\"sqlity.net\",\"description\":\"Quality for SQL\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/sqlity.net\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/#\\\/schema\\\/person\\\/bcffd8c572bc2f1bd10fdba80135e53c\",\"name\":\"Sebastian Meine\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4ab0a6d02dd494849a584a2c3c8bc3bdcef1d0aa5f87e98bf905dbdb9ad2ce3a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4ab0a6d02dd494849a584a2c3c8bc3bdcef1d0aa5f87e98bf905dbdb9ad2ce3a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4ab0a6d02dd494849a584a2c3c8bc3bdcef1d0aa5f87e98bf905dbdb9ad2ce3a?s=96&d=mm&r=g\",\"caption\":\"Sebastian Meine\"},\"sameAs\":[\"http:\\\/\\\/sqlity.net\",\"https:\\\/\\\/x.com\\\/sqlity\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Differential Changed Map (DCM): How SQL Server Tracks Changed Pages - sqlity.net","description":"SQL Server uses the Differential Changed Map to determine, which pages changed since the last full backup. Read on to find out how the DCM is working.","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:\/\/sqlity.net\/en\/2387\/dcm\/","og_locale":"en_US","og_type":"article","og_title":"Differential Changed Map (DCM): How SQL Server Tracks Changed Pages - sqlity.net","og_description":"SQL Server uses the Differential Changed Map to determine, which pages changed since the last full backup. Read on to find out how the DCM is working.","og_url":"https:\/\/sqlity.net\/en\/2387\/dcm\/","og_site_name":"sqlity.net","article_publisher":"https:\/\/www.facebook.com\/sqlity.net","article_published_time":"2014-05-07T15:00:02+00:00","article_modified_time":"2014-11-13T18:38:39+00:00","og_image":[{"width":816,"height":483,"url":"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/DCM_after_full_backup.jpg","type":"image\/jpeg"}],"author":"Sebastian Meine","twitter_card":"summary_large_image","twitter_creator":"@sqlity","twitter_site":"@sqlity","twitter_misc":{"Written by":"Sebastian Meine","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/sqlity.net\/en\/2387\/dcm\/#article","isPartOf":{"@id":"https:\/\/sqlity.net\/en\/2387\/dcm\/"},"author":{"name":"Sebastian Meine","@id":"https:\/\/sqlity.net\/en\/#\/schema\/person\/bcffd8c572bc2f1bd10fdba80135e53c"},"headline":"Differential Changed Map (DCM): How SQL Server Tracks Changed Pages","datePublished":"2014-05-07T15:00:02+00:00","dateModified":"2014-11-13T18:38:39+00:00","mainEntityOfPage":{"@id":"https:\/\/sqlity.net\/en\/2387\/dcm\/"},"wordCount":1212,"commentCount":3,"image":{"@id":"https:\/\/sqlity.net\/en\/2387\/dcm\/#primaryimage"},"thumbnailUrl":"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/DCM_after_full_backup.jpg","keywords":["backup","DBCC PAGE","DCM page","GAM","GAM Interval","SQL Server","storage engine"],"articleSection":["Backup","General","Series","SQL Server Internals","Storage Wednesday"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/sqlity.net\/en\/2387\/dcm\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/sqlity.net\/en\/2387\/dcm\/","url":"https:\/\/sqlity.net\/en\/2387\/dcm\/","name":"Differential Changed Map (DCM): How SQL Server Tracks Changed Pages - sqlity.net","isPartOf":{"@id":"https:\/\/sqlity.net\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/sqlity.net\/en\/2387\/dcm\/#primaryimage"},"image":{"@id":"https:\/\/sqlity.net\/en\/2387\/dcm\/#primaryimage"},"thumbnailUrl":"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/DCM_after_full_backup.jpg","datePublished":"2014-05-07T15:00:02+00:00","dateModified":"2014-11-13T18:38:39+00:00","author":{"@id":"https:\/\/sqlity.net\/en\/#\/schema\/person\/bcffd8c572bc2f1bd10fdba80135e53c"},"description":"SQL Server uses the Differential Changed Map to determine, which pages changed since the last full backup. Read on to find out how the DCM is working.","breadcrumb":{"@id":"https:\/\/sqlity.net\/en\/2387\/dcm\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sqlity.net\/en\/2387\/dcm\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/sqlity.net\/en\/2387\/dcm\/#primaryimage","url":"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/DCM_after_full_backup.jpg","contentUrl":"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/DCM_after_full_backup.jpg","width":816,"height":483,"caption":"The DCM after the first full backup."},{"@type":"BreadcrumbList","@id":"https:\/\/sqlity.net\/en\/2387\/dcm\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/sqlity.net\/en\/"},{"@type":"ListItem","position":2,"name":"Differential Changed Map (DCM): How SQL Server Tracks Changed Pages"}]},{"@type":"WebSite","@id":"https:\/\/sqlity.net\/en\/#website","url":"https:\/\/sqlity.net\/en\/","name":"sqlity.net","description":"Quality for SQL","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/sqlity.net\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/sqlity.net\/en\/#\/schema\/person\/bcffd8c572bc2f1bd10fdba80135e53c","name":"Sebastian Meine","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/4ab0a6d02dd494849a584a2c3c8bc3bdcef1d0aa5f87e98bf905dbdb9ad2ce3a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/4ab0a6d02dd494849a584a2c3c8bc3bdcef1d0aa5f87e98bf905dbdb9ad2ce3a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4ab0a6d02dd494849a584a2c3c8bc3bdcef1d0aa5f87e98bf905dbdb9ad2ce3a?s=96&d=mm&r=g","caption":"Sebastian Meine"},"sameAs":["http:\/\/sqlity.net","https:\/\/x.com\/sqlity"]}]}},"jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/s2wXuw-dcm","jetpack-related-posts":[],"jetpack_featured_media_url":"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/DCM_after_full_backup.jpg","_links":{"self":[{"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/posts\/2387","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/comments?post=2387"}],"version-history":[{"count":0,"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/posts\/2387\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/media\/2390"}],"wp:attachment":[{"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/media?parent=2387"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/categories?post=2387"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/tags?post=2387"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}