Nous avons les fichiers de données utilisateur et système sur le même lecteur de disque. Le (io_stall_write_ms / (1.0 + num_of_writes)) est inférieur à 2 pour les fichiers utilisateur mais les fichiers tempdb sont généralement plus de 400. Je vois cela sur quelques serveurs et je suis curieux de savoir s'il y a une raison pour laquelle il faut plus de temps pour écrire dans tempdb qu'un fichier de données de base de données ordinaire.
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]
Merci,
Réponses:
Réponse courte: Voir des décrochages d'E / S plus élevés peut ou non être un problème en soi. Vous devez consulter plus d'informations pour savoir si vous avez un problème. Cela semble un peu élevé, oui, mais souffrez-vous? Si c'est le cas, c'est probablement parce que votre système d'E / S ne gère pas la charge correctement (parce qu'il ne le peut pas, parce que vous avez tout sur un lecteur ou pour une autre raison) ou que vous en faites trop dans TempDB (changer le premier problème - les performances d'E / S - est probablement une solution plus simple et plus efficace, mais déterminez d'abord si vous avez un problème)
La discussion / réponse plus longue:
Il y a deux questions en jeu ici -
1.) Que dois-je faire lorsque je vois des décrochages d'E / S élevés?
Tout d'abord, "haut" est dans l'œil du spectateur. Si vous deviez demander à 10 DBA ce qu'est "trop élevé" pour les décrochages d'E / S, vous obtiendriez probablement 2-3 réponses différentes avec des nombres, 5-6 réponses "Ça dépend" et un regard vide. Mon hypothèse est qu'une moyenne de 400 ms est potentiellement trop élevée ici, surtout lorsque les autres DB sont de 2 ms ou moins pour le temps de décrochage moyen.
Quelle que soit la base de données qui voit les stalles élevées, vous devez l'approcher de la même manière. Un décrochage IO est ce que cela ressemble ... Une demande IO prend plus de temps que prévu .. Décrochage. Cela arrive. Ils se produisent tout le temps dans un système avec des ressources partagées et des ressources finies (vraiment tous nos systèmes). Ils deviennent un problème lorsque les étals deviennent des problèmes de performances ou y conduisent. J'espère donc que vous regardez ici comme une partie proactive de la surveillance ou parce que vous rencontriez des problèmes de performances que vous dépannez. Nous ne voulons pas non plus nous perdre dans les stalles IO. Nous regardons une pièce du puzzle et non une vue d'ensemble. Il peut être gênant de simplement regarder les statistiques d'attente ou les statistiques de fichier depuis le dernier redémarrage de SQL car vous regardez en tout temps et une fenêtre de maintenance ou une fenêtre de charge élevée peut fausser les compteurs. Assurez-vous donc de regarder l'image complète.
Mais lorsque je soupçonne que j'ai un problème de performances de disque ou que je vois quelque chose de différent dans une requête comme celle-ci, je suis normalement un processus qui ressemble à ceci:
PAGEIOLATCH_*
,IO_COMPLETION
,WRITELOG
, etc.?). Si vous faites cela, cela indique que vous avez des problèmes de performances liés aux E / S, tout comme les blocages d'E / S. Mais cela vous donne ici une autre forme d'accord.Physical Disk:Avg Disk Sec/Read
etAvg Sec Disk Sec/Write
. Ceux-ci mesurent votre latence. Regardez ces compteurs sur une période de temps enregistrée dans un fichier journal de performances. Qu'avez-vous vu pour les moyennes? Si vous voyez des nombres supérieurs à 0,020 seconde (20 ms), cela pourrait être un problème. Si vous voyez des nombres supérieurs à 40-50 ms en moyenne ou plus, c'est une indication plus ferme d'un problème. Regardez aussi vos pointes? Jusqu'où vont-ils et combien de temps durent-ils? Si vous voyez des pics dans les centaines de ms et qu'ils durent des dizaines ou des dizaines de secondes ou plus et / ou se produisent fréquemment, vous êtes plus susceptible d'avoir un problème avec vos performances d'E / S pour votre charge de travail.( Remarque: pour cette analyse des statistiques d'attente et l'analyse des performances - examinez les différentes périodes et types d'utilisation. Avez-vous des statistiques d'utilisation différentes la nuit que pendant la journée? Fenêtres de traitement par lots? Fenêtres de maintenance où vous reconstruisez un grand nombre d'index? Regardez ces outils pendant chacune de ces périodes et comprenez ce que vous voyez pour chacun)
Une autre considération de performance IO ici -
2.) Quelles sont les raisons pour lesquelles TempDB pourrait être plus élevé?
Donc TempDB est une base de données et il peut avoir des décrochages d'E / S comme toute autre base de données comme je viens de le dire. Mais quelles sont les raisons pour lesquelles TempDB peut avoir des lectures plus élevées? (non exhaustif, je me réjouis des ajouts ou des réflexions dans les modifications, autres réponses ou commentaires) -
Le fait est que TempDB est utilisé de nombreuses façons, et cela ne me surprend pas du tout de le voir comme l'une de vos bases de données les plus occupées, sinon la plus occupée. Cela ne me surprend pas non plus quand je le considère comme ayant le plus grand nombre de stands et la moyenne la plus élevée de toutes les bases de données sur le site d'un client. C'est parfois la nature de sa charge de travail. L'examen de certaines des choses que j'ai mentionnées ici peut certainement vous aider à déterminer si ces chiffres indiquent un problème et, dans l'affirmative, comment approfondir la solution.
la source
TempDB est partagé entre toutes les bases de données de l'instance. Il peut donc parfois y avoir des conflits au sein de TempDB pour certaines pages: SGAM , GAM et PFS . En un mot, ces pages gardent une trace de ce qui a été utilisé dans TempDB jusqu'à présent, et où l'espace est disponible pour une nouvelle utilisation.
En règle générale, cela est traité en ajoutant plusieurs fichiers de données à TempDB. Il existe plusieurs philosophies différentes quant au nombre correct, mais tous conviennent que vous devriez en avoir plusieurs.
Voici quelques requêtes à exécuter ...
Celui-ci vous montrera combien de fichiers TempDB possède et où ils se trouvent.
Celui-ci vous montrera combien de processeurs et de cœurs vous avez.
Celui-ci vous montrera combien de nœuds NUMA et de cœurs par nœud NUMA vous avez.
Celui-ci vous montrera quelles pages connaissent des attentes dans TempDB.
Voici un article qui approfondit un peu plus le problème de contention des pages.
OK, alors maintenant la partie philosophie ... :-)
Pour moi, si je suis sur un système SMP , je veux seulement autant de fichiers que la moitié du nombre total de cœurs .
Si je suis sur un système NUMA , je veux seulement autant de fichiers que de cœurs par nœud NUMA .
Cependant, je vois rarement une amélioration pour avoir plus de quatre fichiers pour TempDB. Donc, je commence généralement par quatre et surveille les conflits comme expliqué dans l'article auquel j'ai lié.
Si je continue de voir des problèmes, j'en ajouterais deux autres. Vérifiez à nouveau, ajoutez-en plus et répétez jusqu'à ce que le conflit disparaisse.
la source