{"id":2420,"date":"2019-03-21T17:12:47","date_gmt":"2019-03-21T17:12:47","guid":{"rendered":"https:\/\/nenadnoveljic.com\/blog\/?p=2420"},"modified":"2019-03-21T17:25:39","modified_gmt":"2019-03-21T17:25:39","slug":"sos_scheduler_yield-waits-during-low-cpu-utilization","status":"publish","type":"post","link":"https:\/\/nenadnoveljic.com\/blog\/sos_scheduler_yield-waits-during-low-cpu-utilization\/","title":{"rendered":"SOS_SCHEDULER_YIELD waits during low CPU utilization"},"content":{"rendered":"<p>SOS_SCHEDULER_YIELD wait event measures the time the threads are spending on SQL Server OS (SOS) scheduler queue. Therefore, it will inherently start increasing on an oversubscribed system.<\/p>\n<p><a href=\"https:\/\/www.sqlskills.com\/blogs\/paul\/increased-sos_scheduler_yield-waits-on-virtual-machines\/\">Paul Randal warns us<\/a> that on a virtualized platform you also have to consider the CPU utilization on the whole physical server. Expectedly, the threads will be queued on an oversubscribed physical server causing SOS_SCHEDULER_YIELD waits, even in the case of low CPU utilization by the VM.<\/p>\n<p>But I&#8217;ve been occasionally seeing high SOS_SCHEDULER_YIELD signal wait time even when both VM and the physical server were underutilized.<\/p>\n<p>This prompted me to do a series of tests on SQL Server 2017 to learn when exactly this happens. In doing so, I measured SOS_SCHEDULER_YIELD wait time, CPU time per scheduler and elapsed time. This benchmark and the statistical analysis are fully automated and can be downloaded from <a href=\"https:\/\/github.com\/nenadnoveljic\/sqlserver_cpu_benchmark\">my GitHub repository<\/a>.<\/p>\n<p>What I found out is that SQL Server will start throttling after the load exceeds 50%. I mean it will put the thread in the queue, instead of using available CPUs. That&#8217;s the reason why we&#8217;re sometimes seeing SOS_SCHEDULER_YIELD waits even when there&#8217;s enough spare CPU capacity.<\/p>\n<p>By the way, I also performed similar load tests with a C program and it scaled perfectly. I did this just to prevent the speculations about common suspects, such as physical host, OS, virtualization layer, hyperthreading, etc.<\/p>\n<p>The following table quantifies the effects of the scheduler throttling (the server has 12 CPU cores):<\/p>\n<pre><code>Load AVG SOS waits(%) MAX SOS waits(%) Run id 1\n---- ---------------- ---------------- --------\n  23             75.1            101.2     1554\n  22             71.3               96      235\n  21             68.6             89.5     1263\n  20             63.4             84.3     1326\n  19             58.1             78.2      465\n  18             46.9             65.8     1868\n  17             43.2             60.2     2126\n  16             35.5             42.6      398\n  15             28.2             42.8       91\n  14             19.6             34.3      778\n  13             15.4             22.5     1665\n  12             10.8             24.2     1617\n  11              9.7             12.7     1435\n  10              9.3             13.9      136\n   9              7.4             15.9      329\n   8              5.9             17.9     1560\n   <span style=\"color: blue;\">7<\/span>              <span style=\"color: blue;\">3.9<\/span>             21.9     1361\n   <span style=\"color: red;\">6<\/span>              0.3             <span style=\"color: red;\">24.3     1432<\/span>\n   5              0.1              0.1      887\n   4              0.1              0.5     2181\n   3              0.1              0.1     1808\n   2              0.1              0.2     1711<\/code><\/pre>\n<p>The meaning of the columns are:<\/p>\n<ul>\n<li>Load &#8211; the number concurrent of sessions concurrently executing the load.<\/li>\n<li>AVG SOS waits(%) &#8211; average SOS_SCHEDULER_YIELD waits overhead per load<\/li>\n<li>MAX SOS waits(%) &#8211; maximum SOS_SCHEDULER_YIELD waits overhead per load<\/li>\n<li>Run Id &#8211; run id of the test with the highest SOS_SCHEDULER_YIELD overhead for a given load<\/li>\n<\/ul>\n<p>As you can see, SQL Server already started throttling when it had to serve 7 concurrent sessions. But there were also some outliers with 6 concurrent sessions, like the test having the run id <span style=\"color: red;\">1432<\/span>.<\/p>\n<p>Let&#8217;s zoom into it:<\/p>\n<pre><code>===============================\nRun:  <span style=\"color: red;\">1432<\/span>\nThreads:  <span style=\"color: red;\">6<\/span>\nElapsed times:\n<span style=\"color: red;\">9245.1896<\/span>\n6905.6312\n6819.9694\n6463.959\n<span style=\"color: red;\">9178.9062<\/span>\n6591.4602\n\n\nCount    : 6\nAverage  : 7534.18593333333\nSum      : 45205.1156\nMaximum  : <span style=\"color: red;\">9245.1896<\/span>\nMinimum  : <span style=\"color: green;\">6463.959<\/span>\nProperty : \n\n\nwait_type           wait_time_ms signal_wait_time_ms\n---------           ------------ -------------------\n<span style=\"color: red;\">SOS_SCHEDULER_YIELD         8840                8837<\/span>\n\n\n\nscheduler_id total_cpu_usage_ms\n------------ ------------------\n           0               6822\n           1               6375\n           2                  2\n           3                  0\n           4               6512\n           5                  1\n           6                  0\n           7                  0\n           8               <span style=\"color: red;\">9394<\/span>\n           9               6726\n          10                  0\n          11                  1<\/code><\/pre>\n<p>In the excerpt above, we can clearly see that only 5 schedulers were busy, even though we had <span style=\"color: red;\">6<\/span> active sessions. This means that in average one session had to wait inspite having enough CPU capacity in both the VM and the physical server. However, not all of the sessions were equally penalized &#8211; two slowest sessions took around 40% longer to complete than the fastest one. In other words, you can experience highly volatile response times even with lower CPU usage without any obvious reason.<\/p>\n<p>This variability in relation to the mean can be measured with the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Coefficient_of_variation\">coefficient of variation (CV)<\/a>, which is defined as the ratio of the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Standard_deviation\">standard deviation<\/a> to the mean and often expressed as a percentage. Higher the CV, more volatile the execution times.<\/p>\n<p>The table below shows how the CV increases with the load:<\/p>\n<pre><code>Load AVG CV AVG SOS waits(%) MAX CV Run id 1 MAX SOS waits(%) Run id 2\n---- ------ ---------------- ------ -------- ---------------- --------\n  23   19.7             75.1   32.6     2246            101.2     1554\n  22     21             71.3   33.8     2209               96      235\n  21   20.3             68.6   41.4     1198             89.5     1263\n  20   20.7             63.4   30.8     1183             84.3     1326\n  19   20.2             58.1   33.5     2372             78.2      465\n  18   19.9             46.9   29.1      812             65.8     1868\n  17     20             43.2   30.3     1262             60.2     2126\n  16   19.4             35.5   37.9      402             42.6      398\n  15     18             28.2   23.4     1671             42.8       91\n  14   14.7             19.6   22.1     2314             34.3      778\n  13   12.2             15.4   25.5     1158             22.5     1665\n  12   10.1             10.8   18.4     2382             24.2     1617\n  11    9.5              9.7   14.9      397             12.7     1435\n  10    8.8              9.3   14.1      136             13.9      136\n   9      8              7.4   15.5      329             15.9      329\n   8    7.4              5.9   16.7     1787             17.9     1560\n   <span style=\"color: blue;\">7<\/span>    6.6              <span style=\"color: blue;\">3.9<\/span>   21.1     1361             21.9     1361\n   6      5              0.3   15.9     1432             24.3     1432\n   5    4.1              0.1   10.4     1788              0.1      887\n   4    3.9              0.1   12.9      543              0.5     2181\n   3    3.2              0.1   16.8     2015              0.1     1808\n   2    0.4              0.1    1.7      317              0.2     1711\n   1      0              0.1      0     2398              0.4     1853<\/code><\/pre>\n<p>Notice that we often have a relatively high variability even with insignificant SOS_SCHEDULER_YIELD wait time, which means that these waits aren&#8217;t the only contributor to the volatile response times.<\/p>\n<p>This unbalanced scheduling seems to be a known problem. For instance, <a href=\"https:\/\/chrisadkin.io\/2016\/05\/13\/the-sql-server-2016-scheduler-and-trace-flag-8008\/\">Chris Adkin suggests<\/a> combatting it with the <a href=\"http:\/\/www.sqlservercentral.com\/articles\/trace-flag\/152989\/\">trace flag 8008<\/a>, which is an undocumented flag that forces assigning the thread to the scheduler with the least load.<\/p>\n<p>So, I repeated the tests with the 8008 flag set and obtained, unfortunately, not so spectacular results:<\/p>\n<pre><code>Load AVG CV AVG SOS waits(%) MAX CV Run id 1 MAX SOS waits(%) Run id 2\n---- ------ ---------------- ------ -------- ---------------- --------\n  22   17.7             68.3   38.8      592             85.3     1589\n  23   15.7             69.9   33.1     1639             90.9     1578\n  21   18.2             65.1   31.3      462               80     1803\n  20   19.5             57.9   31.5      546             74.5      305\n  19   19.4             56.2   29.8      227             78.9     1542\n  18   19.6             50.8   22.7      635             63.4      566\n  17   19.9             42.1   30.6     1515               49      957\n  16   19.3             36.6     29     1047             50.7     1499\n  15   18.5             28.4     26        1             31.2      200\n  14   14.3             19.4   19.6     1184             32.9     1184\n  13   12.4             15.5   20.1     1959             36.8     1959\n  12    8.7              9.5   16.4     2325             24.5     2325\n  11      9              9.7   17.2     1532             27.1     1532\n  10    7.4              7.6     13      204             13.8      204\n   9    6.8                6   14.9     1901             15.8     1901\n   <span style=\"color: blue;\">8<\/span>    6.1                <span style=\"color: blue;\">4<\/span>   18.1      847             18.6      847\n   7    4.9              1.1   20.5     1332             22.2     1332\n   6    4.8              0.1   10.8     2373              0.1       20\n   5    4.1              0.1     11     1504              0.1      676\n   4    4.1              0.1   12.6     2122              0.1     1396\n   3    3.4              0.1   17.9     1816              0.1     2014\n   2    0.5              0.1    1.8      263              0.1      593\n   1      0                0      0     2320              0.1     1565<\/code><\/pre>\n<p>The systemic throttling started with a somewhat higher load &#8211; <span style=\"color: blue;\">8<\/span> instead of <span style=\"color: blue;\">7<\/span>, but alas, the magnitude of the problem remained the same:<\/p>\n<p><a href=\"https:\/\/nenadnoveljic.com\/blog\/wp-content\/uploads\/2019\/03\/SOS_SCHEDULER_YIELD.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone  wp-image-2430\" src=\"https:\/\/nenadnoveljic.com\/blog\/wp-content\/uploads\/2019\/03\/SOS_SCHEDULER_YIELD-300x154.png\" alt=\"\" width=\"413\" height=\"212\" srcset=\"https:\/\/nenadnoveljic.com\/blog\/wp-content\/uploads\/2019\/03\/SOS_SCHEDULER_YIELD-300x154.png 300w, https:\/\/nenadnoveljic.com\/blog\/wp-content\/uploads\/2019\/03\/SOS_SCHEDULER_YIELD.png 535w\" sizes=\"auto, (max-width: 413px) 100vw, 413px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/nenadnoveljic.com\/blog\/wp-content\/uploads\/2019\/03\/CV3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone  wp-image-2438\" src=\"https:\/\/nenadnoveljic.com\/blog\/wp-content\/uploads\/2019\/03\/CV3-300x139.png\" alt=\"\" width=\"410\" height=\"190\" srcset=\"https:\/\/nenadnoveljic.com\/blog\/wp-content\/uploads\/2019\/03\/CV3-300x139.png 300w, https:\/\/nenadnoveljic.com\/blog\/wp-content\/uploads\/2019\/03\/CV3.png 600w\" sizes=\"auto, (max-width: 410px) 100vw, 410px\" \/><\/a><\/p>\n<p>In conclusion, throttling can occure even though there&#8217;s enough CPU capacity to handle the workload. The tracing flag 8008 linders the problem a little bit, but it doesn&#8217;t resolve it. The CPU overprovisioning can postpone the throttling and therefore can serve as a workaround.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>SQL Server OS scheduler unexpectedly throttles the load which decreases the throughput and increases the response time variability. <a href=\"https:\/\/nenadnoveljic.com\/blog\/sos_scheduler_yield-waits-during-low-cpu-utilization\/\" class=\"more-link\">Continue Reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[17],"tags":[],"class_list":["post-2420","post","type-post","status-publish","format-standard","hentry","category-sql-server"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>SOS_SCHEDULER_YIELD waits during low CPU utilization - All-round Database Topics<\/title>\n<meta name=\"description\" content=\"SQL Server OS scheduler unexpectedly throttles the load which decreases the throughput and increases the response time variability.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/nenadnoveljic.com\/blog\/sos_scheduler_yield-waits-during-low-cpu-utilization\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SOS_SCHEDULER_YIELD waits during low CPU utilization - All-round Database Topics\" \/>\n<meta property=\"og:description\" content=\"SQL Server OS scheduler unexpectedly throttles the load which decreases the throughput and increases the response time variability.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/nenadnoveljic.com\/blog\/sos_scheduler_yield-waits-during-low-cpu-utilization\/\" \/>\n<meta property=\"og:site_name\" content=\"All-round Database Topics\" \/>\n<meta property=\"article:published_time\" content=\"2019-03-21T17:12:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-03-21T17:25:39+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/nenadnoveljic.com\/blog\/wp-content\/uploads\/2019\/03\/SOS_SCHEDULER_YIELD-300x154.png\" \/>\n<meta name=\"author\" content=\"Nenad Noveljic\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@NenadNoveljic\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nenad Noveljic\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/sos_scheduler_yield-waits-during-low-cpu-utilization\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/sos_scheduler_yield-waits-during-low-cpu-utilization\\\/\"},\"author\":{\"name\":\"Nenad Noveljic\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/#\\\/schema\\\/person\\\/51458d9dd86dbbdd19f5add451d44efa\"},\"headline\":\"SOS_SCHEDULER_YIELD waits during low CPU utilization\",\"datePublished\":\"2019-03-21T17:12:47+00:00\",\"dateModified\":\"2019-03-21T17:25:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/sos_scheduler_yield-waits-during-low-cpu-utilization\\\/\"},\"wordCount\":650,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/sos_scheduler_yield-waits-during-low-cpu-utilization\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/03\\\/SOS_SCHEDULER_YIELD-300x154.png\",\"articleSection\":[\"SQL Server\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/sos_scheduler_yield-waits-during-low-cpu-utilization\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/sos_scheduler_yield-waits-during-low-cpu-utilization\\\/\",\"url\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/sos_scheduler_yield-waits-during-low-cpu-utilization\\\/\",\"name\":\"SOS_SCHEDULER_YIELD waits during low CPU utilization - All-round Database Topics\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/sos_scheduler_yield-waits-during-low-cpu-utilization\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/sos_scheduler_yield-waits-during-low-cpu-utilization\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/03\\\/SOS_SCHEDULER_YIELD-300x154.png\",\"datePublished\":\"2019-03-21T17:12:47+00:00\",\"dateModified\":\"2019-03-21T17:25:39+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/#\\\/schema\\\/person\\\/51458d9dd86dbbdd19f5add451d44efa\"},\"description\":\"SQL Server OS scheduler unexpectedly throttles the load which decreases the throughput and increases the response time variability.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/sos_scheduler_yield-waits-during-low-cpu-utilization\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/sos_scheduler_yield-waits-during-low-cpu-utilization\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/sos_scheduler_yield-waits-during-low-cpu-utilization\\\/#primaryimage\",\"url\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/03\\\/SOS_SCHEDULER_YIELD.png\",\"contentUrl\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/03\\\/SOS_SCHEDULER_YIELD.png\",\"width\":535,\"height\":275},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/sos_scheduler_yield-waits-during-low-cpu-utilization\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SOS_SCHEDULER_YIELD waits during low CPU utilization\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/\",\"name\":\"All-round Database Topics\",\"description\":\"Nenad Noveljic\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/#\\\/schema\\\/person\\\/51458d9dd86dbbdd19f5add451d44efa\",\"name\":\"Nenad Noveljic\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a97b796613ea48ec8a7b79c8ffe1c685dcffc920c68121f6238d5caab5070670?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a97b796613ea48ec8a7b79c8ffe1c685dcffc920c68121f6238d5caab5070670?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a97b796613ea48ec8a7b79c8ffe1c685dcffc920c68121f6238d5caab5070670?s=96&d=mm&r=g\",\"caption\":\"Nenad Noveljic\"},\"sameAs\":[\"nenad-noveljic-9b746a6\",\"https:\\\/\\\/x.com\\\/NenadNoveljic\"],\"url\":\"https:\\\/\\\/nenadnoveljic.com\\\/blog\\\/author\\\/nenad\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"SOS_SCHEDULER_YIELD waits during low CPU utilization - All-round Database Topics","description":"SQL Server OS scheduler unexpectedly throttles the load which decreases the throughput and increases the response time variability.","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:\/\/nenadnoveljic.com\/blog\/sos_scheduler_yield-waits-during-low-cpu-utilization\/","og_locale":"en_US","og_type":"article","og_title":"SOS_SCHEDULER_YIELD waits during low CPU utilization - All-round Database Topics","og_description":"SQL Server OS scheduler unexpectedly throttles the load which decreases the throughput and increases the response time variability.","og_url":"https:\/\/nenadnoveljic.com\/blog\/sos_scheduler_yield-waits-during-low-cpu-utilization\/","og_site_name":"All-round Database Topics","article_published_time":"2019-03-21T17:12:47+00:00","article_modified_time":"2019-03-21T17:25:39+00:00","og_image":[{"url":"https:\/\/nenadnoveljic.com\/blog\/wp-content\/uploads\/2019\/03\/SOS_SCHEDULER_YIELD-300x154.png","type":"","width":"","height":""}],"author":"Nenad Noveljic","twitter_card":"summary_large_image","twitter_creator":"@NenadNoveljic","twitter_misc":{"Written by":"Nenad Noveljic","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/nenadnoveljic.com\/blog\/sos_scheduler_yield-waits-during-low-cpu-utilization\/#article","isPartOf":{"@id":"https:\/\/nenadnoveljic.com\/blog\/sos_scheduler_yield-waits-during-low-cpu-utilization\/"},"author":{"name":"Nenad Noveljic","@id":"https:\/\/nenadnoveljic.com\/blog\/#\/schema\/person\/51458d9dd86dbbdd19f5add451d44efa"},"headline":"SOS_SCHEDULER_YIELD waits during low CPU utilization","datePublished":"2019-03-21T17:12:47+00:00","dateModified":"2019-03-21T17:25:39+00:00","mainEntityOfPage":{"@id":"https:\/\/nenadnoveljic.com\/blog\/sos_scheduler_yield-waits-during-low-cpu-utilization\/"},"wordCount":650,"commentCount":0,"image":{"@id":"https:\/\/nenadnoveljic.com\/blog\/sos_scheduler_yield-waits-during-low-cpu-utilization\/#primaryimage"},"thumbnailUrl":"https:\/\/nenadnoveljic.com\/blog\/wp-content\/uploads\/2019\/03\/SOS_SCHEDULER_YIELD-300x154.png","articleSection":["SQL Server"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/nenadnoveljic.com\/blog\/sos_scheduler_yield-waits-during-low-cpu-utilization\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/nenadnoveljic.com\/blog\/sos_scheduler_yield-waits-during-low-cpu-utilization\/","url":"https:\/\/nenadnoveljic.com\/blog\/sos_scheduler_yield-waits-during-low-cpu-utilization\/","name":"SOS_SCHEDULER_YIELD waits during low CPU utilization - All-round Database Topics","isPartOf":{"@id":"https:\/\/nenadnoveljic.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/nenadnoveljic.com\/blog\/sos_scheduler_yield-waits-during-low-cpu-utilization\/#primaryimage"},"image":{"@id":"https:\/\/nenadnoveljic.com\/blog\/sos_scheduler_yield-waits-during-low-cpu-utilization\/#primaryimage"},"thumbnailUrl":"https:\/\/nenadnoveljic.com\/blog\/wp-content\/uploads\/2019\/03\/SOS_SCHEDULER_YIELD-300x154.png","datePublished":"2019-03-21T17:12:47+00:00","dateModified":"2019-03-21T17:25:39+00:00","author":{"@id":"https:\/\/nenadnoveljic.com\/blog\/#\/schema\/person\/51458d9dd86dbbdd19f5add451d44efa"},"description":"SQL Server OS scheduler unexpectedly throttles the load which decreases the throughput and increases the response time variability.","breadcrumb":{"@id":"https:\/\/nenadnoveljic.com\/blog\/sos_scheduler_yield-waits-during-low-cpu-utilization\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/nenadnoveljic.com\/blog\/sos_scheduler_yield-waits-during-low-cpu-utilization\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/nenadnoveljic.com\/blog\/sos_scheduler_yield-waits-during-low-cpu-utilization\/#primaryimage","url":"https:\/\/nenadnoveljic.com\/blog\/wp-content\/uploads\/2019\/03\/SOS_SCHEDULER_YIELD.png","contentUrl":"https:\/\/nenadnoveljic.com\/blog\/wp-content\/uploads\/2019\/03\/SOS_SCHEDULER_YIELD.png","width":535,"height":275},{"@type":"BreadcrumbList","@id":"https:\/\/nenadnoveljic.com\/blog\/sos_scheduler_yield-waits-during-low-cpu-utilization\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/nenadnoveljic.com\/blog\/"},{"@type":"ListItem","position":2,"name":"SOS_SCHEDULER_YIELD waits during low CPU utilization"}]},{"@type":"WebSite","@id":"https:\/\/nenadnoveljic.com\/blog\/#website","url":"https:\/\/nenadnoveljic.com\/blog\/","name":"All-round Database Topics","description":"Nenad Noveljic","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/nenadnoveljic.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/nenadnoveljic.com\/blog\/#\/schema\/person\/51458d9dd86dbbdd19f5add451d44efa","name":"Nenad Noveljic","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/a97b796613ea48ec8a7b79c8ffe1c685dcffc920c68121f6238d5caab5070670?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/a97b796613ea48ec8a7b79c8ffe1c685dcffc920c68121f6238d5caab5070670?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a97b796613ea48ec8a7b79c8ffe1c685dcffc920c68121f6238d5caab5070670?s=96&d=mm&r=g","caption":"Nenad Noveljic"},"sameAs":["nenad-noveljic-9b746a6","https:\/\/x.com\/NenadNoveljic"],"url":"https:\/\/nenadnoveljic.com\/blog\/author\/nenad\/"}]}},"_links":{"self":[{"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/posts\/2420","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/comments?post=2420"}],"version-history":[{"count":1,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/posts\/2420\/revisions"}],"predecessor-version":[{"id":2439,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/posts\/2420\/revisions\/2439"}],"wp:attachment":[{"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/media?parent=2420"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/categories?post=2420"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nenadnoveljic.com\/blog\/wp-json\/wp\/v2\/tags?post=2420"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}