De acordo com o MS-Docs , ele retorna o número de milissegundos desde que o computador foi iniciado , mas estou obtendo um resultado diferente quando comparo com a hora real de início do servidor em sys.dm_os_sys_info
.
Aqui estão as consultas:
select sqlserver_start_time from sys.dm_os_sys_info;
select (sample_ms/1000) sample_sec, file_id from sys.dm_io_virtual_file_stats (DB_ID(), NULL);
select (DATEDIFF (SECOND, sqlserver_start_time, SYSDATETIME()) ) as Server_start_since_sec from sys.dm_os_sys_info;
Este é o resultado :
Se sample_ms refletir a hora de início do computador/servidor, não a hora de início da Instância SQL (comparando 2º vs 3º na captura de tela do resultado). Isso significa que os valores estatísticos ( num_of_reads
, num_of_writes
etc..) em DMF ( sys.dm_io_virtual_file_stats
) retornam leituras cumulativas desde a reinicialização do computador ou desde a reinicialização da Instância SQL ou há um intervalo de tempo diferente que precisamos considerar?
Antes de reiniciar o serviço SQL
Primeiro, esses valores iniciais não estão medindo a mesma coisa.
sys.dm_os_sys_info
:sys.dm_io_virtual_file_stats
:Devem ser leituras/gravações cumulativas em cada arquivo ("Número total de bytes lidos neste arquivo") para a instanciação atual da instância, ou seja, desde que foi iniciada pela última vez. A função original que este dmf substitui,
sys.fn_virtualfilestats
retornou umatimestamp
coluna para ajudar a comparar os resultados recebidos ao longo do tempo ("Database timestamp em que os dados foram obtidos").Agora que este é um dmf, parece que
sample_ms
preenche esse vazio com base em sua descrição:Na maioria dos casos realistas, a única coisa que lê/grava nos arquivos de dados/log do SQL Server é ele mesmo, portanto, eles não seriam incrementados, a menos que a instância fosse iniciada de qualquer maneira. Independentemente disso, não parece que a intenção seja usar esse contador para qualquer finalidade além de comparar várias saídas ao longo do tempo.
Não consegui encontrar uma referência canônica dizendo que todos os dmvs são redefinidos na reinicialização da instância, mas algumas das documentações de dmvs baseadas em índice especificam isso:
Muitos dos dmvs não retornam informações cumulativas, portanto, não faz sentido descrevê-los como sendo redefinidos em uma reinicialização de instância. No entanto, este parece se enquadrar nessa categoria e deve ser observado como tal.
Fiz uma solicitação pull para atualizar a documentação para refletir o fato de que ela é redefinida na inicialização da instância.