Les Webcasts
Groupe des Utilisateurs SQL Server
Juin 2013 – TempdbDavid Baffaleuf– CAPDATA
MVP SQL Server
David Baffaleufhttp://blog.capdata.fr @dbaffaleuf
Leader SGBD reconnu en Francewww.capdata.fr Conseil Service Formation DBA à distance
Management d’infrastructures IT hétérogèneswww.osmozium.com Support Management Technical Management Data Management Production Management
• Toutes les • questions• que vous• vous posez • sur tempdb• … Et aussi celles que vous ne vous posez pas !• Démos !
30 ‘ chrono
Qu’est-ce qu’elle a de plus que les autres ???
Stockage
explicite
Stockage
implicite
Worktables, jointures hash, tris,
version store …
#temp, ##temp, variables
table, TVF, TVP…
Logging
Recovery
Allocation
Caching
Non persistan
ce
Partagée
SPOF
Comment est-elle créée ?
Ouverture master
Recovery master
Ouverture model
Recovery model
Création tempdev.mdf (4-5M)
Import des extents de model
Extension taille tempdev.mdf
Création tempdb
Création templog.ldf
Création des autres fichiers
• Instant File Initialization• Pas de model, pas de tempdb• Si le fichier tempdev / templog n’existe pas ?
sqlservr –f (minimal start)
Création tempdev.mdf (4-5M)
…dans le répertoire par défaut
Création journal 516096 bytes
• Stockage explicite : Tables, indexes physiques, LOBs… (attention non persistées !!) Tables temporaires (créées par utilisateur / par feature Dbmail, UCP,
DataCollector…) Variables tables, TVF, TVP.
• Mais aussi stockage implicite: Tris ORDER BY Checkdb facts Workfiles (Hash Join) Worktables (spools, features…) Tables internes trigger Online index operations Version store…
Qu’est-ce qu’elle stocke ?
• Nommage: #temp__________________________________________14563 ##temp
• Allocation:– Extents mixtes d’abord (sauf si –T1118)– IAM toujours en extent mixte– Extents uniformes si taille > 8 pages
• Scope/durée de vie: session / procédure (#) instance (##).
Tables temporaires 1/2
PLAN PSSELECT INTO
#temp …
• Mécanismes de cache particuliers: Cachestore: CACHESTORE_MEMOBJECTS Tables systèmes. Seulement dans procédures, fonctions, triggers. 2 pages par #temp < 8Mb (DATA + IAM) Pas de DDL après la création de la table #temp (sauf DROP TABLE) Pas de contraintes nommées (index uniques / clustered supportés mais
leaf pages seulement, et 2 pages pour NCI)
Tables temporaires 2/2[ Caching ]
#temp
DEMO
TF1106
Nouveau RB:
RING_B
UFFER_
SPACEM
GR_TRA
CE
• Pas stockées en mémoire mais bien sur disque !!• SELECT INTO non autorisé• Scope = batch ou procédure (pas session)• Mise en cache / suppression différée = temp tables.• Pas d’index• Pas de statistiques• Pas de rollback (transactions implicites sur les VT)• TVF = variable table• TVP = variable table
Tables temporaires vs variables tables ?
• Utilisées par certaines features (XML, Service Broker, CHECKDB,…) • Utilisées par certains opérateurs :
Index / Table (Eager) Spools. Exchange Spill. Merge Joins
• Curseurs, variables type (max). • Créées par le code de l’engine, donc pas de métadonnées dessus,
pas d’accès aux tables systèmes.• Object_id < 0• Mixed / Uniform extents• Seule l’allocation est loggée !!• Espace tracé dans les DMVs
(internal_object_reserved_page_count)
Worktables
sys.dm_db_
%%_space_u
sage
• Utilisés uniquement par l’opérateur Hash Join (recursion).• Pas de correspondance dans le buffer pool (BUF).• Espace tracé dans les DMVs
(internal_object_reserved_page_count)…• …mais pas dans sys.dm_os_buffer_descriptors.• Toujours en extents uniformes.• Aucune journalisation.
Workfiles
• Utilisé pour RCSI / Snapshot Isolation.• Online index rebuild, • Tables internes des triggers• MARS ?...• Aucune journalisation de l’allocation dans le version store.• Allocation tracée séparément de internal dans
sys.dm_db_file_space_usage (version_store_reserved_page_count).
• Non tracée dans %session% ou %task%• Trace séparée dans sys.dm_tran_version_store.• Désallocation asynchrone (Garbage Collection)
Version Store
• Pas de database snapshot dans tempdb pour CHECKDB !!• CHECKDB peut utiliser tempdb pour stocker les facts:
Tracer l’allocation des objets à contrôler durant le CHECKDB Suivre les liens précédent / suivant dans le chaînage Suivre les pointeurs forwarding / forwarded records Par type d’allocation: LOB, B-TREE, FILESTREAM, IAM, …
• Normalement stockés en mémoire, et dans des worktables si plus assez de place.
• 1 fact ~= 1 ligne de 5 colonnes dans une worktable. • DBCC CHECKDB (bigDB) WITH ESTIMATE_ONLY
CHECKDB et Tempdb ?
• Ne pas laisser la taille par défaut.• Initialisation instantanée !!• DBCC CHECKDB WITH ESTIMATE_ONLY est un minimum.• Monitorer la taille, réévaluer la taille initiale au besoin.• Pas d’autogrow ! SIZE = MAXSIZE.• Pour réduire:
v > =2008 : ALTER DATABASE TEMPDB MODIFY FILE … + stop / start V < 2008: net start MSSQLSERVER /f
Comment dimensionner Tempdb ?
Perfmon Volume Maintenance Tasks
• Contention sur PFS/GAM/SGAM Création / suppression massive de tables temporaires (proc / session) Création / suppression d’objets internes plus incontrôlable encore. Impliquent des modifications dans ces 3 pages PFS, GAM, SGAM. Impliquent des modifications dans les tables systèmes (sysschobjs,
sysallocunits, syscolpars, sysrscols…)
• Ces pages sont protégées par des latches Chaque accès en lecture / écriture nécessite d’obtenir un latch (SH/EX). On constate des attentes globales sur PAGELATCH_SH et PAGELATCH_EX Sur les ressources types : PFS (2:1:1), GAM (2:1:2) et SGAM (2:1:3), et parfois
des pages appartenant à des tables systèmes et les pages IAM.
• Les mécanismes de caching permettent de réduire cette contention Mais ne fonctionnent que pour les tables temporaires dans des procédures,
fonctions ou triggers.
Problèmes liés à l’allocationPFS GAMSGAM
Combien de fichiers de données 1/2
OK OK OK OK OKW W WW W
• Bonne pratique = 1 fichier de même taille par CPU.• Observer la contention avant de multiplier les fichiers.• Attentes de type PAGELATCH_SH / PAGELATCH_EX sur :
2:1:1 PFS (=Page Free Space) 2:1:2 GAM (=Global Allocation Map) 2:1:3 SGAM (=Shared GAM)
• Ajouter des fichiers additionnels au besoin• Réévaluer la contention…• … jusqu’à disparition de la contention. • …et si le caching est insuffisant:• -T1118 pour tables < 8 pages et contention SGAM.
Combien de fichiers de données 2/2
Proportionnal Fill / Round Robin
EspaceLibre
EspaceLibre
EspaceLibre Espace
Libre
• Proportion réévaluée:• Au restart de l’instance (lorsque les fichiers sont créés)• Lors d’un ajout / retrait de fichier• Toutes les 8192 allocations d’extents (mixtes ou uniformes)
• Attention –T1117 s’applique à toutes les bases, pas seulement tempdb.
Combien de journaux de transactions ?
1
• Les avantages: Isoler les fluctuations: moins d’impacts sur les autres bases. SSD
• Les inconvénients: Moins de disques disponibles en tout. Lissage plus difficile Précos SQLCAT 10Tb range.
Tempdb sur des disques dédiés ?
• Images après pour INSERT / UPDATE non loggées pour les heaps (tables tempo).
• Journal de transactions utilisé uniquement pour les ROLLBACKS.• Pas de REDO.• Pas de write ahead logging => lazy commits• Auto Checkpoint exécuté seulement lorsque le journal est plein à
70%• Attention si CHECKPOINT manuel dans tempdb• Internal objects (sorts, worktables) => seule l’allocation est loggée.• Parfois même rien n’est loggé !! (workfiles, version store)
Logging & recovery ?
-- a=1update #t set a=2update base.dbo.t set a=2 #t t
• Perfmon: Temp Tables Creation Rate Workfiles Created/sec Worktables Created/sec Pages Allocated/sec Free Space in tempdb (KB) Version Store Size (KB)
• SQL Trace / XEvents: Hash Warning / hash_warning Sort Warning / sort_warning Exchange Spill Event / exchange_spill
Mesurer la contention
DEMO
DMVs:tempdb.sys.dm_db_file_space_usagetempdb.sys.dm_db_session_space_usagetempdb.sys.dm_db_task_space_usagesys.dm_os_wait_statssys.dm_os_waiting_tasks
Des questions (pas dans la liste) ?
Les Webcasts
Groupe des Utilisateurs SQL Server
GUSS.fr
Top Related