{"id":479,"date":"2012-08-21T13:46:12","date_gmt":"2012-08-21T13:46:12","guid":{"rendered":"\/blogs\/glenn\/post\/Memory-Error-Recovery-in-SQL-Server-2012.aspx"},"modified":"2018-10-09T09:06:30","modified_gmt":"2018-10-09T16:06:30","slug":"memory-error-recovery-in-sql-server-2012","status":"publish","type":"post","link":"https:\/\/www.sqlskills.com\/blogs\/glenn\/memory-error-recovery-in-sql-server-2012\/","title":{"rendered":"Memory Error Recovery in SQL Server 2012"},"content":{"rendered":"<p>One under publicized new feature in SQL Server 2012 is called <a href=\"https:\/\/blogs.msdn.microsoft.com\/b\/sqlcat\/\">Memory Error Recovery<\/a>. This feature allows SQL Server 2012 to repair clean pages in the buffer pool by reading the pages again from disk. These \u201csoft\u201d errors are caused by electrical or magnetic interference inside a server that cause single bits inside of DRAM chips to flip to an opposite state. The main cause of this is background radiation from cosmic rays.<\/p>\n<p>There was a presentation at TechEd 2012, called &#8220;The Path to Continuous Availability with Windows Server 2012&#8221; that talked about this being a new feature in Windows Server 2012, which implies that you will need to be running SQL Server 2012 on top of Windows Server 2012 to get this functionality.<\/p>\n<p>In Windows Server 2012, the feature is called Application Assisted Memory Error Recovery, and it requires the application (such as SQL Server 2012) to register for notifications of bad memory page events using CreateMemoryResourceNotification(). It also requires SQL Server 2012 to use the API QueryWorkingSetEx() to scan the memory for bad pages.<\/p>\n<p>It is likely an Enterprise Edition-only feature, but I have not confirmed this assumption yet.<\/p>\n<p>You will also need <a href=\"https:\/\/en.wikipedia.org\/wiki\/ECC_RAM\">ECC RAM<\/a>, and a processor with a memory controller that supports this. I don\u2019t have a list of processors that support this feature yet, but I am working on it. If I had to guess, I would assume that Intel Nehalem and newer, and AMD Magny-Cours and newer will probably be required.<\/p>\n<p>If you have the hardware support, along with both Windows Server 2012 and SQL Server 2012, you will see a message like this in your SQL Server error log:<\/p>\n<blockquote><p>Machine supports memory error recovery. SQL memory protection is enabled to recover from memory corruption.<\/p><\/blockquote>\n<p>There are a few prerequisites that you must satisfy, but this is still an interesting feature. It is one more argument that you can use when you are trying to make the case to upgrade to SQL Server 2012, on a new server with the latest version of Windows Server.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>One under publicized new feature in SQL Server 2012 is called Memory Error Recovery. This feature allows SQL Server 2012 to repair clean pages in the buffer pool by reading the pages again from disk. These \u201csoft\u201d errors are caused by electrical or magnetic interference inside a server that cause single bits inside of DRAM [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17,19,24,31,38,39],"tags":[80,323,329],"class_list":["post-479","post","type-post","status-publish","format-standard","hentry","category-sql-server-hardware","category-sql-server-high-availability","category-processors","category-sql-server-2012","category-westmere-ex","category-windows-server-2012","tag-memory-error-recovery","tag-sql-server-2012","tag-windows-server-2012"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Memory Error Recovery in SQL Server 2012 - Glenn Berry<\/title>\n<meta name=\"description\" content=\"Memory Error Recovery in SQL Server 2012. New feature in SQL Server 2012 Enterprise Edition\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.sqlskills.com\/blogs\/glenn\/memory-error-recovery-in-sql-server-2012\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Memory Error Recovery in SQL Server 2012 - Glenn Berry\" \/>\n<meta property=\"og:description\" content=\"Memory Error Recovery in SQL Server 2012. New feature in SQL Server 2012 Enterprise Edition\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sqlskills.com\/blogs\/glenn\/memory-error-recovery-in-sql-server-2012\/\" \/>\n<meta property=\"og:site_name\" content=\"Glenn Berry\" \/>\n<meta property=\"article:published_time\" content=\"2012-08-21T13:46:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-10-09T16:06:30+00:00\" \/>\n<meta name=\"author\" content=\"Glenn Berry\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Glenn Berry\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/memory-error-recovery-in-sql-server-2012\/\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/memory-error-recovery-in-sql-server-2012\/\",\"name\":\"Memory Error Recovery in SQL Server 2012 - Glenn Berry\",\"isPartOf\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/#website\"},\"datePublished\":\"2012-08-21T13:46:12+00:00\",\"dateModified\":\"2018-10-09T16:06:30+00:00\",\"author\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/#\/schema\/person\/57a8972435106bac7970692fcf5edfa7\"},\"description\":\"Memory Error Recovery in SQL Server 2012. New feature in SQL Server 2012 Enterprise Edition\",\"breadcrumb\":{\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/memory-error-recovery-in-sql-server-2012\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sqlskills.com\/blogs\/glenn\/memory-error-recovery-in-sql-server-2012\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/memory-error-recovery-in-sql-server-2012\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Memory Error Recovery in SQL Server 2012\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/#website\",\"url\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/\",\"name\":\"Glenn Berry\",\"description\":\"Semi-random musings about SQL Server performance\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/#\/schema\/person\/57a8972435106bac7970692fcf5edfa7\",\"name\":\"Glenn Berry\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/64bdac8830f25f2f8cc780f8a1286c66ff1182218009271e7a953639596f7e25?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/64bdac8830f25f2f8cc780f8a1286c66ff1182218009271e7a953639596f7e25?s=96&d=mm&r=g\",\"caption\":\"Glenn Berry\"},\"sameAs\":[\"https:\/\/www.sqlskills.com\/blogs\/glenn\/\"],\"url\":\"https:\/\/www.sqlskills.com\/blogs\/glenn\/author\/glenn\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Memory Error Recovery in SQL Server 2012 - Glenn Berry","description":"Memory Error Recovery in SQL Server 2012. New feature in SQL Server 2012 Enterprise Edition","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.sqlskills.com\/blogs\/glenn\/memory-error-recovery-in-sql-server-2012\/","og_locale":"en_US","og_type":"article","og_title":"Memory Error Recovery in SQL Server 2012 - Glenn Berry","og_description":"Memory Error Recovery in SQL Server 2012. New feature in SQL Server 2012 Enterprise Edition","og_url":"https:\/\/www.sqlskills.com\/blogs\/glenn\/memory-error-recovery-in-sql-server-2012\/","og_site_name":"Glenn Berry","article_published_time":"2012-08-21T13:46:12+00:00","article_modified_time":"2018-10-09T16:06:30+00:00","author":"Glenn Berry","twitter_misc":{"Written by":"Glenn Berry","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.sqlskills.com\/blogs\/glenn\/memory-error-recovery-in-sql-server-2012\/","url":"https:\/\/www.sqlskills.com\/blogs\/glenn\/memory-error-recovery-in-sql-server-2012\/","name":"Memory Error Recovery in SQL Server 2012 - Glenn Berry","isPartOf":{"@id":"https:\/\/www.sqlskills.com\/blogs\/glenn\/#website"},"datePublished":"2012-08-21T13:46:12+00:00","dateModified":"2018-10-09T16:06:30+00:00","author":{"@id":"https:\/\/www.sqlskills.com\/blogs\/glenn\/#\/schema\/person\/57a8972435106bac7970692fcf5edfa7"},"description":"Memory Error Recovery in SQL Server 2012. New feature in SQL Server 2012 Enterprise Edition","breadcrumb":{"@id":"https:\/\/www.sqlskills.com\/blogs\/glenn\/memory-error-recovery-in-sql-server-2012\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sqlskills.com\/blogs\/glenn\/memory-error-recovery-in-sql-server-2012\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.sqlskills.com\/blogs\/glenn\/memory-error-recovery-in-sql-server-2012\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sqlskills.com\/blogs\/glenn\/"},{"@type":"ListItem","position":2,"name":"Memory Error Recovery in SQL Server 2012"}]},{"@type":"WebSite","@id":"https:\/\/www.sqlskills.com\/blogs\/glenn\/#website","url":"https:\/\/www.sqlskills.com\/blogs\/glenn\/","name":"Glenn Berry","description":"Semi-random musings about SQL Server performance","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sqlskills.com\/blogs\/glenn\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.sqlskills.com\/blogs\/glenn\/#\/schema\/person\/57a8972435106bac7970692fcf5edfa7","name":"Glenn Berry","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sqlskills.com\/blogs\/glenn\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/64bdac8830f25f2f8cc780f8a1286c66ff1182218009271e7a953639596f7e25?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/64bdac8830f25f2f8cc780f8a1286c66ff1182218009271e7a953639596f7e25?s=96&d=mm&r=g","caption":"Glenn Berry"},"sameAs":["https:\/\/www.sqlskills.com\/blogs\/glenn\/"],"url":"https:\/\/www.sqlskills.com\/blogs\/glenn\/author\/glenn\/"}]}},"_links":{"self":[{"href":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-json\/wp\/v2\/posts\/479","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-json\/wp\/v2\/comments?post=479"}],"version-history":[{"count":0,"href":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-json\/wp\/v2\/posts\/479\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-json\/wp\/v2\/media?parent=479"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-json\/wp\/v2\/categories?post=479"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sqlskills.com\/blogs\/glenn\/wp-json\/wp\/v2\/tags?post=479"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}