{"id":2399,"date":"2014-05-14T11:00:25","date_gmt":"2014-05-14T15:00:25","guid":{"rendered":"http:\/\/sqlity.net\/en\/?p=2399"},"modified":"2014-11-13T13:38:35","modified_gmt":"2014-11-13T18:38:35","slug":"bcm","status":"publish","type":"post","link":"https:\/\/sqlity.net\/en\/2399\/bcm\/","title":{"rendered":"Bulk Changed Map (BCM): The Minimally Logged Advantage"},"content":{"rendered":"<div>\n<h3>Introduction<\/h3>\n<p>\nSQL Server knows three recovery settings: Simple, Bulk-Logged and Full. To comply with the ACID properties, particularly the durability requirement, SQL Server uses a mechanism called Write Ahead Logging (WAL). Every change is first recorded in the database log (together with undo information) and then applied to the data pages in memory. Before a transaction can commit, the disk subsystem has to confirm that the log records were indeed written to the physical storage medium. The changes to the data pages are written to disk asynchronously and might even end up written before the transaction commits.\n<\/p>\n<p>\nThe information in the log allows SQL Server to recover the database after a crash. Recovery in this context means, that transactions that were committed before the crash are reapplied, if there are data pages that did not make it to disk in time. Transactions that were not yet committed are undone, if their data page changes were written before the crash. The end-result is that no matter what, the database is always in a transactionally consistent state.\n<\/p>\n<p>\nThe recovery setting of the database determines what exactly is logged and how long the log is kept. The crash recovery is always guaranteed, independent of this setting. However, in simple recovery mode the log data of a transaction is discarded after all pages that were changed by the transaction have been written to disk. In full recovery mode on the other hand, the log data is not discarded until a backup of the log has been performed.\n<\/p>\n<p>\nThis allows the DBA to create a \"chain\" of log backups. With such a log-chain, you can restore the database to any point in time, for example just before an accidental delete.\n<\/p>\n<p>\nThe bulk-logged recovery mode is similar to the full recovery mode. The difference lies in the fact that some resource intensive operations are not fully logged. Instead, only the operation itself and the page numbers of the affected pages are logged. During a log backup, those pages are added to the backup in addition to the normal log information.\n<\/p>\n<p>\nDurability is still guaranteed, however. For a statement to be bulk-loggable, all its changes must be applied to new (empty) pages. The addition of those pages to say a table is fully logged in all cases. The data changes to those pages however might not. If an undo of the operation should be required during recovery, only the adding of the pages needs to be undone. As the data pages were unused beforehand, changes to those pages themselves do not need to be undone.\n<\/p>\n<p>\nThe big advantage is that those bulk(y) operations that normally would cause a lot of churn on the log can be executed a lot quicker. However, everything in SQL Server is a trade-off and bulk logging is no exception. As the actual data pages have to be added to the log backup, the size of the log backup can potentially increase significantly. Also, as the data pages have to be accessed during the log backup, backing up the log tail might not be possible if the data file has become corrupt.\n<\/p>\n<h3>Bulk Changed Map in Action<\/h3>\n<p>\nTo be able to add the data pages that were affected by a bulk logged operation, SQL Server uses a mechanism similar to the <a href=\"http:\/\/sqlity.net\/en\/2387\/dcm\/\">Differential Changed Map<\/a> that is used for differential backups. Data pages that need to be added to the next log backup are flagged in the Bulk Changed Map (BCM). The BCM consists of BCM pages, pages of type 17. Like the DCM pages, each one covers a single <a href=\"http:\/\/sqlity.net\/en\/2331\/gam-interval\/\">GAM Interval<\/a>. The BCM page is always located in the last page of the GAM Extent, the first extent of each GAM Interval.\n<\/p>\n<p>\nTo show you an example, we need to create a database first and set it to recovery mode <span class=\"tt\">BULK_LOGGED<\/span>:\n<\/p>\n<div>\n[sql]\nCREATE DATABASE BulkLogged;<br \/>\nALTER DATABASE BulkLogged SET RECOVERY BULK_LOGGED;<br \/>\nBACKUP DATABASE BulkLogged TO DISK = 'BulkLogged.bak';<br \/>\n[\/sql]\n<\/div>\n<p>\nThe backup of this empty database will allow us later to execute a log backup. SQL Server does not allow the execution of log backups without a prior full backup.\n<\/p>\n<p>\nThe next step is to create a table in that database:\n<\/p>\n<div>\n[sql]\nUSE BulkLogged;<br \/>\nGO<br \/>\nCREATE TABLE dbo.ATable(id INT IDENTITY(1,1) PRIMARY KEY CLUSTERED, some_value INT, fill CHAR(8000));<br \/>\n[\/sql]\n<\/div>\n<p>\nAt this point, the Bulk Changed Map should not show any affected pages. Let us confirm:\n<\/p>\n<div>\n[sql]\nDBCC PAGE(0,1,7,3);<br \/>\n[\/sql]\n<\/div>\n<p>\n(Remember to always set trace flag 3604 before using <a href=\"http:\/\/sqlity.net\/en\/2033\/the-page\/\"><span class=\"tt\">DBCC PAGE<\/span><\/a>.) As expected, the output shows an empty BCM:\n<\/p>\n<p>\n<a href=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/empty_bulk_changed_map.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/empty_bulk_changed_map.jpg\" alt=\"empty bulk changed map\" title=\"empty bulk changed map\" width=\"816\" height=\"479\" class=\"aligncenter size-full wp-image-2402\" srcset=\"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/empty_bulk_changed_map.jpg 816w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/empty_bulk_changed_map-300x176.jpg 300w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/empty_bulk_changed_map-150x88.jpg 150w\" sizes=\"auto, (max-width: 816px) 100vw, 816px\" \/><\/a>\n<\/p>\n<p>\nNow we can execute a bulk logged insert statement:\n<\/p>\n<div>\n[sql]\nINSERT INTO dbo.ATable WITH(TABLOCK) (some_value)<br \/>\nSELECT C.column_id FROM master.sys.columns AS C;<br \/>\n[\/sql]\n<\/div>\n<p>\nAn insert statement like this is only bulked logged, when the table is a heap without indexes or if it is empty. The statement also needs to affect more than one page. (There are partially bulk logged execution modes too. Check <a href=\"http:\/\/technet.microsoft.com\/en-us\/library\/ms191244(v=sql.105).aspx\" target=\"ms\">the documentation<\/a> for details.)\n<\/p>\n<p>\nThe example table has a filler column that will cause each row to take up an entire data page. My <span class=\"tt\">master<\/span> database contains a little over 800 columns, so this insert statement should add that number of pages to the table. If we now look at the Bulk Changed map again, we should see about 800 flagged pages in there:\n<\/p>\n<p>\n<a href=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/bulk_changed_map_after_bulk_insert.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/bulk_changed_map_after_bulk_insert.jpg\" alt=\"bulk changed map after bulk insert\" title=\"bulk changed map after bulk insert\" width=\"816\" height=\"532\" class=\"aligncenter size-full wp-image-2401\" srcset=\"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/bulk_changed_map_after_bulk_insert.jpg 816w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/bulk_changed_map_after_bulk_insert-300x195.jpg 300w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/bulk_changed_map_after_bulk_insert-150x97.jpg 150w\" sizes=\"auto, (max-width: 816px) 100vw, 816px\" \/><\/a>\n<\/p>\n<p>\nIndeed, there are 103 extents or 824 pages flagged. If we now execute a log backup, those 824 data pages should be included:\n<\/p>\n<div>\n[sql]\nBACKUP LOG BulkLogged TO DISK = 'BulkLogged.bak'<br \/>\n[\/sql]\n<\/div>\n<p>\nWhen SQL Server takes a backup, it reports how many pages were read from each file. That output confirms that 824 data pages were included in the backup:\n<\/p>\n<p>\n<a href=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/log_backup_including_minimally_logged_data_pages.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/log_backup_including_minimally_logged_data_pages.jpg\" alt=\"log backup including minimally logged data pages\" title=\"log backup including minimally logged data pages\" width=\"816\" height=\"479\" class=\"aligncenter size-full wp-image-2400\" srcset=\"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/log_backup_including_minimally_logged_data_pages.jpg 816w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/log_backup_including_minimally_logged_data_pages-300x176.jpg 300w, https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/log_backup_including_minimally_logged_data_pages-150x88.jpg 150w\" sizes=\"auto, (max-width: 816px) 100vw, 816px\" \/><\/a>\n<\/p>\n<p>\nAfter the log backup, the Bulk Changed map should not contain any flagged pages anymore. Let us use <span class=\"tt\">DBCC PAGE<\/span> one more time to confirm:\n<\/p>\n<div>\n[sql]\nDBCC PAGE(0,1,7,3);<br \/>\n[\/sql]\n<\/div>\n<p>\nBelow you can find the complete output of this statement:\n<\/p>\n<div>\n[sourcecode]\nPAGE: (1:7)<\/p>\n<p>BUFFER:<\/p>\n<p>BUF @0x0000000004F66780<\/p>\n<p>bpage = 0x00000001F94E0000          bhash = 0x0000000000000000          bpageno = (1:7)<br \/>\nbdbid = 23                          breferences = 1                     bcputicks = 122<br \/>\nbsampleCount = 2                    bUse1 = 31469                       bstat = 0x9<br \/>\nblog = 0xdb21215a                   bnext = 0x0000000000000000          <\/p>\n<p>PAGE HEADER:<\/p>\n<p>Page @0x00000001F94E0000<\/p>\n<p>m_pageId = (1:7)                    m_headerVersion = 1                 m_type = 17<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 = (0:0:1)                     m_xactReserved = 0<br \/>\nm_xdesId = (0:0)                    m_ghostRecCnt = 0                   m_tornBits = 0<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>ML_MAP: Header @0x000000006C8BA064 Slot 0, Offset 96<\/p>\n<p>status = 0x0                        <\/p>\n<p>ML_MAP: Extent Alloc Status @0x000000006C8BA0C2<\/p>\n<p>(1:0)        - (1:384)      = NOT MIN_LOGGED                             <\/p>\n<p>DBCC execution completed. If DBCC printed error messages, contact your system administrator.<br \/>\n[\/sourcecode]\n<\/p><\/div>\n<p>\nAs we expected, the BCM is indeed empty now.\n<\/p>\n<h3>Summary<\/h3>\n<p>\nSQL Server uses the Bulk Changed Map to record which pages were altered by bulk-logged operations. This information is than later used to include those actual data pages in the next log backup.\n<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>The Bulk-Logged recovery mode can provide a performance gain for your database. Check out how SQL Server uses the Bulk Changed Map to make this possible.<\/p>\n<p> <a href=\"https:\/\/sqlity.net\/en\/2399\/bcm\/\">[more&#8230;]<\/a><\/p>\n","protected":false},"author":3,"featured_media":2401,"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":[5,27,14,105],"tags":[183,185,66,71,184,15,108,109,63,64],"class_list":["post-2399","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-general","category-series","category-sql-server-internals","category-storage-wednesday","tag-acid","tag-bulk-logged","tag-crash-recovery","tag-log-backup","tag-recovery-mode","tag-sql-server","tag-storage","tag-storage-engine","tag-transaction-log-2","tag-transaction-log-reuse"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Bulk Changed Map (BCM): The Minimally Logged Advantage - sqlity.net<\/title>\n<meta name=\"description\" content=\"The Bulk-Logged recovery mode can provide a performance gain for your database. Check out how SQL Server uses the Bulk Changed Map to make this possible.\" \/>\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\/2399\/bcm\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Bulk Changed Map (BCM): The Minimally Logged Advantage - sqlity.net\" \/>\n<meta property=\"og:description\" content=\"The Bulk-Logged recovery mode can provide a performance gain for your database. Check out how SQL Server uses the Bulk Changed Map to make this possible.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sqlity.net\/en\/2399\/bcm\/\" \/>\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-14T15:00:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2014-11-13T18:38:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/bulk_changed_map_after_bulk_insert.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"816\" \/>\n\t<meta property=\"og:image:height\" content=\"532\" \/>\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\\\/2399\\\/bcm\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2399\\\/bcm\\\/\"},\"author\":{\"name\":\"Sebastian Meine\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/#\\\/schema\\\/person\\\/bcffd8c572bc2f1bd10fdba80135e53c\"},\"headline\":\"Bulk Changed Map (BCM): The Minimally Logged Advantage\",\"datePublished\":\"2014-05-14T15:00:25+00:00\",\"dateModified\":\"2014-11-13T18:38:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2399\\\/bcm\\\/\"},\"wordCount\":1184,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2399\\\/bcm\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/sqlity.net\\\/wp-content\\\/uploads\\\/2014\\\/05\\\/bulk_changed_map_after_bulk_insert.jpg\",\"keywords\":[\"ACID\",\"bulk-logged\",\"crash recovery\",\"log backup\",\"recovery mode\",\"SQL Server\",\"storage\",\"storage engine\",\"transaction log\",\"transaction log reuse\"],\"articleSection\":[\"General\",\"Series\",\"SQL Server Internals\",\"Storage Wednesday\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/sqlity.net\\\/en\\\/2399\\\/bcm\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2399\\\/bcm\\\/\",\"url\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2399\\\/bcm\\\/\",\"name\":\"Bulk Changed Map (BCM): The Minimally Logged Advantage - sqlity.net\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2399\\\/bcm\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2399\\\/bcm\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/sqlity.net\\\/wp-content\\\/uploads\\\/2014\\\/05\\\/bulk_changed_map_after_bulk_insert.jpg\",\"datePublished\":\"2014-05-14T15:00:25+00:00\",\"dateModified\":\"2014-11-13T18:38:35+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/#\\\/schema\\\/person\\\/bcffd8c572bc2f1bd10fdba80135e53c\"},\"description\":\"The Bulk-Logged recovery mode can provide a performance gain for your database. Check out how SQL Server uses the Bulk Changed Map to make this possible.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2399\\\/bcm\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/sqlity.net\\\/en\\\/2399\\\/bcm\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2399\\\/bcm\\\/#primaryimage\",\"url\":\"https:\\\/\\\/sqlity.net\\\/wp-content\\\/uploads\\\/2014\\\/05\\\/bulk_changed_map_after_bulk_insert.jpg\",\"contentUrl\":\"https:\\\/\\\/sqlity.net\\\/wp-content\\\/uploads\\\/2014\\\/05\\\/bulk_changed_map_after_bulk_insert.jpg\",\"width\":816,\"height\":532,\"caption\":\"bulk changed map after bulk insert\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/sqlity.net\\\/en\\\/2399\\\/bcm\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/sqlity.net\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Bulk Changed Map (BCM): The Minimally Logged Advantage\"}]},{\"@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":"Bulk Changed Map (BCM): The Minimally Logged Advantage - sqlity.net","description":"The Bulk-Logged recovery mode can provide a performance gain for your database. Check out how SQL Server uses the Bulk Changed Map to make this possible.","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\/2399\/bcm\/","og_locale":"en_US","og_type":"article","og_title":"Bulk Changed Map (BCM): The Minimally Logged Advantage - sqlity.net","og_description":"The Bulk-Logged recovery mode can provide a performance gain for your database. Check out how SQL Server uses the Bulk Changed Map to make this possible.","og_url":"https:\/\/sqlity.net\/en\/2399\/bcm\/","og_site_name":"sqlity.net","article_publisher":"https:\/\/www.facebook.com\/sqlity.net","article_published_time":"2014-05-14T15:00:25+00:00","article_modified_time":"2014-11-13T18:38:35+00:00","og_image":[{"width":816,"height":532,"url":"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/bulk_changed_map_after_bulk_insert.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\/2399\/bcm\/#article","isPartOf":{"@id":"https:\/\/sqlity.net\/en\/2399\/bcm\/"},"author":{"name":"Sebastian Meine","@id":"https:\/\/sqlity.net\/en\/#\/schema\/person\/bcffd8c572bc2f1bd10fdba80135e53c"},"headline":"Bulk Changed Map (BCM): The Minimally Logged Advantage","datePublished":"2014-05-14T15:00:25+00:00","dateModified":"2014-11-13T18:38:35+00:00","mainEntityOfPage":{"@id":"https:\/\/sqlity.net\/en\/2399\/bcm\/"},"wordCount":1184,"commentCount":0,"image":{"@id":"https:\/\/sqlity.net\/en\/2399\/bcm\/#primaryimage"},"thumbnailUrl":"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/bulk_changed_map_after_bulk_insert.jpg","keywords":["ACID","bulk-logged","crash recovery","log backup","recovery mode","SQL Server","storage","storage engine","transaction log","transaction log reuse"],"articleSection":["General","Series","SQL Server Internals","Storage Wednesday"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/sqlity.net\/en\/2399\/bcm\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/sqlity.net\/en\/2399\/bcm\/","url":"https:\/\/sqlity.net\/en\/2399\/bcm\/","name":"Bulk Changed Map (BCM): The Minimally Logged Advantage - sqlity.net","isPartOf":{"@id":"https:\/\/sqlity.net\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/sqlity.net\/en\/2399\/bcm\/#primaryimage"},"image":{"@id":"https:\/\/sqlity.net\/en\/2399\/bcm\/#primaryimage"},"thumbnailUrl":"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/bulk_changed_map_after_bulk_insert.jpg","datePublished":"2014-05-14T15:00:25+00:00","dateModified":"2014-11-13T18:38:35+00:00","author":{"@id":"https:\/\/sqlity.net\/en\/#\/schema\/person\/bcffd8c572bc2f1bd10fdba80135e53c"},"description":"The Bulk-Logged recovery mode can provide a performance gain for your database. Check out how SQL Server uses the Bulk Changed Map to make this possible.","breadcrumb":{"@id":"https:\/\/sqlity.net\/en\/2399\/bcm\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sqlity.net\/en\/2399\/bcm\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/sqlity.net\/en\/2399\/bcm\/#primaryimage","url":"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/bulk_changed_map_after_bulk_insert.jpg","contentUrl":"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/bulk_changed_map_after_bulk_insert.jpg","width":816,"height":532,"caption":"bulk changed map after bulk insert"},{"@type":"BreadcrumbList","@id":"https:\/\/sqlity.net\/en\/2399\/bcm\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/sqlity.net\/en\/"},{"@type":"ListItem","position":2,"name":"Bulk Changed Map (BCM): The Minimally Logged Advantage"}]},{"@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_featured_media_url":"https:\/\/sqlity.net\/wp-content\/uploads\/2014\/05\/bulk_changed_map_after_bulk_insert.jpg","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/s2wXuw-bcm","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/posts\/2399","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=2399"}],"version-history":[{"count":0,"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/posts\/2399\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/media\/2401"}],"wp:attachment":[{"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/media?parent=2399"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/categories?post=2399"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sqlity.net\/en\/wp-json\/wp\/v2\/tags?post=2399"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}