- Conhecendo o Processo do SQL Server no Windows e Linux – Parte 1
- Conhecendo o Processo do SQL Server no Windows e Linux – Parte 2
- Conhecendo o Processo do SQL Server no Windows e Linux – Parte 3
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:
Já com powershell, uma das maneiras, é com os seguintes comandos:
1 |
Get-WmiObject Win32_Process -Filter "Name = 'sqlservr.exe'" | select CommandLine |
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?
DBA Team Leader na Power Tuning
Comments ( 2 )