{"id":10233,"date":"2017-06-05T18:19:20","date_gmt":"2017-06-05T16:19:20","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/"},"modified":"2017-06-05T18:19:20","modified_gmt":"2017-06-05T16:19:20","slug":"sql-server-2017-high-availability-and-resumable-online-indexes","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/","title":{"rendered":"SQL Server 2017 high availability and Resumable Online Indexes"},"content":{"rendered":"<p>Ensuring data availability is an important part of the high availability design. SQL Server AlwaysOn features including SQL Server FCIs and availability groups address some aspects of the problem but we may also rely on the online operations features to maximize data availability. Indeed, for some high-critical workloads, offline operations during the maintenance phase are not permitted and may contribute to call into question the entire architecture.<\/p>\n<p>But have you ever faced an outage from your primary replica leading to a failover to the secondary replica during the database maintenance timeline? Yes, your architecture is designed to behave in this way for sure but let\u2019s say you were in the middle of a rebuild index operation concerning a big table and everything is rolled back now. In this case, you will probably have to wait the next windows maintenance time to initiate another rebuild operation, but from the\u00a0start \u2026<\/p>\n<p>Fortunately, the new <strong>Resumable Online Indexes<\/strong> feature from SQL Server 2017 will come to the rescue and seems promising to address such situation. Some limitations are still around and well-documented in the <a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/t-sql\/statements\/alter-index-transact-sql\" target=\"_blank\" rel=\"noopener noreferrer\">Microsoft documentation<\/a> but I guess Microsoft will work hard to remove them in the future.<\/p>\n<p>Let\u2019s play a little bit with the <em>Resumable Online Indexes<\/em> on my AG environment that includes two replicas with cluster_type = NONE meaning we don\u2019t rely on an underlying orchestrator to handle automatic failover of the AG resources. In this context, it will be sufficient to demonstrate how Resumable Online Indexes work.<\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-01-resumable-onlline-index-scenario_-e1496685619194.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-17012\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-01-resumable-onlline-index-scenario_-e1496685619194.jpg\" alt=\"blog 123 - 01 - resumable onlline index - scenario_\" width=\"400\" height=\"364\" \/><\/a><\/p>\n<p><span style=\"color: #000000;font-family: Calibri\">My initial configuration is as follows:<\/span><\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-02-resumable-onlline-index-ag-win-e1496685423690.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-17011\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-02-resumable-onlline-index-ag-win-e1496685423690.jpg\" alt=\"blog 123 - 02 - resumable onlline index - ag win\" width=\"800\" height=\"188\" \/><\/a><\/p>\n<p>I used the AdventureWorks2016 database with a <em>bigTransactionHistory<\/em> table generated from the <a href=\"http:\/\/sqlblog.com\/blogs\/adam_machanic\/archive\/2011\/10\/17\/thinking-big-adventure.aspx\" target=\"_blank\" rel=\"noopener noreferrer\">Adam Machanic<\/a> script.<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">select \n\to.name as table_name,\n\ti.name as index_name,\n\tp.index_id,\n\tau.type_desc,\n\tau.used_pages,\n\tp.rows\nfrom \n\tsys.allocation_units as au\njoin \n\tsys.partitions as p on au.container_id = p.hobt_id\njoin \n\tsys.objects as o on o.object_id = p.object_id\nleft join \n\tsys.indexes as i on i.object_id = p.object_id\n\t\t\t\t\t\tand i.index_id = p.index_id\nwhere p.object_id = object_id('bigTransactionHistory');<\/pre>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-03-resumable-onlline-index-bigTransactionHistory.jpg\">\u00a0<\/a><\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-03-resumable-onlline-index-bigTransactionHistory.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-17013\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-03-resumable-onlline-index-bigTransactionHistory.jpg\" alt=\"blog 123 - 03 - resumable onlline index - bigTransactionHistory\" width=\"591\" height=\"43\" \/><\/a><\/p>\n<p><span style=\"color: #000000;font-family: Calibri\">Let\u2019s then initiate a rebuild of the <em>pk_bigTransactionHistory<\/em> index by using the new <strong>RESUMABLE<\/strong> option as follows:<\/span><\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">ALTER INDEX pk_bigTransactionHistory \nON bigTransactionHistory \nREBUILD\nWITH (ONLINE = ON, RESUMABLE = ON);\nGO<\/pre>\n<p>&nbsp;<\/p>\n<p>By using this option, I made the rebuild phase \u201cresumable\u201d and I\u2019m now able to perform additional actions like pausing or aborting the index rebuild operation. I may also use MAX_DURATION parameter to setup the duration (in minutes) of the operation before to pause it. We may easily identify resumable sessions which are running on the SQL Server instance by using the <em>sys.dm_exec_requests<\/em> DMV and new <em>is_resumable<\/em> column.<\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-04-resumable-onlline-index-sys_dm_exec_requests_is_resumable.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-17015\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-04-resumable-onlline-index-sys_dm_exec_requests_is_resumable.jpg\" alt=\"blog 123 - 04 - resumable onlline index - sys_dm_exec_requests_is_resumable\" width=\"1224\" height=\"60\" \/><\/a><\/p>\n<p>Let\u2019s initiate a manual failover while the index is rebuilt by SQL Server on the primary replica. Then during the outage of the first primary replica, I faced the following error message:<\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-05-resumable-onlline-index-error-during-failover.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-17017\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-05-resumable-onlline-index-error-during-failover.jpg\" alt=\"blog 123 - 05 - resumable onlline index - error during failover\" width=\"1033\" height=\"179\" \/><\/a><\/p>\n<p><span style=\"color: #000000;font-family: Calibri\">A typical error message regarding the situation \u2026 but the most interesting part comes now. If we go through the new sys.index_resumable_operations DMV, we may notice our rebuild index operation is paused.<\/span><\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">SELECT \n\tiro.last_max_dop_used,\n\tiro.sql_text,\n\tiro.start_time,\n\tiro.last_pause_time,\n\tiro.total_execution_time,\n\tiro.page_count, \n\tiro.percent_complete\nFROM  \n\tsys.index_resumable_operations as iro\nJOIN\n\tsys.objects AS o ON o.object_id = iro.object_id<\/pre>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-06-resumable-onlline-index-resume-op-dmv.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-17018\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-06-resumable-onlline-index-resume-op-dmv.jpg\" alt=\"blog 123 - 06 - resumable onlline index - resume op dmv\" width=\"995\" height=\"44\" \/><\/a><\/p>\n<p>From the above output, we may extract interesting column values:<\/p>\n<ul>\n<li>percent_complete : the percent complete value at the moment of pausing the operation<\/li>\n<li>page_count = size of the second index structure at the moment of pausing the operation<\/li>\n<li>last_pause_time = it is self-explanatory<\/li>\n<li>last_max_dop_used = max dop value used during the last rebuild operation. It is interesting to notice we may change this value for the same operation between pausing sessions.<\/li>\n<\/ul>\n<p>Before resuming the index operation, let\u2019s have a brief look at the transaction log used space. I asked myself some questions about the transaction behavior when the index operation is paused: Does a pause state have an impact on the transaction log? Do the VLFs touched by this operation remain active until the index is completely rebuilt? Let\u2019s answer to this question by the following test.<\/p>\n<p>A first look at the transaction log space used says that the transaction log contains records that must be backed-up.<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">use AdventureWorks2016;\n\nselect \n\ttotal_log_size_in_bytes \/ 1024 \/ 1024 \/ 1024 as total_log_size_GB,\n\tused_log_space_in_bytes \/ 1024 \/ 1024  as used_log_space_MB,\n\tlog_space_in_bytes_since_last_backup \/ 1024 \/ 1024 as log_space_MB_since_last_backup,\n\tused_log_space_in_percent\nfrom sys.dm_db_log_space_usage;\ngo<\/pre>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-07-resumable-onlline-index-tlog.jpg\">\u00a0<\/a><\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-07-resumable-onlline-index-tlog.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-17019\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-07-resumable-onlline-index-tlog.jpg\" alt=\"blog 123 - 07 - resumable onlline index - tlog\" width=\"590\" height=\"92\" \/><\/a><\/p>\n<p><span style=\"color: #000000;font-family: Calibri\">According to the previous result, let\u2019s perform a backup log \u2026<\/span><\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">backup log AdventureWorks2016\nto disk = 'NUL' \nwith stats = 10;\ngo<\/pre>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-08-resumable-onlline-index-tlog.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-17020\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-08-resumable-onlline-index-tlog.jpg\" alt=\"blog 123 - 08 - resumable onlline index - tlog\" width=\"590\" height=\"98\" \/><\/a><\/p>\n<p>Well, pausing an index operation doesn\u2019t rely on a remaining active transaction that may impact the transaction log retention but after a few thoughts, it seems to be obvious it works in this way.<\/p>\n<p>What about storage? The resumable option is available only with online index operations meaning SQL Server must maintain the corresponding hidden structures as long as it is necessary to rebuild the underlying index. According to the <a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/t-sql\/statements\/alter-index-transact-sql\" target=\"_blank\" rel=\"noopener noreferrer\">BOL<\/a>:<\/p>\n<p><strong><em>No extra resources are required for resumable index rebuild except for\u25e6Additional space required to keep the index being built, including the time when index is being paused<\/em><\/strong><\/p>\n<p>Obviously, maintaining such structure may have a huge impact on your workload regarding your context. Out of curiosity, I went through the system view to see those hidden structures as follows:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">select \n\to.name as table_name,\n\ti.name as index_name,\n\tp.index_id,\n\tau.type_desc,\n\tSUM(au.used_pages) as total_used_pages,\n\tSUM(p.rows) as total_rows,\n\tCOUNT(*) as nb_partitions\nfrom \n\tsys.allocation_units as au\njoin \n\tsys.partitions as p on au.container_id = p.hobt_id\njoin \n\tsys.objects as o on o.object_id = p.object_id\nleft join \n\tsys.indexes as i on i.object_id = p.object_id\n\t\t\t\t\t\tand i.index_id = p.index_id\nwhere \n\tp.object_id = object_id('bigTransactionHistory')\ngroup by \n\to.name, i.name, p.index_id, au.type_desc\norder by \n\to.name, p.index_id;\ngo<\/pre>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-09-resumable-onlline-index-hidden-index-structure.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-17021\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-09-resumable-onlline-index-hidden-index-structure.jpg\" alt=\"blog 123 - 09 - resumable onlline index - hidden index structure\" width=\"684\" height=\"81\" \/><\/a><\/p>\n<p>In regard to the second record, a simple math \u2013 9261 * 100. \/ 190150 &#8211; confirms the structure is only 4.8 percent in size of the underlying cluster index. We may retrieve this result from the first output of the new <em>sys.index_resumble_index<\/em> system view. For the third one, my guess is it corresponds to the temporary mapping index used by SQL Server to determine which records to delete in the new indexes that are being built when rows in the underlying table are updated or deleted.<\/p>\n<p>Here is an execution plan sample of an update query against the <em>bigTransactionHistory <\/em>table. We may notice DELETE \/ UPDATE operations to a \u201chidden\u201d nonclustered index related to this special index highlighted in red.<\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-10-resumable-onlline-index-execution-plan-e1496686308821.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-17022\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-10-resumable-onlline-index-execution-plan-e1496686308821.jpg\" alt=\"blog 123 - 10 - resumable onlline index - execution plan\" width=\"900\" height=\"179\" \/><\/a><\/p>\n<p><span style=\"font-family: Calibri\"><span style=\"color: #000000\">Go ahead and let\u2019s resume the pending index operation by using the new RESUME option. We may also add the MAX_DURATION option to guarantee the rebuild operation will go back to a pause state if we consider <\/span>that <span style=\"color: #000000\">reaching the maintenance windows limit cannot hurt the daily business workload in terms of resource for instance. An option we will definitely consider to add <\/span>it <span style=\"color: #000000\">with the next version of our <\/span><\/span><a href=\"https:\/\/www.dbi-services.com\/offering\/products\/dmk-management-kit\/\" target=\"_blank\" rel=\"noopener noreferrer\"><span style=\"color: #0563c1;font-family: Calibri\">DMK maintenance tool<\/span><\/a><span style=\"color: #000000;font-family: Calibri\"> for SQL Server.<\/span><\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">ALTER INDEX pk_bigTransactionHistory \nON bigTransactionHistory RESUME WITH (MAX_DURATION = 120 MINUTES);\nGO<\/pre>\n<p><span style=\"color: #000000;font-family: Calibri\">In this blog, we just have surfaced this new maintenance option and its capabilities. Other articles will probably come in the future. <\/span><\/p>\n<p><span style=\"color: #000000;font-family: Calibri\">Stay tuned! <\/span><\/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>Ensuring data availability is an important part of the high availability design. SQL Server AlwaysOn features including SQL Server FCIs and availability groups address some aspects of the problem but we may also rely on the online operations features to maximize data availability. Indeed, for some high-critical workloads, offline operations during the maintenance phase are [&hellip;]<\/p>\n","protected":false},"author":26,"featured_media":10235,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[229],"tags":[1119,84,1120,1077],"type_dbi":[],"class_list":["post-10233","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-database-administration-monitoring","tag-database-maintenance","tag-high-availability","tag-resumable-online-index","tag-sql-server-2017"],"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 2017 high availability and Resumable Online Indexes<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SQL Server 2017 high availability and Resumable Online Indexes\" \/>\n<meta property=\"og:description\" content=\"Ensuring data availability is an important part of the high availability design. SQL Server AlwaysOn features including SQL Server FCIs and availability groups address some aspects of the problem but we may also rely on the online operations features to maximize data availability. Indeed, for some high-critical workloads, offline operations during the maintenance phase are [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-06-05T16:19:20+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-02-resumable-onlline-index-ag-win-e1496685423690.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"188\" \/>\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=\"6 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-2017-high-availability-and-resumable-online-indexes\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/\"},\"author\":{\"name\":\"Microsoft Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4\"},\"headline\":\"SQL Server 2017 high availability and Resumable Online Indexes\",\"datePublished\":\"2017-06-05T16:19:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/\"},\"wordCount\":967,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-02-resumable-onlline-index-ag-win-e1496685423690.jpg\",\"keywords\":[\"database maintenance\",\"High availability\",\"resumable online index\",\"SQL Server 2017\"],\"articleSection\":[\"Database Administration &amp; Monitoring\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/\",\"name\":\"SQL Server 2017 high availability and Resumable Online Indexes\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-02-resumable-onlline-index-ag-win-e1496685423690.jpg\",\"datePublished\":\"2017-06-05T16:19:20+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/#primaryimage\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-02-resumable-onlline-index-ag-win-e1496685423690.jpg\",\"contentUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-02-resumable-onlline-index-ag-win-e1496685423690.jpg\",\"width\":800,\"height\":188},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SQL Server 2017 high availability and Resumable Online Indexes\"}]},{\"@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 2017 high availability and Resumable Online Indexes","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-2017-high-availability-and-resumable-online-indexes\/","og_locale":"en_US","og_type":"article","og_title":"SQL Server 2017 high availability and Resumable Online Indexes","og_description":"Ensuring data availability is an important part of the high availability design. SQL Server AlwaysOn features including SQL Server FCIs and availability groups address some aspects of the problem but we may also rely on the online operations features to maximize data availability. Indeed, for some high-critical workloads, offline operations during the maintenance phase are [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/","og_site_name":"dbi Blog","article_published_time":"2017-06-05T16:19:20+00:00","og_image":[{"width":800,"height":188,"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-02-resumable-onlline-index-ag-win-e1496685423690.jpg","type":"image\/jpeg"}],"author":"Microsoft Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Microsoft Team","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/"},"author":{"name":"Microsoft Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4"},"headline":"SQL Server 2017 high availability and Resumable Online Indexes","datePublished":"2017-06-05T16:19:20+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/"},"wordCount":967,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-02-resumable-onlline-index-ag-win-e1496685423690.jpg","keywords":["database maintenance","High availability","resumable online index","SQL Server 2017"],"articleSection":["Database Administration &amp; Monitoring"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/","url":"https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/","name":"SQL Server 2017 high availability and Resumable Online Indexes","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-02-resumable-onlline-index-ag-win-e1496685423690.jpg","datePublished":"2017-06-05T16:19:20+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-02-resumable-onlline-index-ag-win-e1496685423690.jpg","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-123-02-resumable-onlline-index-ag-win-e1496685423690.jpg","width":800,"height":188},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-2017-high-availability-and-resumable-online-indexes\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"SQL Server 2017 high availability and Resumable Online Indexes"}]},{"@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\/10233","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=10233"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/10233\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media\/10235"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=10233"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=10233"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=10233"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=10233"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}