{"id":876,"date":"2016-07-04T15:28:15","date_gmt":"2016-07-04T18:28:15","guid":{"rendered":"http:\/\/thesqltimes.com\/blog\/?p=876"},"modified":"2016-07-04T15:28:15","modified_gmt":"2016-07-04T18:28:15","slug":"after-sqlserverdf-xxxiii-sql-server-cpu-foundations","status":"publish","type":"post","link":"https:\/\/thesqltimes.com\/blog\/2016\/07\/04\/after-sqlserverdf-xxxiii-sql-server-cpu-foundations\/","title":{"rendered":"After SQLServerDF XXXIII: SQL Server CPU Foundations"},"content":{"rendered":"<div class=\"pld-like-dislike-wrap pld-template-1\">\r\n    <div class=\"pld-like-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-like-trigger pld-like-dislike-trigger  \" title=\"Muito \u00fatil!\" data-post-id=\"876\" data-trigger-type=\"like\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                        <i class=\"fas fa-thumbs-up\"><\/i>\r\n                <\/a>\r\n    <span class=\"pld-like-count-wrap pld-count-wrap\">    <\/span>\r\n<\/div><\/div><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Tempo de Leitura:<\/span> <span class=\"rt-time\"> &lt; 1<\/span> <span class=\"rt-label rt-postfix\">minuto<\/span><\/span><p>Na \u00faltima quarta-feira (29\/06\/2016) tive a oportunidade de apresentar o tema que gosto bastante: CPU. A apresenta\u00e7\u00e3o &#8220;SQL Server: CPU Foundations&#8221; foi bem legal e apesar de ter falhado em umas das demos, gostei bastante.<\/p>\n<p>Os scripts podem ser baixados no link\u00a0<a href=\"https:\/\/drive.google.com\/open?id=0B9MFBfb3HCHXNG9TM2pwcW1ILTg\">https:\/\/drive.google.com\/open?id=0B9MFBfb3HCHXNG9TM2pwcW1ILTg<\/a><\/p>\n<p><strong>A demo que falhou<\/strong><\/p>\n<p>H\u00e1 uma demo nesta apresenta\u00e7\u00e3o cujo o objetivo \u00e9 demonstrar como \u00e9 poss\u00edvel ter valores de CPU acima de 100%. Nesta demo, o SQL Server \u00e9 configurado para rodar somente nas CPUs 2 e 3, al\u00e9m de abrir duas sess\u00f5es que executam uma query que causa o uso de 100% de CPU. \u00a0O que se espera \u00e9 ver o processo do SQL Server consumindo duas CPUs em 100%, uma em cada sess\u00e3o, e causando os 200% de CPU no perfmon.<\/p>\n<p>Por\u00e9m, ao realizar esta demonstra\u00e7\u00e3o, o SQL Server jogava as sess\u00f5es apenas em uma CPU. Ap\u00f3s analisar esse comportamento com mais calma, eu notei um detalhe que havia esquecido de considerar ao realiz\u00e1-la: Os schedulers. Os schedulers s\u00e3o uma esp\u00e9cie de porta para a CPU. O SQL Server usa os schedulers para gerenciar a \u00a0execu\u00e7\u00e3o de suas tarefas\u00a0(workers, pra ser mais exato). \u00a0Toda tarefa tem um scheduler associado. \u00a0Baseado em alguns fatores, dentre eles, a carga do schedulers (quantas tarefas j\u00e1 est\u00e3o &#8220;alocadas&#8221; no scheduler), o SQL Server escolhe em qual scheduler a task vai rodar. \u00a0Se duas tasks est\u00e3o configuradas para rodar no mesmo scheduler, ent\u00e3o, essas tasks podem acabar na mesma CPU.<\/p>\n<p>E era isso o que ocorreu na demonstra\u00e7\u00e3o. Os scripts acima cont\u00e9m os detalhes de como reproduzir a demo que falhou e contornar quando o SQL Server tentar alocar as duas conex\u00f5es no mesmo scheduler.<\/p>\n<p>&nbsp;<\/p>\n<p>Obrigado!<\/p>\n<p>&nbsp;<\/p>\n[]&#8217;s<br \/>\nRodrigo Ribeiro Gomes<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Na \u00faltima quarta-feira (29\/06\/2016) tive a oportunidade de apresentar o tema que gosto bastante: CPU. A apresenta\u00e7\u00e3o &#8220;SQL Server: CPU Foundations&#8221; foi bem legal e apesar de ter falhado em umas das demos, gostei bastante. Os scripts podem ser baixados no link\u00a0https:\/\/drive.google.com\/open?id=0B9MFBfb3HCHXNG9TM2pwcW1ILTg A demo que falhou H\u00e1 uma demo nesta apresenta\u00e7\u00e3o cujo o objetivo \u00e9&hellip;&nbsp;<a href=\"https:\/\/thesqltimes.com\/blog\/2016\/07\/04\/after-sqlserverdf-xxxiii-sql-server-cpu-foundations\/\" rel=\"bookmark\"><span class=\"screen-reader-text\">After SQLServerDF XXXIII: SQL Server CPU Foundations<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","footnotes":""},"categories":[2,7],"tags":[147,197,198,73,194],"series":[],"class_list":["post-876","post","type-post","status-publish","format-standard","hentry","category-apresentacoes","category-sql-server","tag-comunidade","tag-cpu-foundations","tag-scheduler","tag-sql-server","tag-sqlserverdf"],"_links":{"self":[{"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/posts\/876","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/comments?post=876"}],"version-history":[{"count":1,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/posts\/876\/revisions"}],"predecessor-version":[{"id":877,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/posts\/876\/revisions\/877"}],"wp:attachment":[{"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/media?parent=876"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/categories?post=876"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/tags?post=876"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/series?post=876"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}