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