Temos os arquivos de dados do usuário e do sistema na mesma unidade de disco. O (io_stall_write_ms / (1.0 + num_of_writes)) está abaixo de 2 para os arquivos do usuário, mas os arquivos tempdb costumam ter mais de 400. Vejo isso em alguns servidores e estou curioso para saber se há uma razão para levar mais tempo para gravar no tempdb do que um arquivo de dados regular do banco de dados.
SELECT DISTINCT UPPER(LEFT(mf.physical_name, 1)) AS Directory,
( io_stall_write_ms / ( 1.0 + num_of_writes ) ) as result,
io_stall_write_ms, num_of_writes,
fs.database_id,
fs.[file_id]
FROM sys.dm_io_virtual_file_stats(NULL, NULL) AS fs
INNER JOIN sys.master_files AS mf ON fs.database_id = mf.database_id
AND fs.[file_id] = mf.[file_id]
Obrigado,
Respostas:
Resposta curta: Ver paradas de E / S mais altas pode ou não ser um problema por si só. Você precisa procurar mais informações para descobrir se há algum problema. Parece um pouco alto, sim, mas você está sofrendo? Nesse caso, provavelmente é porque seu sistema de E / S não está lidando com a carga corretamente (porque não pode, porque você tem tudo em uma unidade ou por algum outro motivo) ou está fazendo muito no TempDB (alterando o primeiro problema - o desempenho do IO - é provavelmente uma correção mais fácil e eficiente, mas primeiro determine se você tem um problema)
A discussão / resposta mais longa:
Há duas perguntas em jogo aqui -
1.) O que faço quando vejo altas paradas de IO?
Primeiro, "alto" está nos olhos de quem vê. Se você perguntasse a 10 DBAs o que "alto demais" é para barracas de IO, provavelmente você obteria 2-3 respostas diferentes com números, 5-6 respostas "Depende" e um olhar vazio. Minha suposição é de que uma média de 400ms é potencialmente muito alta aqui, especialmente quando os outros DBs são 2ms ou menos durante o tempo médio de estol.
Independentemente de qual banco de dados está vendo as paradas altas, você deve abordá-lo da mesma maneira. Uma paralisação de E / S é o que parece ... Uma solicitação de E / S está demorando mais que o esperado. Isso acontece. Elas acontecem o tempo todo em um sistema com recursos compartilhados e recursos finitos (na verdade todos os nossos sistemas). Eles se tornam um problema quando as barracas se tornam problemas de desempenho ou levam a eles. Portanto, confio que você esteja olhando aqui como parte proativa do monitoramento ou porque está enfrentando problemas de desempenho que estão solucionando. Também não queremos nos perder apenas em barracas de IO. Estamos olhando para uma peça do quebra-cabeça e não para o quadro geral. Pode ser problemático examinar apenas as estatísticas de espera ou de arquivo desde que o SQL foi reiniciado pela última vez, porque você está olhando o tempo todo e alguma janela de manutenção ou janela de carga pesada pode distorcer os contadores. Portanto, verifique a imagem completa.
Mas quando suspeito que tenho um problema de desempenho do disco ou vejo algo em uma consulta como essa, normalmente sigo um processo parecido com:
PAGEIOLATCH_*
,IO_COMPLETION
,WRITELOG
, etc.?). Se você fizer isso, é outra indicação de que você tem alguns problemas de desempenho relacionados às E / S, assim como as paradas de E / S. Mas dá a você outra forma de acordo aqui.Physical Disk:Avg Disk Sec/Read
eAvg Sec Disk Sec/Write
. Eles medem sua latência. Assista a esses contadores por um período salvo em um arquivo de log de desempenho. O que você viu para as médias? Se você estiver vendo números com mais de 0,020 segundos (20ms), isso pode ser um problema. Se você vir números acima de 40-50ms méd ou mais, é uma indicação mais firme de um problema. Veja também seus picos? Quão alto eles vão e quanto tempo eles duram? Se você observar picos nas centenas de ms e eles durarem dezenas ou dezenas de segundos ou mais e / ou ocorrerem com frequência, é mais provável que você tenha um problema com o desempenho do seu pedido de veiculação para sua carga de trabalho.( Nota: para esta análise de estatísticas de espera e análise de desempenho - observe vários períodos e tipos de uso. Você tem estatísticas de uso diferentes à noite do que durante o dia? Janelas de processamento em lote? Janelas de manutenção nas quais você reconstrói muitos índices? Observe essas ferramentas durante cada um desses períodos e entenda o que você está vendo para cada)
Outra consideração de desempenho de IO aqui -
2.) Quais são algumas das razões pelas quais o TempDB pode ser maior?
Portanto, o TempDB é um banco de dados e pode ter interrupções de IO como qualquer outro banco de dados, como acabei de discutir. Mas quais são algumas das razões pelas quais o TempDB pode ter leituras mais altas? (não exaustivo, congratulo-me com adições ou pensamentos em edições, outras respostas ou comentários) -
O ponto é - o TempDB é usado de várias maneiras, e não me surpreende vê-lo como um dos seus bancos de dados mais movimentados, se não o mais movimentado. Também não me surpreende quando o vejo com o maior número e a maior média de paradas de todos os bancos de dados no site de um cliente. Às vezes, é a natureza de sua carga de trabalho. Observar algumas das coisas que mencionei aqui certamente pode ajudá-lo a determinar se esses números indicam um problema e, em caso afirmativo, como aprofundar sua solução.
fonte
O TempDB é compartilhado entre todos os bancos de dados da instância. Portanto, às vezes pode haver contenção no TempDB para determinadas páginas: SGAM , GAM e PFS . Em poucas palavras, essas páginas acompanham o que tem sido usado no TempDB até agora e onde há espaço disponível para novo uso.
Normalmente, isso é resolvido adicionando vários arquivos de dados ao TempDB. Existem algumas filosofias diferentes quanto ao número correto, mas todos concordam que você deve ter mais de um.
Aqui estão algumas consultas para executar ...
Este mostrará quantos arquivos o TempDB possui e onde estão localizados.
Este mostrará a você quantas CPUs e núcleos você possui.
Este mostrará quantos nós e núcleos NUMA por nó NUMA você possui.
Este mostrará quais páginas estão com esperas no TempDB.
Aqui está um artigo que aborda um pouco mais a fundo a questão da contenção de páginas.
OK, agora a parte da filosofia ... :-)
Para mim, se eu estiver em um sistema SMP , quero apenas tantos arquivos quanto a metade do total de núcleos .
Se eu estiver em um sistema NUMA , desejarei apenas o número de arquivos quantos núcleos por nó NUMA .
No entanto, raramente vejo melhorias por ter mais de quatro arquivos para o TempDB. Por isso, geralmente começo com quatro e monitoro a contenção, conforme explicado no artigo ao qual vinculei.
Se eu continuar tendo problemas, adicionarei mais dois. Verifique novamente, adicione mais e repita até a disputa desaparecer.
fonte