Ao tentar investigar alguns problemas de desempenho com nosso banco de dados SQL Server, notei que nossas estatísticas de espera parecem altas para ASYNC_IO_COMPLETION e PAGEIOLATCH_*. No Monitor de Recursos, notei que o tempDB é frequentemente (pelo menos 1 vez por hora) Lendo/Gravando grandes quantidades de dados, intervalo total (B/Sec) de 5 GB - 25 GB.
O tempDB está em um disco virtual separado do banco de dados e dos arquivos de log. O tamanho do TempDB é de 4 GB. Nosso arquivo principal de banco de dados e log tem 40 GB de tamanho cada. Eu tentei pesquisar contadores de perfmon para isso, mas não consegui encontrar nada que eu possa entender para descobrir por que estou recebendo certos números.
É incomum que o total de dados para tempDB seja tão alto por meio do monitor de recursos? Nosso banco de dados principal está crescendo apenas cerca de 50 MB por dia. O que devo procurar para descobrir o que está causando dados tão altos no tempDB e se isso está causando um gargalo de E/S? Se o melhor método é usar contadores perfmon específicos, quais contadores devo observar e quais valores são bons ou ruins?
Tempdb é usado para armazenar:
Objetos de usuário temporários que são criados explicitamente, como: tabelas e índices temporários globais ou locais, procedimentos armazenados temporários, variáveis de tabela, tabelas retornadas em funções com valor de tabela ou cursores. Para capturar sessões que estão causando alocação de tempdb, tente usar sp_blitz ou consulte este artigo com mais informações sobre tempdb. https://www.mssqltips.com/sqlservertip/4356/track-sql-server-tempdb-space-usage/