{"id":1049,"date":"2019-02-20T07:30:27","date_gmt":"2019-02-20T10:30:27","guid":{"rendered":"http:\/\/thesqltimes.com\/blog\/?p=1049"},"modified":"2019-02-20T22:58:47","modified_gmt":"2019-02-21T01:58:47","slug":"desempenho-do-processador-x-desempenho-do-sql-server-parte-1","status":"publish","type":"post","link":"https:\/\/thesqltimes.com\/blog\/2019\/02\/20\/desempenho-do-processador-x-desempenho-do-sql-server-parte-1\/","title":{"rendered":"Desempenho do Processador x Desempenho do SQL Server &#8211; Parte 1"},"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=\"1049\" 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><div class=\"seriesmeta\">Post 1\/4. Este post \u00e9 parte da s\u00e9rie: <a href=\"https:\/\/thesqltimes.com\/blog\/series\/desempenho-do-processador-x-desempenho-do-sql-server\/\" class=\"series-225\" title=\"Desempenho do Processador x Desempenho do SQL Server\">Desempenho do Processador x Desempenho do SQL Server<\/a>\r\n<\/div>\r\n<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\"> 3<\/span> <span class=\"rt-label rt-postfix\">minutos<\/span><\/span><p>A CPU \u00e9 um dos recursos mais fundamentais, sen\u00e3o o mais fundamental, de um computador. \u00c9 ali que todos os recursos de um computador s\u00e3o coordenados.\u00a0 Este \u00e9 o primeiro post de mais uma s\u00e9rie onde vamos aprender conceitos b\u00e1sicos sobre velocidade de CPU e como podemos usar isso para an\u00e1lises simples em consultas de um SQL Server.<\/p>\n<p>Hoje vamos obter um conhecimento fundamental sobre CPU antes de partir para o SQL Server!<\/p>\n<h2>Clocks e Hertz<\/h2>\n<p>Voc\u00ea j\u00e1 deve estar cansado de ver os termos \u201c2.5 GHz\u201d, \u201c3.0 GHz\u201d, etc. Mas voc\u00ea sabe, de fato, o que eles significam? Embora eu necessite de uma s\u00e9rie exclusiva somente para este assunto, \u00e9 necess\u00e1rio um simples entendimento:<\/p>\n<ul>\n<li>Quanto maior este valor, mais r\u00e1pido as instru\u00e7\u00f5es s\u00e3o executadas<\/li>\n<\/ul>\n<p>Basicamente,\u00a0 toda CPU tem um \u201c<a href=\"https:\/\/en.wikipedia.org\/wiki\/Clock_rate\">clock<\/a>\u201c, que \u00e9 um dispositivo que \u201cliga\u201d e \u201cdesliga\u201d\u00a0 X vezes por segundo.\u00a0 Cada vez que esse dispositivo \u201cliga\u201d, n\u00f3s dizemos que houve um \u201cclock tick\u201d, ou, apenas \u201ctick\u201d.\u00a0 Esse \u00e9 o valor que voc\u00ea v\u00ea nas especifica\u00e7\u00f5es:<\/p>\n<ul>\n<li>Um processador de 1 Hertz (1 Hz) significa que seu clock liga e delisga 1 vez por segundo (1 tick por segundo)<\/li>\n<li>1000 Hertz, s\u00e3o 1000 ticks por segundo. Aqui se pode aplicar as unidades do SI (<a href=\"https:\/\/en.wikipedia.org\/wiki\/International_System_of_Units\">Sistema Internacional de Medidas<\/a>) : 1000 Hertz = 1 KHz (Kilo Hertz)<\/li>\n<li>1 milh\u00e3o de Hertz, ou 1 MHz, significa 1 milh\u00e3o de ticks por segundo.<\/li>\n<li>2.5 GHz (Giga Hertz) , significa 2.5 x\u00a0 1 bilh\u00e3o (Giga), que equivale a 2 bilh\u00f5es e 500 milh\u00f5es de vezes por segundo<\/li>\n<\/ul>\n<p>Uma vez que a velocidade do processador dita quantos ticks temos em um segundo, ent\u00e3o, podemos calcular quanto tempo dura um tick.\u00a0Pode parecer confuso o que eu vou dizer agora, mas \u00e9 apenas uma quest\u00e3o de l\u00f3gica, pare e reflita.<\/p>\n<p>Cada tick do clock, leva um tempo fixo. Nenhum tick leva mais ou menos tempo que o outro tick. Ent\u00e3o, quanto\u00a0<strong>mais lento<\/strong>\u00a0o processador,\u00a0\u00a0<strong>maior<\/strong>\u00a0ser\u00e1 o tempo de 1 tick.\u00a0 Pense em n\u00fameros pequenos, que vai ajudar:<\/p>\n<p id=\"NWCfmlm\"><a href=\"http:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/02\/img_5c6ccc0ad4112.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1053 size-full\" src=\"http:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/02\/img_5c6ccc0ad4112.png\" sizes=\"auto, (max-width: 991px) 100vw, 991px\" srcset=\"http:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/02\/img_5c6ccc0ad4112.png 991w, http:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/02\/img_5c6ccc0ad4112-300x88.png 300w, http:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/02\/img_5c6ccc0ad4112-768x226.png 768w\" alt=\"\" width=\"991\" height=\"291\" \/><\/a><\/p>\n<ul>\n<li>Em um processador de 2 Hertz (dois ticks por segundo), cada tick leva 500 ms (0.5 segundos)<\/li>\n<li>Em um processador de 4 Hertz (quatro ticks por segundo), cada tick leva 250 ms ( 0.250 segundos)<\/li>\n<li>Percebeu a f\u00f3rmula m\u00e1gica pra calcular o tempo de 1 tick?\n<ul>\n<li>Tempo de um Tick, em Milssegundos = 1000ms\/&lt;N\u00famero Hertz&gt;<\/li>\n<li>2.5 MHz = 1000\/2500000 =\u00a00,0004 ms (1 tick = 400 nanossegundos)<\/li>\n<li>1.0 MHz = 1000\/1000000 =\u00a00,001 (1 tick = 1000 nanossegundos)<\/li>\n<li>2.5 GHz\u00a0 resulta num tick muuuuuuuuuuuuuuuuuuito pequeno! fa\u00e7a as contas voc\u00ea mesmo!<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>As instru\u00e7\u00f5es que um processador pode executar, gastam N ticks (isso porque, grosseiramente falando, cada vez que o clock liga, ele aciona certos circuitos e sincroniza o processador com a placa m\u00e3e, etc.) . Isso vai depender de cada processador, e de cada instru\u00e7\u00e3o.\u00a0 A velocidade da CPU dita o tempo de cada instru\u00e7\u00e3o:<\/p>\n<div id=\"attachment_1051\" class=\"wp-caption aligncenter\">\n<p><a href=\"http:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/02\/img_5c6cc95c05579.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1051 size-full\" src=\"http:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/02\/img_5c6cc95c05579.png\" sizes=\"auto, (max-width: 1069px) 100vw, 1069px\" srcset=\"http:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/02\/img_5c6cc95c05579.png 1069w, http:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/02\/img_5c6cc95c05579-300x139.png 300w, http:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/02\/img_5c6cc95c05579-768x355.png 768w, http:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2019\/02\/img_5c6cc95c05579-1024x473.png 1024w\" alt=\"\" width=\"1069\" height=\"494\" \/><\/a><\/p>\n<p class=\"wp-caption-text\">Em uma cpu fict\u00edcia de 2 Hz, uma instru\u00e7\u00e3o que gastasse 1 tick, demoraria 500 ms para executar. Uma instru\u00e7\u00e3o que custasse dois ticks, levaria 1 segundo. E assim por diante\u2026<\/p>\n<\/div>\n<h2 style=\"width: auto;\">Por que saber de tudo isso \u00e9 importante?<\/h2>\n<p style=\"text-align: justify;\">Quando voc\u00ea traz esses conceitos para o sistema operacional, e para os seus programas, como o SQL server, fica f\u00e1cil entender certas coisas. No caso de uma simples consulta SQL, voc\u00ea tem centenas de milhares de instru\u00e7\u00f5es executando.\u00a0 Por exemplo, uma query como esta:<\/p>\n<pre class=\"lang:tsql decode:true \">SELECT SUM(Valor) FROM Pedidos<\/pre>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">Pode causar a execu\u00e7\u00e3o de milhares de instru\u00e7\u00f5es. Vai depender da quantidade de registros, tamanho, concorr\u00eancia, etc. A quest\u00e3o \u00e9 que, no final das contas, tudo se resume ao que a CPU ir\u00e1 fazer, e entender a velocidade do seu processador vai te ajudar a compreender certos \u201cfen\u00f4menos\u201d e at\u00e9 planejar melhor seu ambiente. Imagine como esta query seria afetada se o tempo de cada instru\u00e7\u00e3o dobrasse\u2026<\/p>\n<p>No pr\u00f3ximo\u00a0 post vou mostrar todos estes conceito na pr\u00e1tica, quando voc\u00ea executa uma query no SQL Server!<\/p>\n<p>At\u00e9 l\u00e1!<\/p>\n<p><strong>UPDATE:<\/strong>\u00a0Obrigado ao\u00a0<a href=\"https:\/\/luizlima.net\/\">Luiz Vitor<\/a>\u00a0pelas indica\u00e7\u00f5es de corre\u00e7\u00e3o no texto!<br \/>\n<strong>UPDATE 2:<\/strong>\u00a0Muito obrigado Jos\u00e9 Diz pelas dicas, principalmente sobre o sistema internacional de medidas!<\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"seriesmeta\">This entry is part 1 of 4 in the series <a href=\"https:\/\/thesqltimes.com\/blog\/series\/desempenho-do-processador-x-desempenho-do-sql-server\/\" class=\"series-225\" title=\"Desempenho do Processador x Desempenho do SQL Server\">Desempenho do Processador x Desempenho do SQL Server<\/a><\/div><p>A CPU \u00e9 um dos recursos mais fundamentais, sen\u00e3o o mais fundamental, de um computador. \u00c9 ali que todos os recursos de um computador s\u00e3o coordenados.\u00a0 Este \u00e9 o primeiro post de mais uma s\u00e9rie onde vamos aprender conceitos b\u00e1sicos sobre velocidade de CPU e como podemos usar isso para an\u00e1lises simples em consultas de&hellip;&nbsp;<a href=\"https:\/\/thesqltimes.com\/blog\/2019\/02\/20\/desempenho-do-processador-x-desempenho-do-sql-server-parte-1\/\" rel=\"bookmark\"><span class=\"screen-reader-text\">Desempenho do Processador x Desempenho do SQL Server &#8211; Parte 1<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":1050,"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":[3,7,93],"tags":[230,31,229,231,228,232,226,73,227],"series":[225],"class_list":["post-1049","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-banco-de-dados-2","category-sql-server","category-windows","tag-clock","tag-cpu","tag-cpu-ticks","tag-energia","tag-ghz","tag-power-plan","tag-processador","tag-sql-server","tag-velocidade","series-desempenho-do-processador-x-desempenho-do-sql-server"],"_links":{"self":[{"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/posts\/1049","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=1049"}],"version-history":[{"count":10,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/posts\/1049\/revisions"}],"predecessor-version":[{"id":1066,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/posts\/1049\/revisions\/1066"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/media\/1050"}],"wp:attachment":[{"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/media?parent=1049"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/categories?post=1049"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/tags?post=1049"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/series?post=1049"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}