web-dev-qa-db-fra.com

DBCC checkdb sur tempdb

Est-il recommandé d'exécuter DBCC CheckDB sur tempdb? Si oui, quelqu'un peut-il énumérer les raisons de le faire? Cela pourrait être sur n'importe quelle version de SQL Server. Celui que j'ai est SQL Server 2017.

5
SQLPRODDBA

Non, ce n'est pas recommandé car c'est en grande partie une perte de temps. Lorsque SQL Server redémarre, tempdb est créé à partir de zéro. De plus, les données ne sont pas assez longues pour être un bon indicateur s'il y a un problème avec elles, ou le stockage sous-jacent.

Les scripts et les plans de maintenance d'Ola ignoreront tempdb lorsque vous configurerez des routines CHECKDB.

Une autre raison pour laquelle il est largement inutile est que si tempdb est corrompu, vous le saurez rapidement. Consultez mon article de blog ici où je corrompe volontairement tempdb: DBA Days: Killing TempDB doucement

À venir dans SQL Server 2019, nous pourrons utiliser la technologie "en mémoire" pour tables système dans tempdb . Bien que cela résout de gros problèmes de contention, vous ne pouvez pas exécuter CHECKDB contre des tables en mémoire . La seule façon de les vérifier est de sauvegarder tempdb, ce que vous ne pouvez pas faire.

BACKUP DATABASE tempdb TO DISK = 'D:\Backups\t.bak'

Msg 3147, niveau 16, état 3, ligne 27 Les opérations de sauvegarde et de restauration ne sont pas autorisées sur la base de données tempdb. Msg 3013, niveau 16, état 1, ligne 27 BACKUP DATABASE se termine anormalement.

Si vous pensez vraiment qu'il vaut la peine d'exécuter checkdb sur une base de données que SQL Server ne vous permettra pas de sauvegarder, eh bien, c'est votre fenêtre de maintenance, je suppose.

8
Erik Darling

Compléter la réponse d'Erik

L'exécution de DBCC CHECKDB sur tempdb n'effectue aucune vérification d'allocation ou de catalogue et doit acquérir des verrous de table partagés pour effectuer des vérifications de table. En effet, pour des raisons de performances, les instantanés de base de données ne sont pas disponibles sur tempdb. Cela signifie que la cohérence transactionnelle requise ne peut pas être obtenue.

La seule raison pour laquelle je peux penser à exécuter un checkdb contre tempdb est lorsque tempdb est gravement corrompu que les sessions l'utilisant commencent à obtenir des erreurs.

De plus, lorsque tempdb est corrompu, il est possible que vos bases de données utilisateur pourraient soient également corrompues.

Personnellement, je n'ai pas fait checkdb sur tempdb.

4
Kin Shah

J'ai une perspective différente ici, vous "devriez" exécuter checkdb sur toutes les bases de données, peu importe le système ou la période de l'utilisateur. est effacé et "peut-être" la corruption a disparu. J'aimerais aussi que vous lisiez blog de Brent Ozar

Q: Dois-je exécuter CheckDB contre TempDB?

Oui tu devrais. CheckDB ne peut pas effectuer chaque vérification par rapport à TempDB par rapport à d'autres bases de données (le résultat vous indiquera qu'il ne peut pas créer un instantané), mais il peut toujours exécuter une variété de vérifications par rapport à TempDB et il est pris en charge pour l'exécuter . Ne le sautez pas! Vous devriez vérifier master, model, msdb et tempdb, ainsi que toutes vos bases de données utilisateur.

Dois-je exécuter checkdb sur Tempdb aussi souvent que je le fais pour la base de données utilisateur? Non, vous pouvez éviter cela si nécessaire.

Ne devrais-je pas exécuter checkdb du tout sur la base de données tempdb? Non, tu devrais courir. Ne l'omettez pas.

1
Shanky