Skip to content

Commit d1f734b

Browse files
committed
Add queries de stress de memória e simualçao de High Compile Time
1 parent 001ea9c commit d1f734b

File tree

2 files changed

+3088
-0
lines changed

2 files changed

+3088
-0
lines changed

Misc/HighQueryCompilationTime.sql

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/*#info
2+
# Autor
3+
Fabiano Amorim (https://blogfabiano.com/)
4+
5+
# Descricao
6+
Esta é uma query que o Fabiano Amorim fez para simular um cenáro de alta tempo de compialação.
7+
Você pode querer simular isso para testar alguma feature do sql ou cenários de como seu ambiente vai responder a esse tipo de processamento
8+
9+
IMPORTANTE: Evite rodar isso em produção, pois pode causar muito impacto nas suas queries.
10+
Isso é para demos e ambientes de testes
11+
12+
Geralmente, esse tipo de query rodando em paralelo, em várias sessõe,
13+
você vai waits como RESOURCE_SEMAPHORE_QUERY_COMPILE e pode ver muita CPU alta junto,
14+
pois uma parte de queries estará moendo CPU, equanto compila e a outra em wait esperando
15+
pra poder compilar (o sql tem um limite de queries que podem compilar ao mesmo tempo, baseado no consumo de memória, etc.)
16+
17+
Ele também deixou uma estimativa de tempo até determinado JOIN.
18+
Por exemplo, se quiser 1 segundo de compile time, comente do 5 join em didante (Deixando apenas os 4 primeiros).
19+
Obviamente, depende de cada máquina, e você precisará testar e observar o valor mais próximo.
20+
21+
E de quebra, ele deixou também algums Trace flags para você debugar o processo.
22+
Você poe comentar essa parte se não quiser ver detalhes ou se apens o tempo interessar.
23+
24+
25+
26+
Obrigado Fabiano <3, essa query é muito boa!
27+
*/
28+
29+
30+
-- dbcc freeproccache
31+
SET STATISTICS TIME ON
32+
;WITH cte AS
33+
(
34+
SELECT objects.*
35+
FROM sys.objects
36+
INNER JOIN sys.indexes
37+
ON indexes.object_id = objects.object_id
38+
INNER JOIN sys.index_columns
39+
ON index_columns.object_id = indexes.object_id
40+
AND index_columns.index_id = indexes.index_id
41+
INNER JOIN sys.columns
42+
ON columns.object_id = index_columns.object_id
43+
AND columns.column_id = index_columns.column_id
44+
)
45+
SELECT TOP 100 *
46+
FROM sys.objects
47+
INNER JOIN cte AS cte1 ON objects.name = cte1.name /* compile time = 41ms */
48+
INNER JOIN cte AS cte2 ON objects.name = cte2.name /* compile time = 125ms */
49+
INNER JOIN cte AS cte3 ON objects.name = cte3.name /* compile time = 375ms */
50+
INNER JOIN cte AS cte4 ON objects.name = cte4.name /* compile time = 1091ms */
51+
INNER JOIN cte AS cte5 ON objects.name = cte5.name /* compile time = 3630ms */
52+
INNER JOIN cte AS cte6 ON objects.name = cte6.name /* compile time = 7885ms */
53+
INNER JOIN cte AS cte7 ON objects.name = cte7.name /* compile time = 19651ms */
54+
INNER JOIN cte AS cte8 ON objects.name = cte8.name /* compile time = 35806ms */
55+
INNER JOIN cte AS cte9 ON objects.name = cte9.name /* compile time = 67759ms */
56+
INNER JOIN cte AS cte10 ON objects.name = cte10.name /* compile time = 120355ms */
57+
OPTION
58+
(
59+
RECOMPILE
60+
, QUERYTRACEON 3604
61+
, QUERYTRACEON 8675 /* Show optimization stage */
62+
--, QUERYTRACEON 8780 /* Disable timeout, uncomment this if you want it to get even worse...*/
63+
)
64+
SET STATISTICS TIME OFF
65+
GO

0 commit comments

Comments
 (0)