SlideShare une entreprise Scribd logo
1  sur  24
Les Webcasts 
Groupe des Utilisateurs SQL Server 
Juin 2013 – Tempdb 
David Baffaleuf– CAPDATA 
MVP SQL Server
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
30 ‘ chrono 
• Toutes les 
• questions 
• que vous 
• vous posez 
• sur tempdb 
• … Et aussi celles que vous ne vous posez pas ! 
• Démos !
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
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 ?
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…
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 (##).
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
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
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)
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.
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)
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
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
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.
Combien de fichiers de données 1/2 
W W 
OK W W W OK OK OK OK
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.
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.
Combien de journaux de transactions ? 
1
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.
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)
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
Des questions (pas dans la liste) ?
Les Webcasts 
Groupe des Utilisateurs SQL Server 
GUSS.fr

Contenu connexe

Tendances

Systèmes d'Exploitation - chp3-gestion mémoire
Systèmes d'Exploitation - chp3-gestion mémoireSystèmes d'Exploitation - chp3-gestion mémoire
Systèmes d'Exploitation - chp3-gestion mémoireLilia Sfaxi
 
Réplication de base de données oracle avec Golden Gate
Réplication de base de données oracle avec Golden GateRéplication de base de données oracle avec Golden Gate
Réplication de base de données oracle avec Golden GateMor THIAM
 
Tpdba1
Tpdba1Tpdba1
Tpdba1infcom
 
Les bases BI sont-elles différentes?
Les bases BI sont-elles différentes?Les bases BI sont-elles différentes?
Les bases BI sont-elles différentes?Franck Pachot
 
Db aing td2v1
Db aing td2v1Db aing td2v1
Db aing td2v1infcom
 
Tpdba3
Tpdba3Tpdba3
Tpdba3infcom
 
Db aing td1v1
Db aing td1v1Db aing td1v1
Db aing td1v1infcom
 
Db aing td3v1
Db aing td3v1Db aing td3v1
Db aing td3v1infcom
 
Systèmes d'Exploitation - chp5-gestion fichiers
Systèmes d'Exploitation - chp5-gestion fichiersSystèmes d'Exploitation - chp5-gestion fichiers
Systèmes d'Exploitation - chp5-gestion fichiersLilia Sfaxi
 
Réplication des bases de données
Réplication des bases de donnéesRéplication des bases de données
Réplication des bases de donnéessie92
 
Sauvegardes de base de données
Sauvegardes de base de donnéesSauvegardes de base de données
Sauvegardes de base de donnéesSoukaina Boujadi
 
Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...
Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...
Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...Aurelien Navarre
 
Concepts de sauvegarde et de récupération
Concepts de sauvegarde et de récupérationConcepts de sauvegarde et de récupération
Concepts de sauvegarde et de récupérationSoukaina Boujadi
 
Systèmes d'Exploitation - chp4-gestion disque
Systèmes d'Exploitation - chp4-gestion disqueSystèmes d'Exploitation - chp4-gestion disque
Systèmes d'Exploitation - chp4-gestion disqueLilia Sfaxi
 
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8Aurelien Navarre
 
DrupalCamp Lyon 2012 - Optimiser les performances Drupal depuis les tranchées
DrupalCamp Lyon 2012 -  Optimiser les performances Drupal depuis les tranchéesDrupalCamp Lyon 2012 -  Optimiser les performances Drupal depuis les tranchées
DrupalCamp Lyon 2012 - Optimiser les performances Drupal depuis les tranchéesAurelien Navarre
 
T1 corrections-qcm
T1 corrections-qcmT1 corrections-qcm
T1 corrections-qcminfcom
 

Tendances (19)

Systèmes d'Exploitation - chp3-gestion mémoire
Systèmes d'Exploitation - chp3-gestion mémoireSystèmes d'Exploitation - chp3-gestion mémoire
Systèmes d'Exploitation - chp3-gestion mémoire
 
JSS2013 : Hekaton
JSS2013 : HekatonJSS2013 : Hekaton
JSS2013 : Hekaton
 
Réplication de base de données oracle avec Golden Gate
Réplication de base de données oracle avec Golden GateRéplication de base de données oracle avec Golden Gate
Réplication de base de données oracle avec Golden Gate
 
Tpdba1
Tpdba1Tpdba1
Tpdba1
 
Les bases BI sont-elles différentes?
Les bases BI sont-elles différentes?Les bases BI sont-elles différentes?
Les bases BI sont-elles différentes?
 
Db aing td2v1
Db aing td2v1Db aing td2v1
Db aing td2v1
 
Tpdba3
Tpdba3Tpdba3
Tpdba3
 
Db aing td1v1
Db aing td1v1Db aing td1v1
Db aing td1v1
 
Db aing td3v1
Db aing td3v1Db aing td3v1
Db aing td3v1
 
Systèmes d'Exploitation - chp5-gestion fichiers
Systèmes d'Exploitation - chp5-gestion fichiersSystèmes d'Exploitation - chp5-gestion fichiers
Systèmes d'Exploitation - chp5-gestion fichiers
 
Réplication des bases de données
Réplication des bases de donnéesRéplication des bases de données
Réplication des bases de données
 
Sauvegardes de base de données
Sauvegardes de base de donnéesSauvegardes de base de données
Sauvegardes de base de données
 
Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...
Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...
Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...
 
Concepts de sauvegarde et de récupération
Concepts de sauvegarde et de récupérationConcepts de sauvegarde et de récupération
Concepts de sauvegarde et de récupération
 
Systèmes d'Exploitation - chp4-gestion disque
Systèmes d'Exploitation - chp4-gestion disqueSystèmes d'Exploitation - chp4-gestion disque
Systèmes d'Exploitation - chp4-gestion disque
 
REX Storm Redis
REX Storm RedisREX Storm Redis
REX Storm Redis
 
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
 
DrupalCamp Lyon 2012 - Optimiser les performances Drupal depuis les tranchées
DrupalCamp Lyon 2012 -  Optimiser les performances Drupal depuis les tranchéesDrupalCamp Lyon 2012 -  Optimiser les performances Drupal depuis les tranchées
DrupalCamp Lyon 2012 - Optimiser les performances Drupal depuis les tranchées
 
T1 corrections-qcm
T1 corrections-qcmT1 corrections-qcm
T1 corrections-qcm
 

Similaire à Guss webcasts Tempdb Internals - june 2013

Journées SQL Server 2012 Attentes et Performances
Journées SQL Server 2012   Attentes et PerformancesJournées SQL Server 2012   Attentes et Performances
Journées SQL Server 2012 Attentes et PerformancesDavid BAFFALEUF
 
Guss webcasts Query Memory Grants - june 2013
Guss webcasts   Query Memory Grants - june 2013Guss webcasts   Query Memory Grants - june 2013
Guss webcasts Query Memory Grants - june 2013David BAFFALEUF
 
GUSS - Les IO dans SQL Server (en partenariat avec DataCore)
GUSS - Les IO dans SQL Server (en partenariat avec DataCore)GUSS - Les IO dans SQL Server (en partenariat avec DataCore)
GUSS - Les IO dans SQL Server (en partenariat avec DataCore)GUSS
 
PerfUG - Hadoop Performances
PerfUG - Hadoop PerformancesPerfUG - Hadoop Performances
PerfUG - Hadoop PerformancesSofian Djamaa
 
Versionning et travail en équipe avec Salesforce - 27/11/2014
Versionning et travail en équipe avec Salesforce - 27/11/2014Versionning et travail en équipe avec Salesforce - 27/11/2014
Versionning et travail en équipe avec Salesforce - 27/11/2014Paris Salesforce Developer Group
 
JSS2014 – Performances et DMV
JSS2014 – Performances et DMVJSS2014 – Performances et DMV
JSS2014 – Performances et DMVGUSS
 
Jss2014 performance counters and dmvs
Jss2014   performance counters and dmvsJss2014   performance counters and dmvs
Jss2014 performance counters and dmvsChristophe Laporte
 
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cache
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cacheMeetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cache
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cacheAurelien Navarre
 
Plongée au cœur du Framework .NET 4.5
Plongée au cœur du Framework .NET 4.5Plongée au cœur du Framework .NET 4.5
Plongée au cœur du Framework .NET 4.5Microsoft
 
LP_Admin_base_données.ppt
LP_Admin_base_données.pptLP_Admin_base_données.ppt
LP_Admin_base_données.pptIdriss22
 
Réussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDBRéussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDB MongoDB
 
Journées SQL Server 2011 Extended Events
Journées SQL Server 2011  Extended Events Journées SQL Server 2011  Extended Events
Journées SQL Server 2011 Extended Events David BAFFALEUF
 
Admin bd chapitre1_architecturebd_oracle
Admin bd chapitre1_architecturebd_oracleAdmin bd chapitre1_architecturebd_oracle
Admin bd chapitre1_architecturebd_oracleIsimmSpotted
 
Comment sauvegarder correctement vos données
Comment sauvegarder correctement vos donnéesComment sauvegarder correctement vos données
Comment sauvegarder correctement vos donnéesEDB
 
Re build Nantes 2013 SQL Server monitoring
Re build Nantes 2013   SQL Server monitoringRe build Nantes 2013   SQL Server monitoring
Re build Nantes 2013 SQL Server monitoringDavid BAFFALEUF
 

Similaire à Guss webcasts Tempdb Internals - june 2013 (20)

Oracle : Foctionnement
Oracle : FoctionnementOracle : Foctionnement
Oracle : Foctionnement
 
Journées SQL Server 2012 Attentes et Performances
Journées SQL Server 2012   Attentes et PerformancesJournées SQL Server 2012   Attentes et Performances
Journées SQL Server 2012 Attentes et Performances
 
Sysadmin Day #5
Sysadmin Day #5Sysadmin Day #5
Sysadmin Day #5
 
Guss webcasts Query Memory Grants - june 2013
Guss webcasts   Query Memory Grants - june 2013Guss webcasts   Query Memory Grants - june 2013
Guss webcasts Query Memory Grants - june 2013
 
GUSS - Les IO dans SQL Server (en partenariat avec DataCore)
GUSS - Les IO dans SQL Server (en partenariat avec DataCore)GUSS - Les IO dans SQL Server (en partenariat avec DataCore)
GUSS - Les IO dans SQL Server (en partenariat avec DataCore)
 
PerfUG - Hadoop Performances
PerfUG - Hadoop PerformancesPerfUG - Hadoop Performances
PerfUG - Hadoop Performances
 
Versionning et travail en équipe avec Salesforce - 27/11/2014
Versionning et travail en équipe avec Salesforce - 27/11/2014Versionning et travail en équipe avec Salesforce - 27/11/2014
Versionning et travail en équipe avec Salesforce - 27/11/2014
 
Exchange 2013 Bonnes pratiques
Exchange 2013 Bonnes pratiques Exchange 2013 Bonnes pratiques
Exchange 2013 Bonnes pratiques
 
JSS2014 – Performances et DMV
JSS2014 – Performances et DMVJSS2014 – Performances et DMV
JSS2014 – Performances et DMV
 
Jss2014 performance counters and dmvs
Jss2014   performance counters and dmvsJss2014   performance counters and dmvs
Jss2014 performance counters and dmvs
 
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cache
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cacheMeetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cache
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cache
 
Plongée au cœur du Framework .NET 4.5
Plongée au cœur du Framework .NET 4.5Plongée au cœur du Framework .NET 4.5
Plongée au cœur du Framework .NET 4.5
 
LP_Admin_base_données.ppt
LP_Admin_base_données.pptLP_Admin_base_données.ppt
LP_Admin_base_données.ppt
 
Réussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDBRéussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDB
 
Journées SQL Server 2011 Extended Events
Journées SQL Server 2011  Extended Events Journées SQL Server 2011  Extended Events
Journées SQL Server 2011 Extended Events
 
FinistJUG - Apache TomEE
FinistJUG - Apache TomEEFinistJUG - Apache TomEE
FinistJUG - Apache TomEE
 
tn005.ppt
tn005.ppttn005.ppt
tn005.ppt
 
Admin bd chapitre1_architecturebd_oracle
Admin bd chapitre1_architecturebd_oracleAdmin bd chapitre1_architecturebd_oracle
Admin bd chapitre1_architecturebd_oracle
 
Comment sauvegarder correctement vos données
Comment sauvegarder correctement vos donnéesComment sauvegarder correctement vos données
Comment sauvegarder correctement vos données
 
Re build Nantes 2013 SQL Server monitoring
Re build Nantes 2013   SQL Server monitoringRe build Nantes 2013   SQL Server monitoring
Re build Nantes 2013 SQL Server monitoring
 

Guss webcasts Tempdb Internals - june 2013

  • 1. Les Webcasts Groupe des Utilisateurs SQL Server Juin 2013 – Tempdb David Baffaleuf– CAPDATA MVP SQL Server
  • 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. 30 ‘ chrono • Toutes les • questions • que vous • vous posez • sur tempdb • … Et aussi celles que vous ne vous posez pas ! • Démos !
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Combien de fichiers de données 1/2 W W OK W W W OK OK OK OK
  • 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. 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. Combien de journaux de transactions ? 1
  • 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. 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. 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. Des questions (pas dans la liste) ?
  • 24. Les Webcasts Groupe des Utilisateurs SQL Server GUSS.fr

Notes de l'éditeur

  1. 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
  2. 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
  3. 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
  4. 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
  5. GAM / SGAM interval : tous les 4Gb, pas seulement 2:1:2 ou 2:1:3 PFS interval = 64Mb pas seulement 2:1:1
  6. 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)
  7. Proportionnal Fill / Round robin On va tourner sur les fichiers ayant au moins le même espace libre.
  8. -T1106 aide à vérifier la rotation dans les fichiers (roundrobin / proportionnal fill)