{"id":46300,"date":"2026-08-10T13:07:30","date_gmt":"2026-08-10T11:07:30","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=46300"},"modified":"2026-08-10T13:17:27","modified_gmt":"2026-08-10T11:17:27","slug":"wait-stats-and-sub-numa-clustering","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/wait-stats-and-sub-numa-clustering\/","title":{"rendered":"Wait stats and Sub-NUMA clustering\u00a0"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">During a healthcheck at a client&#8217;s site, we collected performance data from a SQL Server 2019 Enterprise instance hosting a BI \/ data warehouse workload. Two lines in the wait statistics report immediately caught the eye: hundreds of hours of parallelism waits accumulated in only 11 days of uptime.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Here are the questions that arise<\/strong>&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Can a wait type really account for more than 100% of server uptime?&nbsp;<\/li>\n\n\n\n<li>Are these values a problem in themselves?&nbsp;<\/li>\n\n\n\n<li>What do they tell us about the configuration of the instance?&nbsp;<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The waits themselves were not the problem. But they pointed us to a BIOS option (Sub-NUMA Clustering) that was silently reshaping the entire NUMA topology of the server and putting it in conflict with the MAXDOP configuration.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This post is the story of that investigation: from the wait statistics to the BIOS, step by step.&nbsp;<\/p>\n\n\n\n<h2 id=\"h-unusual-wait-statistics-nbsp\" class=\"wp-block-heading\">Unusual wait statistics&nbsp;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The collected data<\/strong>&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The instance had been up for about 11 days (roughly 273 hours). The two top wait types were:&nbsp;<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Wait type<\/strong>&nbsp;<\/td><td><strong>% of uptime<\/strong>&nbsp;<\/td><td><strong>Total hours<\/strong>&nbsp;<\/td><td><strong>Average per wait<\/strong>&nbsp;<\/td><\/tr><tr><td>CXCONSUMER<\/td><td>278.95%&nbsp;<\/td><td>761.91 h&nbsp;<\/td><td>0 ms&nbsp;<\/td><\/tr><tr><td>CXPACKET<\/td><td>240.83%&nbsp;<\/td><td>657.78 h&nbsp;<\/td><td>1 ms<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">761 hours is almost 32 days. How can a server accumulate 32 days of waits in 11 days of wall-clock time?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"h-\"><strong>Reading percentages above 100%<\/strong>&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wait statistics are cumulated across all threads that are waiting at the same time. A waiting thread is in the SUSPENDED state: it does not occupy a scheduler, so the number of simultaneous waiters is not limited by the number of CPUs. It is only limited by the worker thread pool (704 workers on this instance).&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A simple example: 16 threads, each waiting for one hour during one hour of wall-clock time, produce 16 hours of wait time for 1 hour of uptime. That is 1600%.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This gives us the only robust way to read these percentages: divide by 100 to get the average number of threads simultaneously waiting on that wait type.&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CXCONSUMER: 761.91 h \/ 273 h \u2248 2.79 \u2192 about 2.8 threads permanently waiting&nbsp;<\/li>\n\n\n\n<li>CXPACKET: 657.78 h \/ 273 h \u2248 2.41 \u2192 about 2.4 threads permanently waiting&nbsp;<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">On a server that can host 704 workers, 2.5 permanent waiters is not an alarming number.<\/p>\n<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>CXPACKET and CXCONSUMER<\/strong>&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Both wait types belong to parallel query execution. A parallel plan splits its work into branches and the branches synchronize at exchange operators.&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>CXCONSUMER<\/strong>: the consumer side of an exchange is simply waiting for the producers to deliver rows. This is the structural, unavoidable wait of any parallel plan. It is considered benign.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>CXPACKET<\/strong>: a thread has finished its share of the work and waits for slower branches at the synchronization point. This is the potentially actionable signal: it reveals an imbalance between the branches of the plan.&nbsp;<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">An analogy: in a factory, CXCONSUMER is a workstation waiting for parts to arrive (normal), CXPACKET is a workstation that has finished its batch and waits for a slower colleague (an imbalance worth examining).&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Are these values abnormal, then?<\/strong>&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Look at the averages again: 0.00 ms and 1.00 ms per wait. 657.78 hours at 1 ms average means roughly 2.4 billion individual waits. These counters do not describe long blockings, they describe the normal tick-tock of exchange operators in a heavily parallel workload. A server suffering from severe skew would show averages of tens of milliseconds.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The healthcheck tool itself says it in its own message: &#8220;Usually a cost threshold for parallelism \/ MAXDOP tuning issue rather than a problem in itself.&#8221; The line is an inventory entry (any wait above 10% of uptime gets reported), not an alarm.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So why did these two lines matter? Not because of their height because of their rank. CXCONSUMER and CXPACKET were number 1 and number 2 of the entire wait inventory, ahead of everything else. Their rank designated parallelism as the dominant workload of this instance and therefore its configuration as the first thing to confront with the topology.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The instance configuration<\/strong>&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT &#091;name], value_in_use \nFROM sys.configurations \nWHERE &#091;name] IN (N'max degree of parallelism', N'cost threshold for parallelism'); <\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Cost threshold for parallelism: 50<\/strong>, correctly raised from the default of 5. This setting decides&nbsp;<em>which<\/em>&nbsp;queries are allowed to go parallel (those whose estimated cost exceeds the threshold).&nbsp;<\/li>\n\n\n\n<li><strong>MAXDOP: 8<\/strong>, this setting decides how wide: the maximum number of worker threads per parallel branch.&nbsp;<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"272\" height=\"80\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-36.png\" alt=\"\" class=\"wp-image-46302\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">MAXDOP 8 is a perfectly reasonable value in isolation. The problem only appears when we look at the topology.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The topology<\/strong>&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT cpu_count, hyperthread_ratio, socket_count, cores_per_socket, \nnuma_node_count, softnuma_configuration_desc \nFROM sys.dm_os_sys_info; <\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"595\" height=\"37\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-39.png\" alt=\"\" class=\"wp-image-46303\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-39.png 595w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-39-300x19.png 300w\" sizes=\"auto, (max-width: 595px) 100vw, 595px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Two sockets. Four NUMA nodes. That is the anomaly this whole post is about.<\/strong>&nbsp;<\/p>\n\n\n\n<h2 id=\"h-from-the-anomaly-to-the-root-cause-nbsp\" class=\"wp-block-heading\">From the anomaly to the root cause&nbsp;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">On modern processors, there is no central memory controller shared by all cores. Each processor package has its own memory controllers with its own RAM modules attached to them. Such a group (cores + memory controllers + local RAM) is a NUMA node.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When a core reads an address that lives in its own node&#8217;s RAM: direct path, fast. When it reads an address that lives in another node&#8217;s RAM: the request crosses the interconnect, with roughly 1.5 to 2 times the latency. That is the meaning of the name: Non-Uniform Memory Access. The cost of a memory access depends on the physical distance between the core that asks and the RAM module that answers.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The natural NUMA boundary is therefore the socket: one socket = its memory controllers = its local RAM = one NUMA node.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here we have 4 nodes for 2 sockets: 2 nodes per socket. Only three mechanisms can produce that:&nbsp;<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Suspect<\/strong><\/td><td><strong>Signature<\/strong><\/td><td><strong>Conclusion<\/strong><\/td><\/tr><tr><td>Soft-NUMA (SQL Server subdivides by itself)&nbsp;<\/td><td>softnuma_configuration_desc &lt;&gt; OFF and soft-NUMA only splits schedulers, the memory nodes stay at the hardware count&nbsp;<\/td><td>OFF<\/td><\/tr><tr><td>Multi-die silicon (e.g. AMD EPYC Naples: 4 dies per socket)&nbsp;<\/td><td>CPU identity&nbsp;<\/td><td>Intel Xeon Gold 6244 = monolithic die&nbsp;<\/td><\/tr><tr><td>A BIOS option that subdivides the socket&nbsp;<\/td><td>On this Intel generation: Sub-NUMA Clustering&nbsp;<\/td><td>The only suspect left&nbsp;<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cross-checking with the hardware<\/strong>&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The server is a physical HPE ProLiant DL380 Gen10 with 2 \u00d7 Intel Xeon Gold 6244 (8 cores \/ 16 threads each, 3.60 GHz base) and 384 GB of RAM (12 \u00d7 32 GB, balanced across the memory channels).&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"675\" height=\"455\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-70.png\" alt=\"\" class=\"wp-image-46359\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-70.png 675w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-70-300x202.png 300w\" sizes=\"auto, (max-width: 675px) 100vw, 675px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Windows server shows &#8220;8 Core(s), 8 Logical Processor(s)&#8221; per socket, and Task Manager shows Cores: 16 = Logical processors: 16. Hyper-threading is disabled: 16 physical cores, one logical processor per core. This matters for the rest of the post, because Microsoft&#8217;s MAXDOP recommendations are expressed in logical processors per node.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"698\" height=\"677\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-43.png\" alt=\"\" class=\"wp-image-46312\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-43.png 698w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-43-300x291.png 300w\" sizes=\"auto, (max-width: 698px) 100vw, 698px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">A corroborating detail: Task Manager reports L3 cache = 99.0 MB. The Gold 6244 has 24.75 MB of L3 per socket, so the server has 49.5 MB but 99.0 = 4 \u00d7 24.75. Windows counts the socket&#8217;s L3 once per NUMA node it is presented with. The only wrong line in the cache arithmetic is exactly the one that depends on NUMA counting.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"698\" height=\"163\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-44.png\" alt=\"\" class=\"wp-image-46314\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-44.png 698w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-44-300x70.png 300w\" sizes=\"auto, (max-width: 698px) 100vw, 698px\" \/><\/figure>\n\n\n\n<h2 id=\"h-what-sub-numa-clustering-is-nbsp\" class=\"wp-block-heading\"><strong>What Sub-NUMA Clustering is<\/strong>&nbsp;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Our socket contains 8 cores, 6 memory channels and a shared L3 cache connected by an internal mesh. Sub-NUMA Clustering (SNC) is a BIOS option that cuts this socket into two domains, each with 4 cores, 3 memory channels and its half of the L3 affinity and presents each half as a full NUMA node to the operating system.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"414\" height=\"318\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-46.png\" alt=\"\" class=\"wp-image-46315\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-46.png 414w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-46-300x230.png 300w\" sizes=\"auto, (max-width: 414px) 100vw, 414px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"921\" height=\"506\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-48.png\" alt=\"\" class=\"wp-image-46318\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-48.png 921w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-48-300x165.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-48-768x422.png 768w\" sizes=\"auto, (max-width: 921px) 100vw, 921px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Two sockets \u00d7 SNC = 4 NUMA nodes of 4 logical processors and about 96 GB of RAM each. Exactly what our DMVs show.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Why does this option exist? Because for some workloads it helps. A public SPEC CPU2017 result published by Dell on the equivalent platform (PowerEdge R640, same 2 \u00d7 Xeon Gold 6244, same 384 GB in 12 \u00d7 32 GB) is instructive on this point the BIOS notes literally list &#8220;Sub NUMA Cluster enabled&#8221; and the published numactl output shows the resulting topology:&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"638\" height=\"407\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-51.png\" alt=\"\" class=\"wp-image-46319\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-51.png 638w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-51-300x191.png 300w\" sizes=\"auto, (max-width: 638px) 100vw, 638px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"622\" height=\"102\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-52.png\" alt=\"\" class=\"wp-image-46322\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-52.png 622w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-52-300x49.png 300w\" sizes=\"auto, (max-width: 622px) 100vw, 622px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Reference :&nbsp;<a href=\"https:\/\/www.spec.org\/cpu2017\/results\/res2019q2\/cpu2017-20190429-12798.html\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.spec.org\/cpu2017\/results\/res2019q2\/cpu2017-20190429-12798.html<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>What SNC makes SQLOS build<\/strong>&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At startup, SQLOS mirrors the presented topology: one memory node and one group of schedulers per NUMA node. On this server: 4 groups of 4 schedulers and the decisive point the buffer pool is partitioned across the 4 nodes. With max server memory at 210 GB, each node manages roughly 52 GB, and a cached data page physically lives in the RAM of one node.&nbsp;<\/p>\n\n\n\n<h2 id=\"h-the-mechanics-then-the-corrections-nbsp\" class=\"wp-block-heading\">The mechanics then the corrections&nbsp;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Now we can close the loop with Part 1:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SNC (BIOS) cuts 2 sockets into 4 NUMA nodes of 4 logical processors.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>MAXDOP is 8 and a node only offers 4 schedulers: every parallel query spans two nodes by construction at every execution.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The workers on the remote node access non-local memory. This cost is mostly invisible in the wait statistics a thread reading remote memory is RUNNING, not waiting. The direct cost hides in queries that simply run slower.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Only the indirect effect surfaces: asymmetric memory distances desynchronize the branches, the fast workers finish their packets and wait for the slow ones at the exchanges and that spills into CXPACKET.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The placement follows the load of the moment, so the same query can have different costs from one execution to the next. SNC does not only add cost it adds variance.&nbsp;<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Why MAXDOP 4 alone is not the fix<\/strong>&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Capping MAXDOP at 4 confines each query&#8217;s workers to a single node. That offers two things: the working memory (memory grants, hash tables, sort runs, exchange buffers) becomes local and all branches advance at the same speed and nobody waits for a remote colleague anymore.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But it does not buy data locality. A buffer pool page is allocated on the node of the worker that read it from disk&nbsp; potentially days ago for another query on another node and it never migrates afterwards. With 4 nodes, a query confined to node 2 finds on average only about 25% of the already-cached pages locally. And MAXDOP 4 also halves the width of every query on a data warehouse that lives on parallelism. MAXDOP 4 is the bandage. The correction is the topology itself.&nbsp;<\/p>\n\n\n\n<h2 id=\"h-microsoft-s-recommendations-nbsp\" class=\"wp-block-heading\"><strong>Microsoft&#8217;s recommendations<\/strong>&nbsp;<\/h2>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Configuration<\/strong>&nbsp;<\/td><td><strong>MAXDOP recommendation<\/strong>&nbsp;<\/td><\/tr><tr><td>Single NUMA node, \u2264 8 logical processors&nbsp;<\/td><td>\u2264 number of logical processors&nbsp;<\/td><\/tr><tr><td>Single NUMA node, &gt; 8 logical processors&nbsp;<\/td><td>8&nbsp;<\/td><\/tr><tr><td>Multiple NUMA nodes, \u2264 16 logical processors per node&nbsp;<\/td><td>\u2264 number of logical processors per node&nbsp;<\/td><\/tr><tr><td>Multiple NUMA nodes, &gt; 16 logical processors per node&nbsp;<\/td><td>Half the logical processors per node, max 16&nbsp;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Our server sits on the third line in every scenario:&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Scenario<\/strong>&nbsp;<\/td><td><strong>Topology<\/strong>&nbsp;<\/td><td><strong>MAXDOP recommendation<\/strong>&nbsp;<\/td><\/tr><tr><td>Today (SNC enabled)&nbsp;<\/td><td>4 nodes \u00d7 4 logical processors&nbsp;<\/td><td>\u2264 4 (currently 8: non-compliant)&nbsp;<\/td><\/tr><tr><td>SNC disabled&nbsp;<\/td><td>2 nodes \u00d7 8 logical processors&nbsp;<\/td><td>\u2264 8 \u2192 the current setting becomes compliant&nbsp;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Current (SNC enabled) :&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"235\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-58-1024x235.png\" alt=\"\" class=\"wp-image-46329\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-58-1024x235.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-58-300x69.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-58-768x177.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-58.png 1153w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">After (with SNC disabled) :&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"277\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-61-1024x277.png\" alt=\"\" class=\"wp-image-46333\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-61-1024x277.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-61-300x81.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-61-768x207.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-61.png 1192w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The possible two corrections:<\/strong>&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Short term (online, reversible, no restart): MAXDOP = 4. It confines each query to one node as the server is presented today. It is a transitional measure not the target state.&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>EXEC sp_configure 'max degree of parallelism', 4;&nbsp;\nRECONFIGURE;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Root-cause correction (through a maintenance window): disable SNC in the BIOS. On an HPE Gen10, the option lives in:&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">System Configuration &gt; BIOS\/Platform Configuration (RBSU) &gt; Power and Performance Options &gt; Sub-NUMA Clustering &gt; Disabled&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It looks like that:&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"484\" height=\"453\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-65.png\" alt=\"\" class=\"wp-image-46337\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-65.png 484w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-65-300x281.png 300w\" sizes=\"auto, (max-width: 484px) 100vw, 484px\" \/><\/figure>\n\n\n\n<h2 id=\"h-conclusion\" class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The wait statistics never proved anything in this story and that is the point. Values above 100% of uptime are normal (they cumulate across all simultaneous waiters), the averages were small and CXCONSUMER is benign by nature. What the two lines provided was a characterization: normalized by uptime, they showed about 2.5 threads permanently synchronizing exchanges and this instance lives on parallelism. Their rank designated parallelism as the dominant workload and therefore its configuration as the first thing to confront with the topology.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Thank you. <a href=\"https:\/\/www.linkedin.com\/in\/amine-haloui-76968056\/\">Amine Haloui<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>During a healthcheck at a client&#8217;s site, we collected performance data from a SQL Server 2019 Enterprise instance hosting a BI \/ data warehouse workload. Two lines in the wait statistics report immediately caught the eye: hundreds of hours of parallelism waits accumulated in only 11 days of uptime.&nbsp; Here are the questions that arise&nbsp; [&hellip;]<\/p>\n","protected":false},"author":147,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":"","_members_access_role":[],"_members_access_error":""},"categories":[199,42,99],"tags":[2531],"type_dbi":[2874],"class_list":["post-46300","post","type-post","status-publish","format-standard","hentry","category-hardware-storage","category-operating-systems","category-sql-server","tag-numa","type-sql-server"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.2 (Yoast SEO v28.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Wait stats and Sub-NUMA clustering\u00a0 - dbi Blog<\/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\/wait-stats-and-sub-numa-clustering\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Wait stats and Sub-NUMA clustering\u00a0\" \/>\n<meta property=\"og:description\" content=\"During a healthcheck at a client&#8217;s site, we collected performance data from a SQL Server 2019 Enterprise instance hosting a BI \/ data warehouse workload. Two lines in the wait statistics report immediately caught the eye: hundreds of hours of parallelism waits accumulated in only 11 days of uptime.&nbsp; Here are the questions that arise&nbsp; [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/wait-stats-and-sub-numa-clustering\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-10T11:07:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-10T11:17:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-36.png\" \/>\n\t<meta property=\"og:image:width\" content=\"272\" \/>\n\t<meta property=\"og:image:height\" content=\"80\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Amine Haloui\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Amine Haloui\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 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\\\/wait-stats-and-sub-numa-clustering\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wait-stats-and-sub-numa-clustering\\\/\"},\"author\":{\"name\":\"Amine Haloui\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/221331d69d49c63fca67069b49b813fe\"},\"headline\":\"Wait stats and Sub-NUMA clustering\u00a0\",\"datePublished\":\"2026-08-10T11:07:30+00:00\",\"dateModified\":\"2026-08-10T11:17:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wait-stats-and-sub-numa-clustering\\\/\"},\"wordCount\":1882,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wait-stats-and-sub-numa-clustering\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2026\\\/08\\\/image-36.png\",\"keywords\":[\"NUMA\"],\"articleSection\":[\"Hardware &amp; Storage\",\"Operating systems\",\"SQL Server\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wait-stats-and-sub-numa-clustering\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wait-stats-and-sub-numa-clustering\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wait-stats-and-sub-numa-clustering\\\/\",\"name\":\"Wait stats and Sub-NUMA clustering\u00a0 - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wait-stats-and-sub-numa-clustering\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wait-stats-and-sub-numa-clustering\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2026\\\/08\\\/image-36.png\",\"datePublished\":\"2026-08-10T11:07:30+00:00\",\"dateModified\":\"2026-08-10T11:17:27+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/221331d69d49c63fca67069b49b813fe\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wait-stats-and-sub-numa-clustering\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wait-stats-and-sub-numa-clustering\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wait-stats-and-sub-numa-clustering\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2026\\\/08\\\/image-36.png\",\"contentUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2026\\\/08\\\/image-36.png\",\"width\":272,\"height\":80},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wait-stats-and-sub-numa-clustering\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Wait stats and Sub-NUMA clustering\u00a0\"}]},{\"@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\\\/221331d69d49c63fca67069b49b813fe\",\"name\":\"Amine Haloui\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/64707272207cd8d2667aefcb212f3ff5d19a15813da5aad6553f109d1f1afec1?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/64707272207cd8d2667aefcb212f3ff5d19a15813da5aad6553f109d1f1afec1?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/64707272207cd8d2667aefcb212f3ff5d19a15813da5aad6553f109d1f1afec1?s=96&d=mm&r=g\",\"caption\":\"Amine Haloui\"},\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/aminehaloui\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Wait stats and Sub-NUMA clustering\u00a0 - dbi Blog","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\/wait-stats-and-sub-numa-clustering\/","og_locale":"en_US","og_type":"article","og_title":"Wait stats and Sub-NUMA clustering\u00a0","og_description":"During a healthcheck at a client&#8217;s site, we collected performance data from a SQL Server 2019 Enterprise instance hosting a BI \/ data warehouse workload. Two lines in the wait statistics report immediately caught the eye: hundreds of hours of parallelism waits accumulated in only 11 days of uptime.&nbsp; Here are the questions that arise&nbsp; [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/wait-stats-and-sub-numa-clustering\/","og_site_name":"dbi Blog","article_published_time":"2026-08-10T11:07:30+00:00","article_modified_time":"2026-08-10T11:17:27+00:00","og_image":[{"width":272,"height":80,"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-36.png","type":"image\/png"}],"author":"Amine Haloui","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Amine Haloui","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/wait-stats-and-sub-numa-clustering\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/wait-stats-and-sub-numa-clustering\/"},"author":{"name":"Amine Haloui","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/221331d69d49c63fca67069b49b813fe"},"headline":"Wait stats and Sub-NUMA clustering\u00a0","datePublished":"2026-08-10T11:07:30+00:00","dateModified":"2026-08-10T11:17:27+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/wait-stats-and-sub-numa-clustering\/"},"wordCount":1882,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/wait-stats-and-sub-numa-clustering\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-36.png","keywords":["NUMA"],"articleSection":["Hardware &amp; Storage","Operating systems","SQL Server"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/wait-stats-and-sub-numa-clustering\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/wait-stats-and-sub-numa-clustering\/","url":"https:\/\/www.dbi-services.com\/blog\/wait-stats-and-sub-numa-clustering\/","name":"Wait stats and Sub-NUMA clustering\u00a0 - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/wait-stats-and-sub-numa-clustering\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/wait-stats-and-sub-numa-clustering\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-36.png","datePublished":"2026-08-10T11:07:30+00:00","dateModified":"2026-08-10T11:17:27+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/221331d69d49c63fca67069b49b813fe"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/wait-stats-and-sub-numa-clustering\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/wait-stats-and-sub-numa-clustering\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/wait-stats-and-sub-numa-clustering\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-36.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/08\/image-36.png","width":272,"height":80},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/wait-stats-and-sub-numa-clustering\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Wait stats and Sub-NUMA clustering\u00a0"}]},{"@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\/221331d69d49c63fca67069b49b813fe","name":"Amine Haloui","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/64707272207cd8d2667aefcb212f3ff5d19a15813da5aad6553f109d1f1afec1?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/64707272207cd8d2667aefcb212f3ff5d19a15813da5aad6553f109d1f1afec1?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/64707272207cd8d2667aefcb212f3ff5d19a15813da5aad6553f109d1f1afec1?s=96&d=mm&r=g","caption":"Amine Haloui"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/aminehaloui\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/46300","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\/147"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=46300"}],"version-history":[{"count":15,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/46300\/revisions"}],"predecessor-version":[{"id":46365,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/46300\/revisions\/46365"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=46300"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=46300"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=46300"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=46300"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}