{"id":4124,"date":"2014-11-19T07:49:00","date_gmt":"2014-11-19T06:49:00","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/"},"modified":"2014-11-19T07:49:00","modified_gmt":"2014-11-19T06:49:00","slug":"sql-server-2014-buffer-pool-extension-a-corruption","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/","title":{"rendered":"SQL Server 2014: buffer pool extension &amp; corruption"},"content":{"rendered":"<p>I had the opportunity to attend Paul Randal\u2019s session on advanced data recovery techniques at the Pass Summit. During this session one attendee asked Paul if a page that has just been corrupted can remain in the buffer pool extension (BPE). As you probably know, BPE only deals with clean pages. Paul hesitated a lot and asked us to test and this is exactly what I will do in the blog post.<\/p>\n<p>First, let\u2019s start by limiting the maximum memory that can be used by the buffer pool:<\/p>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: green\">&#8212; Configure SQL Server max memory to 1024 MB<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">EXEC<span style=\"font-size: 9.5pt;font-family: Consolas\"> <span style=\"color: maroon\">sp_configure<span style=\"color: red\">&#8216;show advanced options&#8217;<span style=\"color: gray\">, 1<span style=\"color: gray\">;<\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">GO<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">RECONFIGURE<span style=\"font-size: 9.5pt;font-family: Consolas;color: gray\">;<\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">EXEC<span style=\"font-size: 9.5pt;font-family: Consolas\"> <span style=\"color: maroon\">sp_configure<span style=\"color: red\">&#8216;max server memory (MB)&#8217;<span style=\"color: gray\">, 1024<span style=\"color: gray\">;<\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">GO<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">RECONFIGURE<span style=\"font-size: 9.5pt;font-family: Consolas;color: gray\">;<\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">GO<\/span><\/div>\n<p>Then we can enable the buffer pool extension feature:<\/p>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">ALTER<span style=\"font-size: 9.5pt;font-family: Consolas\"> <span style=\"color: blue\">SERVER CONFIGURATION <span style=\"color: blue\">SET <span style=\"color: blue\">BUFFER <span style=\"color: blue\">POOL EXTENSION<\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">ON<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: gray\">(<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 <span style=\"color: green\">&#8212; change the path if necessary<\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: blue\">FILENAME <span style=\"color: gray\">= <span style=\"color: red\">N&#8217;E:SQLSERVERMSSQLSERVERDATAssdbuffer_pool.bpe&#8217;<span style=\"color: gray\">,<\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"font-size: 9.5pt;font-family: Consolas\">SIZE <span style=\"color: gray\">= 4096 MB<\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: gray\">);<\/span><\/div>\n<p>I configured a buffer pool extension size with 4X the max memory value for the buffer cache<\/p>\n<p>At this point I need a database with a big size in order to have a chance to retrieve some data pages in the buffer pool extension part. My AdventureWorks2012 database will fit this purpose:<\/p>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">USE<span style=\"font-size: 9.5pt;font-family: Consolas\"> AdventureWorks2012<span style=\"color: gray\">;<\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">GO<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">EXEC<span style=\"font-size: 9.5pt;font-family: Consolas\"> <span style=\"color: maroon\">sp_spaceused<span style=\"color: gray\">;<\/span><\/span><\/span><\/span><\/div>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_23_-_1_-_adventureworks2012_size.jpg\" alt=\"blog_23_-_1_-_adventureworks2012_size\" width=\"362\" height=\"84\" \/><\/p>\n<p>I have also 3 big tables in this database: dbo.bigTransactionHistory_rs1 (2.2GB), dbo.bigTransactionHistory_rs2 (2.1 GB) and BigTransactionHistory (1.2GB)<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_23_-_2_-_adventureworks2012_top_tables_size.jpg\" alt=\"blog_23_-_2_-_adventureworks2012_top_tables_size\" width=\"582\" height=\"94\" \/><\/p>\n<p>I have a good chance to find out some pages related on these tables in the BPE, if I perform a big operation like a DBCC CHECKDB on the AdventureWorks2012 database.<\/p>\n<p>After performing a complete integrity check of this database and executing some queries as well, here it is the picture of my buffer pool:<\/p>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">SELECT<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: blue\">CASE is_in_bpool_extension<\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: blue\">WHEN 1 <span style=\"color: blue\">THEN <span style=\"color: red\">&#8216;SSD&#8217;<\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: blue\">ELSE <span style=\"color: red\">&#8216;RAM&#8217;<\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: blue\">END <span style=\"color: blue\">AS location<span style=\"color: gray\">,<\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: fuchsia\">COUNT<span style=\"color: gray\">(*) <span style=\"color: blue\">AS nb_pages<span style=\"color: gray\">,<\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: fuchsia\">COUNT<span style=\"color: gray\">(*) <span style=\"color: gray\">* 8 <span style=\"color: gray\">\/ 1024 <span style=\"color: blue\">AS size_in_mb<span style=\"color: gray\">,<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: fuchsia\">COUNT<span style=\"color: gray\">(*) <span style=\"color: gray\">* 100. <span style=\"color: gray\">\/(<span style=\"color: blue\">SELECT <span style=\"color: fuchsia\">COUNT<span style=\"color: gray\">(*) <span style=\"color: blue\">FROM <span style=\"color: green\">sys<span style=\"color: gray\">.<span style=\"color: green\">dm_os_buffer_descriptors<span style=\"color: gray\">(<span style=\"color: blue\">nolock<span style=\"color: gray\">)) <span style=\"color: blue\">AS percent_<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">FROM<span style=\"font-size: 9.5pt;font-family: Consolas\"> <span style=\"color: green\">sys<span style=\"color: gray\">.<span style=\"color: green\">dm_os_buffer_descriptors<span style=\"color: gray\">(<span style=\"color: blue\">nolock<span style=\"color: gray\">)<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">GROUP<span style=\"font-size: 9.5pt;font-family: Consolas\"> <span style=\"color: blue\">BY is_in_bpool_extension<\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">ORDER<span style=\"font-size: 9.5pt;font-family: Consolas\"> <span style=\"color: blue\">BY location<span style=\"color: gray\">;<\/span><\/span><\/span><\/span><\/div>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_23_-_21_-_buffer_pool_overview.jpg\" alt=\"blog_23_-_21_-_buffer_pool_overview\" width=\"321\" height=\"62\" \/><\/p>\n<p>Is it possible to find some pages in the buffer pool extension part that concerns the table bigTransactionHistory_rs1?<\/p>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">SELECT<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 bd<span style=\"color: gray\">.page_id<span style=\"color: gray\">, da<span style=\"color: gray\">.page_type<span style=\"color: gray\">, bd<span style=\"color: gray\">.is_modified<\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">FROM<span style=\"font-size: 9.5pt;font-family: Consolas\"> <span style=\"color: green\">sys<span style=\"color: gray\">.<span style=\"color: green\">dm_os_buffer_descriptors <span style=\"color: blue\">AS bd<\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: gray\">JOIN <span style=\"color: green\">sys<span style=\"color: gray\">.dm_db_database_page_allocations<span style=\"color: gray\">(<span style=\"color: fuchsia\">DB_ID<span style=\"color: gray\">(<span style=\"color: red\">&#8216;AdventureWorks2012&#8217;<span style=\"color: gray\">), <span style=\"color: fuchsia\">OBJECT_ID<span style=\"color: gray\">(<span style=\"color: red\">&#8216;dbo.bigTransactionHistory_rs1&#8217;<span style=\"color: gray\">), <span style=\"color: gray\">NULL, <span style=\"color: gray\">NULL, <span style=\"color: blue\">DEFAULT<span style=\"color: gray\">) <span style=\"color: blue\">AS da<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: blue\">ON bd<span style=\"color: gray\">.database_id <span style=\"color: gray\">= da<span style=\"color: gray\">.database_id<\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: gray\">AND bd<span style=\"color: gray\">.<span style=\"color: fuchsia\">file_id <span style=\"color: gray\">= da<span style=\"color: gray\">.allocated_page_file_id<\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: gray\">AND bd<span style=\"color: gray\">.page_id <span style=\"color: gray\">= da<span style=\"color: gray\">.allocated_page_page_id<\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">WHERE<span style=\"font-size: 9.5pt;font-family: Consolas\"> bd<span style=\"color: gray\">.database_id <span style=\"color: gray\">= <span style=\"color: fuchsia\">DB_ID<span style=\"color: gray\">(<span style=\"color: red\">&#8216;AdventureWorks2012&#8217;<span style=\"color: gray\">)<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: gray\">AND bd<span style=\"color: gray\">.is_in_bpool_extension <span style=\"color: gray\">= 1<\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <span style=\"color: gray\">AND da<span style=\"color: gray\">.page_type <span style=\"color: gray\">IS <span style=\"color: gray\">NULL<\/span><\/span><\/span><\/span><\/span><\/div>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_23_-_3_-_bigTransactionHistory_rs1_pages.jpg\" alt=\"blog_23_-_3_-_bigTransactionHistory_rs1_pages\" width=\"224\" height=\"230\" \/><\/p>\n<p>I chose the first page 195426 and I finally corrupted it<\/p>\n<p style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">DBCC<span style=\"font-size: 9.5pt;font-family: Consolas\"> WRITEPAGE<span style=\"color: gray\">(AdventureWorks2012<span style=\"color: gray\">, 1<span style=\"color: gray\">, 195426<span style=\"color: gray\">, 0<span style=\"color: gray\">, 2<span style=\"color: gray\">, 0x0000<span style=\"color: gray\">);<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/p>\n<p style=\"margin-bottom: 0.0001pt;line-height: normal\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_23_-_4_-_corrupt_page.jpg\" alt=\"blog_23_-_4_-_corrupt_page\" width=\"600\" height=\"113\" \/><\/p>\n<p>Then, let&#8217;s take a look at the page with ID 195426 to see if it still remains in the BPE:<\/p>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">SELECT<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 page_id<span style=\"color: gray\">, <\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 is_in_bpool_extension<span style=\"color: gray\">, <\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 is_modified<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">FROM<span style=\"font-size: 9.5pt;font-family: Consolas\"> <span style=\"color: green\">sys<span style=\"color: gray\">.<span style=\"color: green\">dm_os_buffer_descriptors <span style=\"color: blue\">AS bd<\/span><\/span><\/span><\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">WHERE<span style=\"font-size: 9.5pt;font-family: Consolas\"> bd<span style=\"color: gray\">.page_id <span style=\"color: gray\">= 195426<\/span><\/span><\/span><\/span><\/div>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_23_-_5_-_check_location_page_after_corruption.jpg\" alt=\"blog_23_-_5_-_check_location_page_after_corruption\" width=\"287\" height=\"42\" \/><\/p>\n<p>Ok (fortunately) not \ud83d\ude42 However we can notice that the page has not been tagged as &#8220;modified&#8221; by looking at the sys.dm_os_buffer_descriptors DMV. Hum my guess at this point is that using DBCC WRITEPAGE is not a classic process for modifying a page but in fact the process used by the BPE extension is not what we can imagine at the first sight.<\/p>\n<p>Indeed, moving a page from BPE is almost orthogonal to the dirty nature of a page because the buffer manager will move a page into the memory because it becomes hot due to the access attempt. Modifying a page needs first access to the page (a particular thanks to Evgeny Krivosheev &#8211; SQL Server Program Manager &#8211; for this clarification).<\/p>\n<p>We can verify if the page with ID 195426 is really corrupted (remember this page belongs to the bigTransactionHistory_rs1 table):<\/p>\n<p style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">DBCC<span style=\"font-size: 9.5pt;font-family: Consolas\"> CHECKTABLE<span style=\"color: gray\">(bigTransactionHistory_rs1<span style=\"color: gray\">) <span style=\"color: blue\">WITH <span style=\"color: blue\">NO_INFOMSGS<span style=\"color: gray\">, <span style=\"color: blue\">ALL_ERRORMSGS<span style=\"color: gray\">, <span style=\"color: blue\">TABLERESULTS<span style=\"color: gray\">;<\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/span><\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_23_-_6_-_check_corruption_for_data_page.jpg\" alt=\"blog_23_-_6_-_check_corruption_for_data_page\" width=\"616\" height=\"116\" \/><\/p>\n<p>Note some other corruptions but in this context it doesn&#8217;t matter because I performed some other corruption tests in this database \ud83d\ude42<br \/>\nSo the next question could be the following: Do you think a corrupted page can be moved from the buffer pool into the memory? \u2026 The following test will give us the response:<\/p>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">CHECKPOINT<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">GO<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">DBCC<span style=\"font-size: 9.5pt;font-family: Consolas\"> DROPCLEANBUFFERS<span style=\"color: gray\">;<\/span><\/span><\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: blue\">GO<\/span><\/div>\n<div style=\"margin-bottom: 0.0001pt;line-height: normal;background: none repeat scroll 0% 0% #d9d9d9\"><span style=\"font-size: 9.5pt;font-family: Consolas;color: green\">&#8212; Perform queries in order to full fill the buffer cache and its extension<\/span><\/div>\n<p>We flush dirty pages to disk and the we clean the buffer cache. Afterward, I perform some others queries in order to populate the buffer cache (memory and BPE) with database pages. At this point we have only clean pages. A quick look at the buffer cache with the sys.dm_os_buffer_descriptor DMV give us the following picture (I recorded into a temporary table each time I found out the page ID 195426 into the buffer cache (either memory or BPE):<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_23_-_7_-_find_out_a_corrupted_page_in_the_BPE.jpg\" alt=\"blog_23_-_7_-_find_out_a_corrupted_page_in_the_BPE\" width=\"297\" height=\"185\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>We can notice that a corrupted page can be part of the buffer pool extension and this is an expected behavior because the page ID 195426 is not dirty or modified but corrupted only at this point.<\/p>\n<p>Enjoy!<\/p>\n<p><span style=\"float: none;background-color: #ffffff;color: #333333;cursor: text;font-family: Georgia,'Times New Roman','Bitstream Charter',Times,serif;font-size: 16px;font-style: normal;font-variant: normal;font-weight: 400;letter-spacing: normal;text-align: left;text-decoration: none;text-indent: 0px;text-transform: none\">By David Barbarin<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I had the opportunity to attend Paul Randal\u2019s session on advanced data recovery techniques at the Pass Summit. During this session one attendee asked Paul if a page that has just been corrupted can remain in the buffer pool extension (BPE). As you probably know, BPE only deals with clean pages. Paul hesitated a lot [&hellip;]<\/p>\n","protected":false},"author":26,"featured_media":4125,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[198],"tags":[440,269,49,506,52],"type_dbi":[],"class_list":["post-4124","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-database-management","tag-buffer-pool-extension","tag-corruption","tag-microsoft","tag-pass","tag-sql-server-2014"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>SQL Server 2014: buffer pool extension &amp; corruption - dbi Blog<\/title>\n<meta name=\"description\" content=\"I had the opportunity to attend Paul Randal\u2019s session on advanced data recovery techniques at the Pass Summit. During this session one attendee asked Paul if a page that has just been corrupted can remain in the buffer pool extension (BPE).\" \/>\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.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SQL Server 2014: buffer pool extension &amp; corruption\" \/>\n<meta property=\"og:description\" content=\"I had the opportunity to attend Paul Randal\u2019s session on advanced data recovery techniques at the Pass Summit. During this session one attendee asked Paul if a page that has just been corrupted can remain in the buffer pool extension (BPE).\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2014-11-19T06:49:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_23_-_1_-_adventureworks2012_size.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"362\" \/>\n\t<meta property=\"og:image:height\" content=\"84\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Microsoft Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Microsoft Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/\"},\"author\":{\"name\":\"Microsoft Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4\"},\"headline\":\"SQL Server 2014: buffer pool extension &amp; corruption\",\"datePublished\":\"2014-11-19T06:49:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/\"},\"wordCount\":852,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_23_-_1_-_adventureworks2012_size.jpg\",\"keywords\":[\"buffer pool extension\",\"Corruption\",\"Microsoft\",\"Pass\",\"SQL Server 2014\"],\"articleSection\":[\"Database management\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/\",\"name\":\"SQL Server 2014: buffer pool extension &amp; corruption - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_23_-_1_-_adventureworks2012_size.jpg\",\"datePublished\":\"2014-11-19T06:49:00+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4\"},\"description\":\"I had the opportunity to attend Paul Randal\u2019s session on advanced data recovery techniques at the Pass Summit. During this session one attendee asked Paul if a page that has just been corrupted can remain in the buffer pool extension (BPE).\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/#primaryimage\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_23_-_1_-_adventureworks2012_size.jpg\",\"contentUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_23_-_1_-_adventureworks2012_size.jpg\",\"width\":362,\"height\":84},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SQL Server 2014: buffer pool extension &amp; corruption\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4\",\"name\":\"Microsoft Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g\",\"caption\":\"Microsoft Team\"},\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/microsoft-team\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"SQL Server 2014: buffer pool extension &amp; corruption - dbi Blog","description":"I had the opportunity to attend Paul Randal\u2019s session on advanced data recovery techniques at the Pass Summit. During this session one attendee asked Paul if a page that has just been corrupted can remain in the buffer pool extension (BPE).","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.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/","og_locale":"en_US","og_type":"article","og_title":"SQL Server 2014: buffer pool extension &amp; corruption","og_description":"I had the opportunity to attend Paul Randal\u2019s session on advanced data recovery techniques at the Pass Summit. During this session one attendee asked Paul if a page that has just been corrupted can remain in the buffer pool extension (BPE).","og_url":"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/","og_site_name":"dbi Blog","article_published_time":"2014-11-19T06:49:00+00:00","og_image":[{"width":362,"height":84,"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_23_-_1_-_adventureworks2012_size.jpg","type":"image\/jpeg"}],"author":"Microsoft Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Microsoft Team","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/"},"author":{"name":"Microsoft Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4"},"headline":"SQL Server 2014: buffer pool extension &amp; corruption","datePublished":"2014-11-19T06:49:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/"},"wordCount":852,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_23_-_1_-_adventureworks2012_size.jpg","keywords":["buffer pool extension","Corruption","Microsoft","Pass","SQL Server 2014"],"articleSection":["Database management"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/","url":"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/","name":"SQL Server 2014: buffer pool extension &amp; corruption - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_23_-_1_-_adventureworks2012_size.jpg","datePublished":"2014-11-19T06:49:00+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4"},"description":"I had the opportunity to attend Paul Randal\u2019s session on advanced data recovery techniques at the Pass Summit. During this session one attendee asked Paul if a page that has just been corrupted can remain in the buffer pool extension (BPE).","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_23_-_1_-_adventureworks2012_size.jpg","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog_23_-_1_-_adventureworks2012_size.jpg","width":362,"height":84},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2014-buffer-pool-extension-a-corruption\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"SQL Server 2014: buffer pool extension &amp; corruption"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4","name":"Microsoft Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g","caption":"Microsoft Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/microsoft-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/4124","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/26"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=4124"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/4124\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media\/4125"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=4124"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=4124"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=4124"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=4124"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}