{"id":5556,"date":"2015-09-15T18:36:25","date_gmt":"2015-09-15T16:36:25","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool\/"},"modified":"2015-09-15T18:36:25","modified_gmt":"2015-09-15T16:36:25","slug":"sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool\/","title":{"rendered":"SQL Server AlwaysOn: number of databases and the hadr worker pool"},"content":{"rendered":"<p>Often, when I\u2019m in charge to implement an SQL Server AlwaysOn infrastructure with availability groups, customers ask me if it exists some best practices and recommendations about the maximum number of databases in an availability group planning. In fact, we have to keep in mind the relation between databases and the SQL Server worker pool in this architecture. Remember that the SQL Server AlwaysOn and availability group feature is an extension of the SQL Server mirroring and we retrieve the same concept of worker thread usage with a different architecture: Mirroring feature dedicates worker threads for each database compared to SQL Server AlwaysOn that uses requests queue and worker pool (aka HADR pool). Let\u2019s see how the HADR worker pool behaves and its tight relationship with the databases.<\/p>\n<p>First of all, let\u2019s take a look at the Microsoft documentation <a href=\"https:\/\/technet.microsoft.com\/en-us\/library\/ff878487(v=sql.120).aspx#PrerequisitesForAGs\">here<\/a> &#8211; \u201cPrerequisites, Restrictions, and Recommendations for AlwaysOn Availability Groups &#8211; and let\u2019s have a focus on the \u201cThread Usage by Availability Groups\u201d section. After reading the content we can notice that the number of databases is an important part of the minimum hadr pool size calculation among others factors. Others factors are the following:<\/p>\n<ul>\n<li>Number of replicas<\/li>\n<li>Log capture thread<\/li>\n<li>Log send queue thread<\/li>\n<li>Message handler thread<\/li>\n<\/ul>\n<p>Another point to keep in mind is that the size of the HADR worker pool is capped by the &#8220;max worker thread&#8221; parameter as shown below:<\/p>\n<p><strong>Hadr pool size max = max worker threads \u2013 40<\/strong><\/p>\n<p>I also encourage you to read the excellent <a href=\"http:\/\/blogs.msdn.com\/b\/psssql\/archive\/2012\/05\/17\/alwayson-hadron-learning-series-worker-pool-usage-for-hadron-enabled-databases.aspx\">article<\/a> of Bob Dorr that provides a formula to estimate the minimum size of the HADR worker pool. Once again we can notice that the number of databases is still relevant here. As explained by Bob Dorr, the max databases parameter concerns only the \u201cactive\u201d databases where &#8220;active&#8221;.<\/p>\n<p>Let\u2019s perform a quick calculation of the min pool size in the worst case (all databases are active) required on the primary replica with several configurations based on <span style=\"text-decoration: line-through\">the<\/span> Bob Dorr\u2019s formula:<\/p>\n<p><strong>Min Pool Size = Max Databases * (Log Capture Thread + (Log Send Thread * Nb secondary replicas)) + Message Handler Thread<\/strong><\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"201\"><\/td>\n<td width=\"201\">One secondary replica<\/td>\n<td width=\"201\">Two secondary replicas<\/td>\n<\/tr>\n<tr>\n<td width=\"201\">100 databases<\/td>\n<td width=\"201\">100 * 2 + 1 = 201<\/td>\n<td width=\"201\">100 * 3 + 1 = 301<\/td>\n<\/tr>\n<tr>\n<td width=\"201\">500 databases<\/td>\n<td width=\"201\">500 * 2 + 1 = 1001<\/td>\n<td width=\"201\">500 * 3 + 1 = 1501<\/td>\n<\/tr>\n<tr>\n<td width=\"201\">1000 databases<\/td>\n<td width=\"201\">1000 * 2 + 1 = 2001<\/td>\n<td width=\"201\">1000 * 3 + 1 = 3001<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>Then let me show you a more real picture with my lab that includes a SQL Server AlwaysOn 2014 (64 bits) with one availability group and two replicas (basically one primary and one secondary). Each replica is configured with 4 VCPU and no affinity mask, so all the CPU are visible from each replica.<\/p>\n<p>Next, according to the Microsoft documentation <a href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/ms190219.aspx\">here<\/a>, we will be capped by the \u201cmax worker threads\u201d parameters equal to 512 in my case. Thus, the maximum size of the HADR worker pool size will be 512 \u2013 40 = 472.<\/p>\n<p>Now let\u2019s play with different scenarios:<\/p>\n<p><strong>1- First scenario (no availability groups)<\/strong><\/p>\n<p>The first scenario includes an environment with no availability groups. The global number of worker threads is as following:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">select \n\tscheduler_id,current_tasks_count, current_workers_count,active_workers_count,work_queue_count\nfrom sys.dm_os_schedulers\nwhere status = 'VISIBLE ONLINE'\ngo<\/pre>\n<p>This view is not perfect in our case because it includes all the worker threads of the SQL Server instance (hadr worker threads are included to this number). But we will use it as a starting point because there is no activity on my lab and we can admit that the active_workers_count column value will be relatively close than the number of HADR worker threads.<\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-61-1-worker-threads-without-aag.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3858\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-61-1-worker-threads-without-aag.jpg\" alt=\"blog 61- 1 - worker threads without aag\" width=\"585\" height=\"98\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p><strong>2 &#8211; Second scenario (availability group with 100 idle databases)<\/strong><\/p>\n<p>The second scenario consists in adding 100 databases to my newly availability group but there is no activity. Let\u2019s have a look at the global number of worker threads:<\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-61-2-worker-threads-with-aag-100-dbs.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3859\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-61-2-worker-threads-with-aag-100-dbs.jpg\" alt=\"blog 61- 2 - worker threads with aag 100 dbs\" width=\"587\" height=\"93\" \/><\/a><\/p>\n<p>The number of worker threads has increased but this is not a big deal here because the availability databases are not very active. At this point I want to introduce another way to get the number of hadr worker threads by using the extended events and the <em>hadr_thread_pool_worker_start<\/em> event:<\/p>\n<p>The extended event session I used during my test \u2026<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">create event session HadrThreadPoolWorkerStart \non server \nadd event sqlserver.hadr_thread_pool_worker_start \nadd target package0.event_file \n( \n\tset filename = N'E:\\SQLSERVER\\SQL14\\backup\\HadrThreadPoolWorkerStart.xel' \n) \nwith \n( \n\tmax_memory = 4096 KB, \n\tevent_retention_mode = allow_single_event_loss, \n\tmax_dispatch_latency = 30 seconds, \n\tmax_event_size = 0 KB, \n\tmemory_partition_mode = none, \n\ttrack_causality = off, \n\tstartup_state = on \n); \ngo<\/pre>\n<p>\u2026 the data extraction script:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">declare @top_count int; \n\nset @top_count = 100; \n\n;with xe_cte as \n( \n    select \n            object_name, \n            cast(event_data as xml) as event_data \n    from sys.fn_xe_file_target_read_file ( 'E:\\SQLSERVER\\SQL14\\backup\\HadrThreadPoolWorkerStart*.xel', null, null,  null) \n) \n\nselect top (@top_count) \n\t   DATEADD(hh, DATEDIFF(hh, GETUTCDATE(), CURRENT_TIMESTAMP), event_data.value('(\/event\/@timestamp)[1]', 'datetime2')) AS [timestamp],\n       event_data.value('(\/event\/data\/value)[3]', 'int') as active_workers, \n       event_data.value('(\/event\/data\/value)[2]', 'int') as idle_workers, \n       event_data.value('(\/event\/data\/value)[1]', 'int') as worker_limit, \n       event_data.value('(\/event\/data\/value)[4]', 'varchar(5)') as worker_start_success \nfrom xe_cte \norder by [timestamp] desc;<\/pre>\n<p>&#8230; and the result:<\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-61-3-worker-threads-consumption-100-dbs.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3860\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-61-3-worker-threads-consumption-100-dbs.jpg\" alt=\"blog 61- 3 - worker threads consumption 100 dbs\" width=\"707\" height=\"168\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p><strong>3- Third scenario (availability group with 200 idle databases)<\/strong><\/p>\n<p>Let\u2019s add 100 additional databases and let\u2019s have a look at the <em>sys.dm_os_schedulers<\/em> DMV:<\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-61-4-worker-threads-with-aag-200-dbs.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3862\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-61-4-worker-threads-with-aag-200-dbs.jpg\" alt=\"blog 61- 4 - worker threads with aag 200 dbs\" width=\"587\" height=\"99\" \/><\/a><\/p>\n<p>Here, the result from the extended event session:<\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-61-5-worker-threads-consumption-200-dbs.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3863\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-61-5-worker-threads-consumption-200-dbs.jpg\" alt=\"blog 61- 5 - worker threads consumption 200 dbs\" width=\"564\" height=\"115\" \/><\/a><\/p>\n<p>As the previous scenario, the number of active worker threads is still low because there is no activity on the availability databases.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>4- Fourth scenario (availability group with 300 \u201cactive\u201d databases)<\/strong><\/p>\n<p>In this scenario, let\u2019s add 100 additional databases (for a total of 300 databases) but this time we will simulate a workload that will perform randomly on different availability databases.<\/p>\n<p>Let\u2019s take a look at the extended event session to see the number of active workers:<\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-61-6-worker-threads-consumption-300-dbs-activity.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3864\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-61-6-worker-threads-consumption-300-dbs-activity.jpg\" alt=\"blog 61- 6 - worker threads consumption 300 dbs + activity\" width=\"551\" height=\"126\" \/><\/a><\/p>\n<p>As you can notice, the story is not the same. A big increase of the number of HADR active workers (roughly 258) can be noticed here. However, if I refer to Bob Dorr\u2019s formula in his article, we may be disappointed by the number of threads that we get from the extended event session that is theoretically lower than we can expect for a total number of 300 databases (300 *2 + 1 = 601). At this point, my guess is that my workload and my lab configuration didn\u2019t allow to reach out the HADR worker thread starvation scenario but in fact, this is not so important here because the goal was simply to highlight the difference between the number of active worker threads between an idle and active situation.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>5- Fifth scenario : case of a worker threads exhaustion scenario<\/strong><\/p>\n<p>In the previous scenarios, we saw that increasing the number of databases can have an impact on an availability group. From my point of view, facing this situation is probably the worst scenario but we have to take into account in your design regarding your context.<\/p>\n<p>In this scenario, I will voluntary increase the number of databases up to 500 to reach out more quickly the number of allowed active worker threads.<\/p>\n<p>Here\u2019s a picture of such scenario from the extended event session:<\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-61-6-worker-threads-consumption-500-dbs-activity.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3865\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-61-6-worker-threads-consumption-500-dbs-activity.jpg\" alt=\"blog 61- 6 - worker threads consumption 500 dbs + activity\" width=\"555\" height=\"154\" \/><\/a><\/p>\n<p>We are in a situation of HADR worker pool starvation (active workers = work limit = 472). Moreover, the <em>work_start_success<\/em> column value (= false) indicates the SQL Server\u2019s inability to start a new HADR worker.<\/p>\n<p>After a big coffee break, here what I saw from the SQL Server error log. This message indicates an excessive worker thread contention after 15 minutes.<\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-61-6-worker-threads-Exhaustion.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-3866\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-61-6-worker-threads-Exhaustion.jpg\" alt=\"blog 61- 6 - worker threads Exhaustion\" width=\"1024\" height=\"122\" \/><\/a><\/p>\n<p>If you see this error message in your availability groups environment, it\u2019s time to check the number of availability databases. You may face this situation more often than you may think. I can see a lot of customer situations where availability groups are tied to consolidated databases environments. In such situation, adding a database can become a semi-automatic process and the number of HADR worker threads can be out quickly of the control.<\/p>\n<p>What is the solution in this case? Add more worker threads? More processors? Reduce the number of databases? I guess you know what I will answer: it depends on your context.<\/p>\n<p>So, in this blog post we\u2019ve seen that the number of databases in an availability group may be a problem regarding your infrastructure and the number of databases hosted in your availability group. Therefore, this topic can be probably one of your concern if you plan to consolidate a lot of databases in your availability groups. In this case, I would probably recommend to my customers to include the hadr worker pool in his monitoring tool.<\/p>\n<p>Hope this helps.<\/p>\n<p>By David Barbarin<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Often, when I\u2019m in charge to implement an SQL Server AlwaysOn infrastructure with availability groups, customers ask me if it exists some best practices and recommendations about the maximum number of databases in an availability group planning. In fact, we have to keep in mind the relation between databases and the SQL Server worker pool [&hellip;]<\/p>\n","protected":false},"author":26,"featured_media":5565,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[229],"tags":[466,297,84,67,51],"type_dbi":[],"class_list":["post-5556","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-database-administration-monitoring","tag-alwayson","tag-availability-groups","tag-high-availability","tag-performance","tag-sql-server"],"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 AlwaysOn: number of databases and the hadr worker pool<\/title>\n<meta name=\"description\" content=\"SQL Server AlwaysOn: number of databases and the hadr worker pool\" \/>\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-alwayson-number-of-databases-and-the-hadr-worker-pool\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SQL Server AlwaysOn: number of databases and the hadr worker pool\" \/>\n<meta property=\"og:description\" content=\"SQL Server AlwaysOn: number of databases and the hadr worker pool\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-09-15T16:36:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-61-1-worker-threads-without-aag-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"585\" \/>\n\t<meta property=\"og:image:height\" content=\"98\" \/>\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=\"7 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-alwayson-number-of-databases-and-the-hadr-worker-pool\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool\/\"},\"author\":{\"name\":\"Microsoft Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4\"},\"headline\":\"SQL Server AlwaysOn: number of databases and the hadr worker pool\",\"datePublished\":\"2015-09-15T16:36:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool\/\"},\"wordCount\":1240,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-61-1-worker-threads-without-aag-1.jpg\",\"keywords\":[\"AlwaysOn\",\"Availability groups\",\"High availability\",\"Performance\",\"SQL Server\"],\"articleSection\":[\"Database Administration &amp; Monitoring\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool\/\",\"name\":\"SQL AlwaysOn: number of databases and the hadr worker pool\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-61-1-worker-threads-without-aag-1.jpg\",\"datePublished\":\"2015-09-15T16:36:25+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4\"},\"description\":\"SQL Server AlwaysOn: number of databases and the hadr worker pool\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool\/#primaryimage\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-61-1-worker-threads-without-aag-1.jpg\",\"contentUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-61-1-worker-threads-without-aag-1.jpg\",\"width\":585,\"height\":98},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SQL Server AlwaysOn: number of databases and the hadr worker pool\"}]},{\"@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 AlwaysOn: number of databases and the hadr worker pool","description":"SQL Server AlwaysOn: number of databases and the hadr worker pool","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-alwayson-number-of-databases-and-the-hadr-worker-pool\/","og_locale":"en_US","og_type":"article","og_title":"SQL Server AlwaysOn: number of databases and the hadr worker pool","og_description":"SQL Server AlwaysOn: number of databases and the hadr worker pool","og_url":"https:\/\/www.dbi-services.com\/blog\/sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool\/","og_site_name":"dbi Blog","article_published_time":"2015-09-15T16:36:25+00:00","og_image":[{"width":585,"height":98,"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-61-1-worker-threads-without-aag-1.jpg","type":"image\/jpeg"}],"author":"Microsoft Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Microsoft Team","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool\/"},"author":{"name":"Microsoft Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4"},"headline":"SQL Server AlwaysOn: number of databases and the hadr worker pool","datePublished":"2015-09-15T16:36:25+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool\/"},"wordCount":1240,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-61-1-worker-threads-without-aag-1.jpg","keywords":["AlwaysOn","Availability groups","High availability","Performance","SQL Server"],"articleSection":["Database Administration &amp; Monitoring"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool\/","url":"https:\/\/www.dbi-services.com\/blog\/sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool\/","name":"SQL AlwaysOn: number of databases and the hadr worker pool","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-61-1-worker-threads-without-aag-1.jpg","datePublished":"2015-09-15T16:36:25+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4"},"description":"SQL Server AlwaysOn: number of databases and the hadr worker pool","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-61-1-worker-threads-without-aag-1.jpg","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/blog-61-1-worker-threads-without-aag-1.jpg","width":585,"height":98},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/sql-server-alwayson-number-of-databases-and-the-hadr-worker-pool\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"SQL Server AlwaysOn: number of databases and the hadr worker pool"}]},{"@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\/5556","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=5556"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/5556\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media\/5565"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=5556"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=5556"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=5556"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=5556"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}