Nessa postagem, irei dar uma dica rápida que pode ajudar bastante durante a análise de uma query no SQL Server.
São as instruções: SET STATISTICS IO e SET STATISTICS TIME
SET STATISTICS IO:
Vem como default “OFF”. Ao mudarmos a opção para ON, serão exibidas estatísticas da query junto da sua execução.
|
1 2 3 4 5 |
SET STATISTICS IO ON; SELECT TOP 10 * FROM tblTestes; -- Além do resultado da query, será exibido algo parecido: Table 'tblTestes'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. |
Sendo:
- Scan count: Número de scan em tabelas.
- Logical reads: Número de páginas lidas do data cache (memória).
- Physical reads: Número de páginas lidas do disco.
- Read-ahead reads: Número de páginas colocadas no cache para a consulta.
- Lob logical reads: Número de texto, ntext, imagem, ou o tipo de valor grande (varchar (max), nvarchar (max), varbinary (max)) as páginas são lidas do data cache.
- Lob physical reads: Número de texto, ntext, imagem ou páginas de tipo de valor grande lidas do disco.
- Lob read-ahead reads: Número de texto, ntext, imagem ou páginas colocadas no cache para a consulta de tipo de valor grande.
SET STATISTICS TIME:
Vem como default “OFF”. Ao mudarmos a opção para ON, serão exibidas informações sobre os tempos de execução, análise e compilação do servidor.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
SET STATISTICS TIME ON; SELECT TOP 10 * FROM tblTestes; -- Além do resultado da query, será exibido algo parecido: SQL Server parse and compile time: CPU time = 0 ms, elapsed time = 0 ms. SQL Server Execution Times: CPU time = 0 ms, elapsed time = 0 ms. SQL Server parse and compile time: CPU time = 0 ms, elapsed time = 0 ms. SQL Server Execution Times: CPU time = 0 ms, elapsed time = 0 ms. SQL Server Execution Times: CPU time = 0 ms, elapsed time = 0 ms. (10 row(s) affected) (1 row(s) affected) SQL Server Execution Times: CPU time = 0 ms, elapsed time = 0 ms. SQL Server parse and compile time: CPU time = 0 ms, elapsed time = 0 ms. SQL Server Execution Times: CPU time = 0 ms, elapsed time = 0 ms. |
Com essas informações, seguidas de um bom conhecimento em índices, é possível melhorar bastantes as querys pesadas do seu ambiente.
OBS: É possível utilizar os dois comandos ao mesmo tempo.
Referências:
SET STATISTICS IO (Transact-SQL)
SET STATISTICS TIME (Transact-SQL)