Obtenez une journalisation minimale lors du chargement des données dans des tables temporaires

10

Même après avoir lu The Data Loading Performance Guide , je ne sais toujours pas s'il est nécessaire d'ajouter l'indicateur de table TABLOCK à une table temporaire vide, définie avec un index clusterisé afin d'obtenir une journalisation minimale.

Évidemment, la table temporaire est créée dans TempDB qui fonctionne en mode de récupération SIMPLE donc j'aurais pensé que c'était un candidat parfait pour une journalisation minimale, mais je ne trouve pas de passage pour le confirmer.

Une table temporaire est-elle candidate pour une journalisation minimale et, dans l'affirmative, vaut-il la peine d'ajouter l'indicateur TABLOCK comme recommandé pour les tables permanentes?

Pixélisé
la source

Réponses:

18

Je ne sais pas s'il est nécessaire d'ajouter l' TABLOCKindicateur de table à une table temporaire vide, définie avec un index clusterisé afin d'obtenir une journalisation minimale.

Non. Les tables temporaires locales ( #temp) sont privées pour la session de création, donc un conseil de verrouillage de table n'est pas requis. Une indication de verrouillage de table serait requise pour une table temporaire globale ( ##temp) ou une table régulière ( dbo.temp) créée dans tempdb, car elles sont accessibles à partir de plusieurs sessions.

Notez que même lorsque les optimisations de journalisation minimales complètes ne sont pas appliquées, les tables créées dans tempdbbénéficient d'autres optimisations telles que la non-nécessité de consigner des REDOinformations. Vous pouvez tester pour voir si des lignes ou des pages sont enregistrées à l'aide du document non documenté sys.fn_dblog. La journalisation régulière comportera des enregistrements journalisés comme LOP_INSERT_ROWS.


Notez que l'ajout TABLOCKà une table temporaire locale est requis pour obtenir une exécution parallèle avec des INSERT...SELECTrequêtes dans SQL Server 2016, consultez l'article de la Base de connaissances Microsoft:

Mauvaises performances lorsque vous exécutez les opérations INSERT .. SELECT dans SQL Server 2016

Paul White 9
la source