No SQL 2017 existe uma nova métrica de execução, 'memória de log' diferente da que foi adicionada em 2017 não estou encontrando nada a respeito.
Métrica de execução: (SQL 2017)
Tempo de CPU, duração, contagem de execução, leituras lógicas, gravações lógicas, consumo de memória, leituras físicas, tempo de CLR, grau de paralelismo (DOP), contagem de linhas, memória de log, memória TempDB e tempos de espera
Acredito que entendo quais são todas as outras métricas e por que devo me importar.
Executei todas as métricas para as 5 principais consultas de consumo de recursos, durante vários períodos específicos. Gravei e agora estou examinando os resultados. Eu sei que os valores ( muito grandes ) para 'memória de log' estão em KB.
O que exatamente é a métrica 'memória de log'?
Editar, tendo recebido duas respostas que verifiquei
A resposta do LowlyDBA sugere que é uma combinação de 5 campos relacionados desys.query_store_runtime_stats
Usando o código para validar fornecido por jadarnel27 em sua resposta
Criei o banco de dados '231682' e executei a consulta de teste para os 5 campos, obtive resultados muito semelhantes
Eu somei ( usado =SUM()
no Excel ) meus valores e obtive 1.383.040 (bytes)
Eu olhei no Query Store, para Log memory used (KB), ele mostra um valor de 354.058.240 (KB), esse número é ordens de magnitude maior, também é KB em comparação com bytes, em bytes seria 354.058.240.000 (bytes)
Eu somei os totais de todos os campos e obtive apenas 1.655.236 (byte)
SELECT *
FROM sys.query_store_runtime_stats qsrs
WHERE qsrs.avg_log_bytes_used > 0;
Suspeito que a resposta à minha pergunta é que a métrica 'memória de log' no SQL 2017 não é nenhum valor real. O valor apresentado neste pequeno experimento seria de 354 GB, um valor irrealisticamente alto.
Se observarmos a documentação do objeto subjacente,
sys.query_store_runtime_stats
, veremos que ele tem as seguintes descrições:Observação: o Azure SQL Data Warehouse sempre retornará zero (0).
Observação: o Azure SQL Data Warehouse sempre retornará zero (0).
Observação: o Azure SQL Data Warehouse sempre retornará zero (0).
Observação: o Azure SQL Data Warehouse sempre retornará zero (0).
Observação: o Azure SQL Data Warehouse sempre retornará zero (0).
A resposta do LowlyDBA cobre o que as métricas realmente significam. Esta resposta é apenas para explicar por que os números na interface do usuário do Query Store não fazem totalmente sentido.
Obtendo alguns dados de registro
Primeiro, vamos obter dados nessas colunas no SQL Server 2017 Developer Edition no meu laptop.
Crie um banco de dados:
Habilite o Query Store com configurações muito impraticáveis:
Faça algo que gere algum uso do log de transações:
Forçar a liberação para o disco caso ainda não tenha acontecido:
Voilá:
Problema de cálculo
Do ponto de vista da interface do usuário do repositório de consultas, o cálculo que está sendo executado é assim:
Há um bug no cálculo, ele deveria estar dividindo por 1.024 para ir de bytes para kilobytes. Do jeito que está, está multiplicando os bytes por 1.024 e, em seguida, relatando-os como kilobytes - o que faz com que pareçam estar desligados por um fator de ~ 1.000.000.
Por exemplo, meu repro aqui produziu 346.796 bytes de log em 1 execução da consulta. A interface do usuário do Repositório de Consultas, em vez de mostrar 338 kilobytes, mostra 355.119.104 kilobytes.
Relatei esse problema à Microsoft: o cálculo da métrica "Memória de log usada" do Query Store está errado