{"id":919,"date":"2018-12-21T13:18:52","date_gmt":"2018-12-21T16:18:52","guid":{"rendered":"http:\/\/thesqltimes.com\/blog\/?p=919"},"modified":"2018-12-26T13:05:00","modified_gmt":"2018-12-26T16:05:00","slug":"conhecendo-o-processo-do-sql-server-no-windows-e-linux-parte-1","status":"publish","type":"post","link":"https:\/\/thesqltimes.com\/blog\/2018\/12\/21\/conhecendo-o-processo-do-sql-server-no-windows-e-linux-parte-1\/","title":{"rendered":"Conhecendo o Processo do SQL Server no Windows e Linux &#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=\"919\" 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\/3. Este post \u00e9 parte da s\u00e9rie: <a href=\"https:\/\/thesqltimes.com\/blog\/series\/sql-process-linux-win\/\" class=\"series-216\" title=\"Conhecendo o Processo do SQL Server\">Conhecendo o Processo 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\"> 4<\/span> <span class=\"rt-label rt-postfix\">minutos<\/span><\/span>\r\n<p style=\"text-align: justify;\">Apesar do seu enorme papel nas grandes corpora\u00e7\u00f5es do mundo, o SQL Server, assim como todos os outros SGBDs, n\u00e3o \u00e9 nada mais nada menos que apenas um processo do sistema operacional. Assim, conhecer os fundamentos de um processo, \u00e9 essencial para ter sucesso na hora de lidar com o SQL Server.<\/p>\r\n\r\n\r\n\r\n<p style=\"text-align: justify;\">H\u00e1 uma s\u00e9rie de informa\u00e7\u00f5es que voc\u00ea pode coletar apenas usando ferramentas do sistema operacional. Sabendo manipular melhor o processo do SQL voc\u00ea consegue n\u00e3o somente ter um maior controle sobre suas inst\u00e2ncias, mas tamb\u00e9m ter mais cartas na manga para resolver um problema incomum, e at\u00e9 montar interessantes linhas de racioc\u00ednio.<\/p>\r\n\r\n\r\n\r\n<p style=\"text-align: justify;\">Nesta s\u00e9rie, iremos mostrar alguns conceitos e ferramentas \u00fateis para o dia-a-dia de quem Administra inst\u00e2ncias SQL Server, n\u00e3o somente em ambiente Windows, mas em Linux, e at\u00e9 docker.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Processos e threads<\/h2>\r\n\r\n\r\n\r\n<p style=\"text-align: justify;\">Eu sempre digo em minhas apresenta\u00e7\u00f5es que entender o que \u00e9 uma Thread \u00e9 essencial pra entender e dominar o SQL Server. Afinal, tudo se resumem a elas.\u00a0<\/p>\r\n\r\n\r\n\r\n<p style=\"text-align: justify;\">Em simples palavras, uma Thread \u00e9 sequ\u00eancia de instru\u00e7\u00f5es (isso, Assembly, nada de SQL ainda) e cada CPU pode executar uma \u00fanica Thread por vez.<\/p>\r\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-973 size-full\" src=\"http:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2018\/12\/threads.png\" alt=\"\" width=\"861\" height=\"644\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2018\/12\/threads.png 861w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2018\/12\/threads-300x224.png 300w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2018\/12\/threads-768x574.png 768w\" sizes=\"auto, (max-width: 861px) 100vw, 861px\" \/><\/p>\r\n\r\n\r\n\r\n<p style=\"text-align: justify;\">Um processo \u00e9 uma esp\u00e9cie de &#8220;grupo&#8221; de Threads, grosseiramente falando. Os processos definem quais recursos suas threads tem acesso. Tais limites podem ser impostos por um usu\u00e1rio administrador, atrav\u00e9s de configura\u00e7\u00e3o, ou por caracter\u00edsticas de hardware e\/ou do sistema operacional.\u00a0 H\u00e1 uma s\u00e9rie de informa\u00e7\u00f5es que um processo cont\u00e9m.<\/p>\r\n\r\n\r\n\r\n<p>Processos s\u00e3o isolados de outros processos. Isso significa que threads de um processo n\u00e3o conseguem acessar recursos, como mem\u00f3ria, de outros processos da mesma maneira, que \u00e9 simples, como fazem com seus pr\u00f3prios recursos. Voc\u00ea ver\u00e1 que isso explica muita coisa quando trabalha com m\u00faltiplas inst\u00e2ncias!<\/p>\r\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-974 size-large\" src=\"http:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2018\/12\/processos-1024x632.png\" alt=\"\" width=\"1024\" height=\"632\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2018\/12\/processos-1024x632.png 1024w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2018\/12\/processos-300x185.png 300w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2018\/12\/processos-768x474.png 768w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2018\/12\/processos.png 1727w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\r\n<p>&nbsp;<\/p>\r\n<p>Para resumir:<\/p>\r\n<ul>\r\n<li>Thread: \u00c9 a coisa que, de fato, executa instru\u00e7\u00f5es em uma CPU. H\u00e1 v\u00e1rias dessas coisas o tempo inteiro em um SO.<\/li>\r\n<li>Processo: \u00c9 como se fosse um &#8220;grupo&#8221; de threads. Um processo n\u00e3o executa c\u00f3digo, mas cont\u00e9m, no m\u00ednimo, uma thread. Al\u00e9m disso, o processo cont\u00e9m uma s\u00e9rie de outras informa\u00e7\u00f5es que limitam os recursos que uma thread pode acessar.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">Execut\u00e1vel e Argumentos<\/h4>\r\n\r\n\r\n\r\n<p style=\"text-align: justify;\">Todo processo come\u00e7a a partir de um arquivo bin\u00e1rio, contendo as instru\u00e7\u00f5es que o processador dever\u00e1 executar. No Windows, esse bin\u00e1rio geralmente tem a extens\u00e3o .exe, e no Linux sem uma extens\u00e3o espec\u00edfica. Ele \u00e9 gerado a partir de alguma linguagem de programa\u00e7\u00e3o, como C++, que \u00e9 o caso do SQL Server.<\/p>\r\n\r\n\r\n\r\n<p style=\"text-align: justify;\">Iniciar um programa significa pedir ao sistema operacional que execute um arquivo bin\u00e1rio como esse. Quando o sistema operacional \u00e9 acionado para tal a\u00e7\u00e3o, ele cria um novo processo em sua lista de processos, e tamb\u00e9m cria a primeira thread desse processo e a aponta para a primeira instru\u00e7\u00e3o que se encontra no arquivo bin\u00e1rio. A partir da\u00ed, a thread seguir\u00e1 seu fluxo de execu\u00e7\u00e3o, realizando as mais variadas opera\u00e7\u00f5es que foram codificadas, como abrir arquivos, receber conex\u00f5es, processar texto,\u00a0 fazer c\u00e1lculos e at\u00e9 criar novas threads.<\/p>\r\n\r\n\r\n\r\n<p>Todo execut\u00e1vel pode receber um ou mais par\u00e2metros, que s\u00e3o strings passadas por quem o iniciou. A sintaxe \u00e9:<\/p>\r\n\r\n\r\n\r\n<p>NomeExecutavel Parametro1 Parametro2 &#8220;Parametro 3, com espacos&#8221;<\/p>\r\n\r\n\r\n\r\n<p style=\"text-align: justify;\">O SQL Server cont\u00e9m uma s\u00e9rie de par\u00e2metros documentados e n\u00e3o documentados. Quem determina quais par\u00e2metros um execut\u00e1vel ir\u00e1 receber \u00e9 quem o desenvolveu. Uma correta documenta\u00e7\u00e3o ir\u00e1 dizer quais os par\u00e2metros existem, como devem ser especificados e o que eles causam na execu\u00e7\u00e3o daquele software.<\/p>\r\n\r\n\r\n\r\n<p>No caso do SQL server, existem diversos, e os seguintes s\u00e3o bem conhecidos:<\/p>\r\n\r\n\r\n\r\n<table class=\"wp-block-table\">\r\n<tbody>\r\n<tr>\r\n<td>Par\u00e2metro<\/td>\r\n<td>Descri\u00e7\u00e3o<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>-e<\/td>\r\n<td>Caminho para o arquivo de error log<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>-l<\/td>\r\n<td>Caminho para o arquivo de log do banco master<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>-d<\/td>\r\n<td>Caminho para o arquivo de dados do banco master<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>-s<\/td>\r\n<td>Nome da inst\u00e2ncia<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n\r\n\r\n\r\n<p>Voc\u00ea pode consultar uma lista de par\u00e2metros que o execut\u00e1vel do SQL Server aceita <a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/database-engine\/configure-windows\/database-engine-service-startup-options?view=sql-server-2017\">neste endere\u00e7o<\/a>.<\/p>\r\n<p>Voc\u00ea pode observar o execut\u00e1vel usado para iniciar um processo, e seus argumentos, usando ferramentas como Gerenciador de Tarefas ou o <a href=\"https:\/\/docs.microsoft.com\/en-us\/sysinternals\/downloads\/process-explorer\">Process Explorer<\/a>:<\/p>\r\n<figure id=\"attachment_930\" aria-describedby=\"caption-attachment-930\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-930\" src=\"http:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2018\/12\/image-5-1024x69.png\" alt=\"\" width=\"1024\" height=\"69\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2018\/12\/image-5-1024x69.png 1024w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2018\/12\/image-5-300x20.png 300w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2018\/12\/image-5-768x51.png 768w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2018\/12\/image-5.png 1075w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption id=\"caption-attachment-930\" class=\"wp-caption-text\">Execut\u00e1vel e argumentos do processo do sql server no Gerenciador de Tarefas<\/figcaption><\/figure>\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n\r\n\r\n<figure id=\"attachment_976\" aria-describedby=\"caption-attachment-976\" style=\"width: 759px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-976 size-full\" src=\"http:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2018\/12\/sqlserver-executable-procexp.png\" alt=\"\" width=\"759\" height=\"140\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2018\/12\/sqlserver-executable-procexp.png 759w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2018\/12\/sqlserver-executable-procexp-300x55.png 300w\" sizes=\"auto, (max-width: 759px) 100vw, 759px\" \/><figcaption id=\"caption-attachment-976\" class=\"wp-caption-text\">Execut\u00e1vel e par\u00e2metros do processo do SQL no Process Explorer<\/figcaption><\/figure>\r\n<p>J\u00e1 com powershell, uma das maneiras, \u00e9 com os seguintes comandos:<\/p>\r\n<pre class=\"lang:ps decode:true\" title=\"Obtendo informa\u00e7\u00f5es do execut\u00e1vel e argumentos do processo do SQL Server\">Get-WmiObject Win32_Process -Filter \"Name = 'sqlservr.exe'\" | select CommandLine<\/pre>\r\n<p>Voc\u00ea ver\u00e1 um resultado como este:<\/p>\r\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-977\" src=\"http:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2018\/12\/sqlprocess-win-powershell.png\" alt=\"\" width=\"864\" height=\"107\" srcset=\"https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2018\/12\/sqlprocess-win-powershell.png 864w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2018\/12\/sqlprocess-win-powershell-300x37.png 300w, https:\/\/thesqltimes.com\/blog\/wp-content\/uploads\/2018\/12\/sqlprocess-win-powershell-768x95.png 768w\" sizes=\"auto, (max-width: 864px) 100vw, 864px\" \/><\/p>\r\n<p>&nbsp;<\/p>\r\n<p>Por hoje \u00e9 s\u00f3 pessoal. No pr\u00f3ximo post, veremos mais alguns conceitos e fonte de informa\u00e7\u00f5es \u00fateis! At\u00e9 l\u00e1<\/p>\r\n<p>Exerc\u00edcios para fixar:<\/p>\r\n<ul>\r\n<li>Baixe o process explorer e tente ver os argumentos dos v\u00e1rios processo que existem em execu\u00e7\u00e3o<\/li>\r\n<li>Use o Gerenciador de Tarefas para observar as mesmas informa\u00e7\u00f5es:\r\n<ul>\r\n<li>V\u00e1 na aba &#8220;Detalhes&#8221;<\/li>\r\n<li>Clique com o bot\u00e3o direito no cabe\u00e7alho da tabela<\/li>\r\n<li>Escolha &#8220;Selecionar Colunas&#8221;<\/li>\r\n<li>Procure na lista e marque a op\u00e7\u00e3o &#8220;Linha de Comando&#8221;\u00a0<\/li>\r\n<li>Aproveite e explore as outras colunas que existem<\/li>\r\n<\/ul>\r\n<\/li>\r\n<li>Abra novos programas, e observe a linha de comando executada<\/li>\r\n<li><strong><span style=\"color: #0000ff;\">Powershell: Explore o cmdlet <a href=\"https:\/\/docs.microsoft.com\/en-us\/powershell\/module\/microsoft.powershell.management\/get-process?view=powershell-6\">Get-Process<\/a>\u00a0e o comando <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/desktop\/cimwin32prov\/win32-process\">Get-WmiObject Win32_Process<\/a><\/span><\/strong><\/li>\r\n<li><span style=\"color: #ff6600;\"><strong>PERGUNTA DE PROVA: O que acontece quando voc\u00ea usa xp_cmdshell?<\/strong><\/span><\/li>\r\n<\/ul>\r\n","protected":false},"excerpt":{"rendered":"<div class=\"seriesmeta\">This entry is part 1 of 3 in the series <a href=\"https:\/\/thesqltimes.com\/blog\/series\/sql-process-linux-win\/\" class=\"series-216\" title=\"Conhecendo o Processo do SQL Server\">Conhecendo o Processo do SQL Server<\/a><\/div><p>Apesar do seu enorme papel nas grandes corpora\u00e7\u00f5es do mundo, o SQL Server, assim como todos os outros SGBDs, n\u00e3o \u00e9 nada mais nada menos que apenas um processo do sistema operacional. Assim, conhecer os fundamentos de um processo, \u00e9 essencial para ter sucesso na hora de lidar com o SQL Server. H\u00e1 uma s\u00e9rie&hellip;&nbsp;<a href=\"https:\/\/thesqltimes.com\/blog\/2018\/12\/21\/conhecendo-o-processo-do-sql-server-no-windows-e-linux-parte-1\/\" rel=\"bookmark\"><span class=\"screen-reader-text\">Conhecendo o Processo do SQL Server no Windows e Linux &#8211; Parte 1<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":923,"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":[1],"tags":[209,217,206,73,218,87],"series":[216],"class_list":["post-919","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-linux","tag-process","tag-process-explorer","tag-sql-server","tag-task-manager","tag-windows","series-sql-process-linux-win"],"_links":{"self":[{"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/posts\/919","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=919"}],"version-history":[{"count":15,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/posts\/919\/revisions"}],"predecessor-version":[{"id":998,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/posts\/919\/revisions\/998"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/media\/923"}],"wp:attachment":[{"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/media?parent=919"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/categories?post=919"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/tags?post=919"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/thesqltimes.com\/blog\/wp-json\/wp\/v2\/series?post=919"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}