Guss webcasts Tempdb Internals - june 2013

348 vues

Publié le

Webcast guss juin 2013 SQL Server toutes les questions que vous vous posez sur tempdb sans jamais oser le demander ...

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
348
Sur SlideShare
0
Issues des intégrations
0
Intégrations
3
Actions
Partages
0
Téléchargements
3
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive
  • TVF et TVP sont considérées comme des variables tables du point de vue de l’allocation.
    Version store n’est pas compté dans les compteurs ‘internal’ de sys.dm_db_%%_usage
  • DEMO : montrer le temps de démarrage de SQL Server avec et sans le fichier tempdb.mdf
    Import des extents de model = Clearing tempdb database
    Création des autres fichiers = Starting tempdb

    516096 bytes = taille de headers de 2 VLFs

    Attention le thread qui affiche recovery complete pour chaque base en cours de recovery est obligé d’attendre que la tempdb soit complètement créée car un verrou X database est posé et le thread a besoin d’utiliser tempdb.

    L’initialisation sera plus courte si tempdbdev.mdf existe et qu’il a une taille >= à la taille attendu pour la création. Surtout problème pour le journal car IFI ne s’applique pas.
    Par contre si le journal existe, on ne zéro-initialise pas tout, simplement qq enregistrements pour les premiers VLFs


  • Deferred drop: pas si la table < 8Mb => 2 pages sont conservées + histogramme
    Le nommage change lorsque la table temporaire est mise en cache
    Drop table #temp = truncate table #temp
  • Drop table #temp = truncate table #temp
    Encore une bonne raison pour faire des procs stocks !!!
    DEMO: montrer la différence de vitesse entre temp cached et temp non cached. DEMO1
  • GAM / SGAM interval : tous les 4Gb, pas seulement 2:1:2 ou 2:1:3
    PFS interval = 64Mb pas seulement 2:1:1
  • Proportionnal Fill / Round robin
    On va tourner sur les fichiers ayant au moins le même espace libre.
    L’application du TF1118 peut servir lorsque les tables temporaires seront systématiquement sous les 8 pages.
    Initialement, ces pages proviendront d’extents mixtes, et souvent différents. Activer le TF1118 permet de n’allouer que des extents dédiés uniformes. Une fois activé, il agit sur toutes les bases pas seulement tempdb. Attention toutefois les pages IAM seront toujours allouées depuis des extents mixtes.
    Attention TF1118 n’affecte que les tables tempo et les worktables (internal)
  • Proportionnal Fill / Round robin
    On va tourner sur les fichiers ayant au moins le même espace libre.
  • -T1106 aide à vérifier la rotation dans les fichiers (roundrobin / proportionnal fill)
  • Guss webcasts Tempdb Internals - june 2013

    1. 1. Les Webcasts Groupe des Utilisateurs SQL Server Juin 2013 – Tempdb David Baffaleuf– CAPDATA MVP SQL Server
    2. 2. David Baffaleuf http://blog.capdata.fr @dbaffaleuf Leader SGBD reconnu en France www.capdata.fr  Conseil  Service  Formation  DBA à distance Management d’infrastructures IT hétérogènes www.osmozium.com  Support Management  Technical Management  Data Management  Production Management
    3. 3. 30 ‘ chrono • Toutes les • questions • que vous • vous posez • sur tempdb • … Et aussi celles que vous ne vous posez pas ! • Démos !
    4. 4. 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 persistance Partagée SPOF
    5. 5. 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 sqlservr –f (minimal start) Création tempdev.mdf (4-5M) Création journal 516096 bytes …dans le répertoire par défaut • Instant File Initialization • Pas de model, pas de tempdb • Si le fichier tempdev / templog n’existe pas ?
    6. 6. Qu’est-ce qu’elle stocke ? • 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…
    7. 7. Tables temporaires 1/2 • 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 (##).
    8. 8. Tables temporaires 2/2 [ Caching ] • 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) PLAN PS SELECT INTO #temp … #temp
    9. 9. Tables temporaires vs variables tables ? • 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
    10. 10. Worktables • 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)
    11. 11. Workfiles • 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.
    12. 12. Version Store • 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)
    13. 13. CHECKDB et Tempdb ? • 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
    14. 14. Comment dimensionner 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
    15. 15. Problèmes liés à l’allocation PFS GAM SGAM • 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.
    16. 16. Combien de fichiers de données 1/2 W W OK W W W OK OK OK OK
    17. 17. Combien de fichiers de données 2/2 • 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.
    18. 18. Proportionnal Fill / Round Robin Espace Libre Espace Libre Espace Libre 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.
    19. 19. Combien de journaux de transactions ? 1
    20. 20. Tempdb sur des disques dédiés ? • 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.
    21. 21. Logging & recovery ? • Images après pour INSERT / UPDATE non loggées pour les heaps (tables tempo). -- a=1 update #t set a=2 update base.dbo.t set a=2 #t t • 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)
    22. 22. Mesurer la contention • 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: DMVs:  Hash Warning / hash_warning  Sort Warning / sort_warning  Exchange Spill Event / exchange_spill tempdb.sys.dm_db_file_space_usage tempdb.sys.dm_db_session_space_usage tempdb.sys.dm_db_task_space_usage sys.dm_os_wait_stats sys.dm_os_waiting_tasks
    23. 23. Des questions (pas dans la liste) ?
    24. 24. Les Webcasts Groupe des Utilisateurs SQL Server GUSS.fr

    ×