Conhecendo o Processo do SQL Server no Windows e Linux – Parte 1

Post 1/3. Este post é parte da série: Conhecendo o Processo do SQL Server
Tempo de leitura estimado: 4 minutos

Apesar do seu enorme papel nas grandes corporações do mundo, o SQL Server, assim como todos os outros SGBDs, não é nada mais nada menos que apenas um processo do sistema operacional. Assim, conhecer os fundamentos de um processo, é essencial para ter sucesso na hora de lidar com o SQL Server.

Há uma série de informações que você pode coletar apenas usando ferramentas do sistema operacional. Sabendo manipular melhor o processo do SQL você consegue não somente ter um maior controle sobre suas instâncias, mas também ter mais cartas na manga para resolver um problema incomum, e até montar interessantes linhas de raciocínio.

Nesta série, iremos mostrar alguns conceitos e ferramentas úteis para o dia-a-dia de quem Administra instâncias SQL Server, não somente em ambiente Windows, mas em Linux, e até docker.

Processos e threads

Eu sempre digo em minhas apresentações que entender o que é uma Thread é essencial pra entender e dominar o SQL Server. Afinal, tudo se resumem a elas. 

Em simples palavras, uma Thread é sequência de instruções (isso, Assembly, nada de SQL ainda) e cada CPU pode executar uma única Thread por vez.

Um processo é uma espécie de “grupo” de Threads, grosseiramente falando. Os processos definem quais recursos suas threads tem acesso. Tais limites podem ser impostos por um usuário administrador, através de configuração, ou por características de hardware e/ou do sistema operacional.  Há uma série de informações que um processo contém.

Processos são isolados de outros processos. Isso significa que threads de um processo não conseguem acessar recursos, como memória, de outros processos da mesma maneira, que é simples, como fazem com seus próprios recursos. Você verá que isso explica muita coisa quando trabalha com múltiplas instâncias!

 

Para resumir:

  • Thread: É a coisa que, de fato, executa instruções em uma CPU. Há várias dessas coisas o tempo inteiro em um SO.
  • Processo: É como se fosse um “grupo” de threads. Um processo não executa código, mas contém, no mínimo, uma thread. Além disso, o processo contém uma série de outras informações que limitam os recursos que uma thread pode acessar.

Executável e Argumentos

Todo processo começa a partir de um arquivo binário, contendo as instruções que o processador deverá executar. No Windows, esse binário geralmente tem a extensão .exe, e no Linux sem uma extensão específica. Ele é gerado a partir de alguma linguagem de programação, como C++, que é o caso do SQL Server.

Iniciar um programa significa pedir ao sistema operacional que execute um arquivo binário como esse. Quando o sistema operacional é acionado para tal ação, ele cria um novo processo em sua lista de processos, e também cria a primeira thread desse processo e a aponta para a primeira instrução que se encontra no arquivo binário. A partir daí, a thread seguirá seu fluxo de execução, realizando as mais variadas operações que foram codificadas, como abrir arquivos, receber conexões, processar texto,  fazer cálculos e até criar novas threads.

Todo executável pode receber um ou mais parâmetros, que são strings passadas por quem o iniciou. A sintaxe é:

NomeExecutavel Parametro1 Parametro2 “Parametro 3, com espacos”

O SQL Server contém uma série de parâmetros documentados e não documentados. Quem determina quais parâmetros um executável irá receber é quem o desenvolveu. Uma correta documentação irá dizer quais os parâmetros existem, como devem ser especificados e o que eles causam na execução daquele software.

No caso do SQL server, existem diversos, e os seguintes são bem conhecidos:

Parâmetro Descrição
-e Caminho para o arquivo de error log
-l Caminho para o arquivo de log do banco master
-d Caminho para o arquivo de dados do banco master
-s Nome da instância

Você pode consultar uma lista de parâmetros que o executável do SQL Server aceita neste endereço.

Você pode observar o executável usado para iniciar um processo, e seus argumentos, usando ferramentas como Gerenciador de Tarefas ou o Process Explorer:

Executável e argumentos do processo do sql server no Gerenciador de Tarefas

 

Executável e parâmetros do processo do SQL no Process Explorer

Já com powershell, uma das maneiras, é com os seguintes comandos:

Você verá um resultado como este:

 

Por hoje é só pessoal. No próximo post, veremos mais alguns conceitos e fonte de informações úteis! Até lá

Exercícios para fixar:

  • Baixe o process explorer e tente ver os argumentos dos vários processo que existem em execução
  • Use o Gerenciador de Tarefas para observar as mesmas informações:
    • Vá na aba “Detalhes”
    • Clique com o botão direito no cabeçalho da tabela
    • Escolha “Selecionar Colunas”
    • Procure na lista e marque a opção “Linha de Comando” 
    • Aproveite e explore as outras colunas que existem
  • Abra novos programas, e observe a linha de comando executada
  • Powershell: Explore o cmdlet Get-Process e o comando Get-WmiObject Win32_Process
  • PERGUNTA DE PROVA: O que acontece quando você usa xp_cmdshell?
Navegue na série Conhecendo o Processo do SQL Server no Windows e Linux – Parte 2 >>
Compartilhe este post!

Comments ( 2 )

  1. / ReplyTássio Carlini
    Caramba que aula, muito bom aprender um pouco mais sobre os processos mais underground. vlw Rodrigo por compartilhar

Leave a Reply