Ideia central
O ecossistema SQL Server possui ferramentas para desenvolvimento, administração, monitoramento e diagnóstico. Conhecer as opções disponíveis, tanto da Microsoft quanto da comunidade, é fundamental para trabalhar com eficiência.
SSMS: SQL Server Management Studio
Ferramenta gráfica principal da Microsoft para administração e desenvolvimento. Gratuita, Windows-only.
Funcionalidades principais:
- Object Explorer: navegar pela instância, bancos, tabelas, SPs, jobs
- Query Editor com IntelliSense, planos de execução gráficos, resultados em grid
- Activity Monitor: sessões, I/O, CPU, waits em tempo real
- SQL Server Agent: criar e gerenciar jobs de manutenção
- Database Diagrams: diagrama visual do schema
- Import/Export Wizard: ETL simples via wizard
- Backup/Restore via interface gráfica
- Always On Dashboard: monitoramento de Availability Groups
Atalhos indispensáveis:
| Atalho | Ação |
|---|---|
F5 | Executar query (ou seleção) |
Ctrl+L | Ver plano de execução estimado |
Ctrl+M | Habilitar plano de execução real |
Ctrl+K, Ctrl+C | Comentar seleção |
Ctrl+K, Ctrl+U | Descomentar seleção |
Ctrl+R | Mostrar/ocultar painel de resultados |
Alt+F1 (fn+F1) | sp_help sobre o objeto selecionado |
Ctrl+Shift+L | Converter seleção para minúsculas |
Ctrl+F5 | Parse (verificar sintaxe sem executar) |
Azure Data Studio
Editor de código moderno (baseado no VS Code), multiplataforma (Windows, Mac, Linux). Indicado para desenvolvedores e quem trabalha com Azure SQL / SQL Server containers.
Vantagens sobre SSMS:
- Multiplataforma
- Notebooks SQL (mistura SQL com markdown, ótimo para documentar análises)
- Extensões (GitHub Copilot, SandDance para visualizações, etc.)
- Terminal integrado
- Source control integrado (Git)
Limitações: não tem todas as funcionalidades de administração do SSMS (Agent, full HA management, etc.)
Dynamic Management Views (DMVs)
Views e funções do sistema que expõem o estado interno do SQL Server, a ferramenta mais poderosa de diagnóstico sem instalar nada extra.
-- Top queries por CPU
SELECT TOP 10
qs.total_worker_time / qs.execution_count AS avg_cpu,
qs.execution_count,
SUBSTRING(st.text, (qs.statement_start_offset/2)+1,
((qs.statement_end_offset - qs.statement_start_offset)/2)+1) AS query_text
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
ORDER BY avg_cpu DESC;
-- Top queries por I/O lógico
SELECT TOP 10
total_logical_reads / execution_count AS avg_logical_reads,
execution_count,
SUBSTRING(st.text, (qs.statement_start_offset/2)+1,
((qs.statement_end_offset - qs.statement_start_offset)/2)+1) AS query_text
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
ORDER BY avg_logical_reads DESC;
-- Wait statistics (o que o servidor está esperando)
SELECT TOP 20
wait_type,
wait_time_ms / 1000.0 AS wait_seconds,
waiting_tasks_count,
wait_time_ms / waiting_tasks_count AS avg_wait_ms
FROM sys.dm_os_wait_stats
WHERE wait_type NOT IN ( -- filtrar waits benignos
'SLEEP_TASK','BROKER_TO_FLUSH','BROKER_TASK_STOP','CLR_AUTO_EVENT',
'DISPATCHER_QUEUE_SEMAPHORE','FT_IFTS_SCHEDULER_IDLE_WAIT',
'HADR_WORK_QUEUE','HADR_FILESTREAM_IOMGR_IOCOMPLETION',
'ONDEMAND_TASK_QUEUE','REQUEST_FOR_DEADLOCK_MONITOR',
'RESOURCE_QUEUE','SERVER_IDLE_CHECK','SLEEP_DBSTARTUP',
'SLEEP_DCOMSTARTUP','SLEEP_MASTERDBREADY','SLEEP_MASTERMDREADY',
'SLEEP_MASTERUPGRADED','SLEEP_MSDBSTARTUP','SLEEP_SYSTEMTASK',
'SLEEP_TEMPDBSTARTUP','SNI_HTTP_ACCEPT','SP_SERVER_DIAGNOSTICS_SLEEP',
'SQLTRACE_BUFFER_FLUSH','WAITFOR','LOGMGR_QUEUE','CHECKPOINT_QUEUE',
'XE_DISPATCHER_WAIT','XE_TIMER_EVENT','BROKER_EVENTHANDLER',
'RESOURCE_GOVERNOR_IDLE','XE_DISPATCHER_JOIN'
)
ORDER BY wait_time_ms DESC;
-- Índices faltantes sugeridos pelo otimizador
SELECT TOP 20
ROUND(migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans), 0) AS score,
migs.last_user_seek,
mid.statement AS tabela,
mid.equality_columns,
mid.inequality_columns,
mid.included_columns
FROM sys.dm_db_missing_index_group_stats migs
JOIN sys.dm_db_missing_index_groups mig ON migs.group_handle = mig.index_group_handle
JOIN sys.dm_db_missing_index_details mid ON mig.index_handle = mid.index_handle
ORDER BY score DESC;SQL Server Profiler / Extended Events
SQL Server Profiler é a ferramenta gráfica legada para captura de eventos (deprecated, mas ainda funcional). Extended Events (XE) é o substituto moderno, mais leve e poderoso.
-- Criar session de Extended Events para capturar queries lentas
CREATE EVENT SESSION [QuerysLentas] ON SERVER
ADD EVENT sqlserver.sql_statement_completed (
WHERE duration > 1000000 -- > 1 segundo (em microssegundos)
ACTION (sqlserver.sql_text, sqlserver.database_name, sqlserver.username)
)
ADD TARGET package0.ring_buffer (SET max_memory = 51200)
WITH (MAX_DISPATCH_LATENCY = 5 SECONDS);
-- Iniciar a session
ALTER EVENT SESSION [QuerysLentas] ON SERVER STATE = START;sp_WhoIsActive
Script open source de Adam Machanic, o melhor substituto para sp_who e sp_who2. Mostra sessões ativas com query, wait type, bloqueios, plano de execução, duração, etc.
-- Instalação: baixar de http://whoisactive.com e executar no master
EXEC sp_WhoIsActive @get_plans = 1, @get_locks = 1;Brent Ozar’s First Responder Kit
Conjunto de scripts open source amplamente adotados pela comunidade:
| SP | Função |
|---|---|
sp_Blitz | Checklist de saúde da instância, encontrando problemas de configuração |
sp_BlitzFirst | Diagnóstico de performance em tempo real (waits, queries) |
sp_BlitzCache | Analisa o plan cache: top queries por CPU/IO/memória |
sp_BlitzIndex | Analisa índices: faltando, duplicados, não usados |
sp_BlitzLock | Analisa deadlocks e histórico de bloqueios |
-- Verificação rápida de saúde
EXEC sp_Blitz @CheckUserDatabaseObjects = 1;
-- Top queries por CPU
EXEC sp_BlitzCache @SortOrder = 'cpu';
-- Análise de índices de uma tabela
EXEC sp_BlitzIndex @TableName = 'pedidos';Download: https://www.brentozar.com/first-aid/
Ola Hallengren Maintenance Solution
Scripts de manutenção amplamente usados em produção:
IndexOptimize: rebuild/reorganize inteligente baseado na fragmentação realDatabaseBackup: backup com verificação e limpeza automáticaDatabaseIntegrityCheck:DBCC CHECKDBagendado com alertas
Download: https://ola.hallengren.com/
Conexões
- sqlserver-visao-geral - Contexto e arquitetura do SQL Server
- sqlserver-administracao - Onde as ferramentas de admin são aplicadas
- sqlserver-tuning-queries - Usar DMVs e planos de execução para tunning