Introduction
Cette note présente quelques procédures stockées de surveillance d’instances ASE et qui exploitent les tables MDA.
Les tables MDA depuis ASE 12.5.0.3 (2005) permettent d’accéder simplement
aux compteurs systèmes internes de l’instance ASE, compteurs jusqu’à présent
(et toujours) disponibles avec les outils comme sp_sysmon
ou monitor/historical
server.
L’accès à ces informations sous forme de table permet un audit temps réel et simplifié. Les tables MDA remplaceront d’ailleurs définitivement à terme Monitor Server et Historical Server, outils dont la fin de support est annoncée pour le 31/12/2012.
Les tables MDA sont automatiquement installées à partir des versions 15.0 ESD#2. Pour les versions 12.5.x, l’installation des tables MDA est décrite sur SQLPAC : SQLPAC - Sybase 12.5.0.3 -Tables dynamiques MDA de monitoring.
Avec les nouvelles versions ou EBF de Sybase Adaptive Server Enterprise, les tables MDA évoluent et s’enrichissent. Rob Verschoor propose sur son site une page qui récapitule les nouvelles colonnes et nouvelles tables MDA avec les versions : Sypron (Rob Verschoor) - Changes and Enhancements to MDA tables since ASE 12.5.0.3
sp_dba_whodoes : qui travaille ?
Usage
sp_dba_whodoes
liste les processus actuellement actifs sur l’instance, en
complément des procédures stockées sp__who
d’Ed Barlow (EdBarlow.com, extended stored procedures
library)
Par processus, l’activité technique (CPU/Mémoire/Lectures/Lignes) est extraite mais aussi la date de connexion du processus ainsi que la date de la dernière opération :
/**
Usage : sp_dba_whodoes [SPID] ,
[OUTPUTTYPE=0|1|10|11] ,
[SHOWUSAGE=0|1]
OUTPUTTYPE : 0 = summary , 1 = detail
10 = active proc summary , 11 = active proc detail
SHOWUSAGE : 0 = hide usage , 1 = show usage
*/
Les tables utilisées, jointes avec la colonne SPID
, sont les suivantes:
monSysStatement
sysprocesses
Remarque : l’historisation est gérée dans tempdb, le contenu de la table est régulièrement purgée au delà d’une certaine limite. La persistence de cette table dans tempdb est gérée en créant la structure dans la base système model.
OUTPUTTYPE=0 : vue compacte des processus actifs
execute sp_dba_whodoes
-- Usage : sp_dba_whodoes [SPID] , [OUTPUTTYPE=0|1|10|11] , [SHOWUSAGE=0|1] -- Running : sp_dba_whodoes NULL , 10 , 1 spid Cnx Login_DB_Prog Cpu R_W Rws Err DtEnd ---- -------- ----------------------------------------------------- ----- ------ ----- --- -------- 92 6 05:45 smartco_maint/smartco/RepServer 421 3/0 2613 0 14:17:01 52 8 12:00 sa/master/ 10586 3680/0 158 0 14:16:54 164 6 07:10 ws_reportread1/sma_report/DaliServices.Winservice.exe 81 1/0 432 0 14:16:29 254 6 15:25 ws_reportread1/sma_report/DaliServices.Winservice.exe 1824 415/0 28984 0 14:16:29 203 6 07:10 ws_reportread1/sma_report/DaliServices.Winservice.exe 78 0/0 420 0 14:16:29 285 6 15:25 ws_reportread1/sma_report/DaliServices.Winservice.exe 602 123/0 7630 0 14:16:29 84 6 15:25 ws_reportread1/sma_report/DaliServices.Winservice.exe 150 0/0 830 0 14:16:29 34 6 06:21 ws_reportread1/sma_report/DaliServices.Winservice.exe 941 113/0 8839 0 14:16:29
Le premier paramètre offre la fonctionnalité de suivre l’évolution d’un
process particulier en passant son identifiant de connexion (spid
).
execute sp_dba_whodoes 92,10,0;
spid Cnx Login_DB_Prog Cpu R_W Rws Err DtEnd ---- -------- ------------------------------- --- --- ---- --- -------- 92 6 05:45 smartco_maint/smartco/RepServer 535 3/0 3944 0 14:31:56
OUTPUTTYPE=1 : vue détaillée des processus actifs
execute sp_dba_whodoes null,11,0
spid Cnx Login DB Program Cpu Wait MemKb ReadL ReadP PgMod Rws Err DtStart DtEnd ---- -------- -------------- ---------- --------------------------- ----- ---- ------ ----- ----- ----- ----- --- -------- -------- 52 8 12:00 sa master NULL 17136 0 107820 6714 0 0 510 0 13:56:57 14:34:33 92 6 05:45 smartco_maint smartco RepServer 541 16 542270 3 0 0 3960 0 14:11:31 14:34:04 285 6 15:25 ws_reportread1 sma_report DaliServices.Winservice.exe 827 200 17462 146 0 0 8304 0 13:59:27 14:33:21 84 6 15:25 ws_reportread1 sma_report DaliServices.Winservice.exe 345 0 15680 13 0 0 1572 0 14:14:08 14:33:21 34 6 06:21 ws_reportread1 sma_report DaliServices.Winservice.exe 1199 2900 34324 137 0 0 9583 0 13:10:02 14:33:21 164 6 07:10 ws_reportread1 sma_report DaliServices.Winservice.exe 246 0 10894 10 0 0 1092 0 14:15:43 14:33:21 254 6 15:25 ws_reportread1 sma_report DaliServices.Winservice.exe 2070 1266 18622 440 0 0 29649 0 13:33:37 14:33:21 203 6 07:10 ws_reportread1 sma_report DaliServices.Winservice.exe 240 0 10706 9 0 0 1069 0 14:15:43 14:33:20 225 8 03:07 ws_reportread1 sma_report w3wp.exe 72 0 3202 0 0 0 632 0 13:18:57 14:30:22 245 8 03:03 ws_reportread1 sma_report w3wp.exe 54 0 1392 6 0 0 139 0 14:30:03 14:30:2
Le mode détaillé est plus complet et la présentation y est retraitée.
Par rapport à la vue compacte par processus, les informations supplémentaires sont : le nombre de lectures physiques et logiques, le dernier code erreur, le nombre de lignes, les dates de connexion, de début et de fin de traitement.
sp_dba_whatdoes : que fait un processus ?
Usage
sp_dba_whatdoes
donne les dernières opérations réalisées pour un processus
donné. Si aucun SPID
n’est fourni en argument, c’est la procédure
sp_dba_whodoes
qui liste les processus actifs qui est appelée.
Par processus, outre l’activité technique (CPU/Mémoire/Lectures/Rows), le
code SQL exécuté est affiché. Les résultats sont historisés à chaque exécution
de sp_dba_whatdoes
, permettant ainsi d’extraire une séquence d’opérations
passées.
/**
# @(#) Usage : sp_dba_whatdoes [SPID] , [OUTPUTTYPE=0|1] , [ROWS] , [SHOWUSAGE=0|1]
# @(#) SPID : Process spid
# @(#) OUTPUTTYPE : 0 = Summary / 1 = SQL text only
# @(#) ROWS : limits the number of rows returned
# @(#) SHOWUSAGE : 0 = hide usage / 1 = show usage
*/
Les tables utilisées, jointes avec la colonne SPID
, sont les suivantes :
monSysSQLText
monSysStatement
Le nombre de lignes dans le résultat peut être limité avec le troisième paramètre.
Remarque : l’historisation est gérée dans tempdb, le contenu de la table est régulièrement purgée au delà d’une certaine limite. La persistence de cette table dans tempdb est gérée en créant la structure dans la base système model.
OUTPUTTYPE = 0 : vue simple
execute sp_dba_whatdoes 229
-- Usage : sp_dba_whatdoes [SPID] [ , [OUTPUTTYPE=0|1] [ , [ROWS] ] [ , SHOWUSAGE=0|1 ] ] ] -- Running : sp_dba_whatdoes 229 , 0 , 100 , 1 text ---------------------------------------------------------------------------------------------------- update COUNTERS set VALUE=4340761 where COUNTER='EVENT_DETAIL' update BENCHMARK set UPDATE_USER=538, UPDATE_DATE='2011-01-04', UPDATE_TIME='13:17:46', VERSION=4, EXCH_RATE_PROVIDER=3431 where BENCHMARK_ID=3676 commit update COUNTERS set VALUE=33974231 where COUNTER='EVENT_REFERENCE' commit update BENCHMARK set UPDATE_USER=538, UPDATE_DATE='2011-01-04', UPDATE_TIME='13:18:25', VERSION=5, EXCH_RATE_PROVIDER=26466 where BENCHMARK_ID=3676 commit update COUNTERS set VALUE=4369873 where COUNTER='EVENT' update COUNTERS set VALUE=33974575 where COUNTER='EVENT_REFERENCE' update COUNTERS set VALUE=4341226 where COUNTER='EVENT_DETAIL' commit
Les n dernières instructions SQL sont affichées dans leur ordre d’exécution.
OUTPUTTYPE = 1 : vue détaillée
execute sp_dba_whatdoes 59,1,10,0 go
SPID Bat Seq CPU Wait MemKb Reads_P Reads_L Rws Err Db Start Dur text ---- ---- --- --- ---- ----- ------- ------- --- --- ------- -------- --- -------------------------------------------------- 59 7375 1 0 0 26 0 6 2 0 smartco 15:21:36 0 select NAME from SECURITY_NAME where SECURITY_ID=1 59 7376 1 0 0 26 0 8 2 0 smartco 15:21:36 0 select SECURITY_CODE from SECURITY_CODE where SECU 59 7377 1 3 0 110 0 14 2 0 smartco 15:21:36 3 update COUNTERS set VALUE=34 where COUNTER='#EXP_F 59 7378 1 3 0 10 0 0 0 0 smartco 15:21:36 3 commit 59 7379 1 0 0 26 0 6 2 0 smartco 15:22:40 0 select SHORT_NAME from SECURITY_NAME where SECURIT 59 7380 1 0 0 26 0 66 2 0 smartco 15:22:40 0 select CURRENCY from SECURITY where SECURITY_ID=24 59 7381 1 0 0 26 0 60 0 0 smartco 15:22:40 0 select QUOTE_CURRENCY from SECURITY_QUOTE where SE 59 7382 1 0 0 26 0 22 0 0 smartco 15:22:40 0 select QUOTE_LAST from SECURITY_QUOTE where SECURI 59 7383 1 3 0 110 0 14 2 0 smartco 15:22:40 3 update COUNTERS set VALUE=35 where COUNTER='#EXP_F 59 7384 1 3 0 10 0 0 0 0 smartco 15:22:40 3 commit
Le texte SQL devient partiel dans cette vue mais cette version trace plus finement l’état d’avancement d’un traitement (lectures, CPU, lignes…). Les informations captées sont :
BAT, Seq
: BatchID et SequenceID de l’opération.CPU
: consommation CPU du traitement.Wait
: nombre d’évènements d’attente.MemKb
: mémoire consommée par le process.Reads_P
: lectures physiques (Physical Reads).Reads_L
: lectures logiques (Logical Reads).Rws
: lignes (rows : @@rowcount).Err
: code erreur.Db
: base courante.Start
: heure de l’opération.Text
: code SQL partiel de l’opération.
sp_dba_cache : les caches de données sont-ils bien dimensionnés et efficaces ?
Usage
sp_dba_cache
détaille la structure et les performances des caches de
données.
/**
# @(#) Usage : sp_dba_cache [ , OUTPUTTYPE=0|1|2 ] [ , SHOWUSAGE=0|1 ]
# @(#) OUTPUTTYPE : 0 = Summary / 1 = ObjectsStats / 2 = DetailedPerf
# @(#) SHOWUSAGE : 0 = hide usage / 1 = show usage
*/
Les tables utilisées sont les suivantes :
monCachePool
monDataCache
monCachedObject
sysconfigures
(pour le type de cache)
Les jointures sont réalisées sur les colonnes CacheID
ou CacheName
OUTPUTTYPE = 0 : vue résumée de l’efficacité des caches
Il s’agit du mode par défaut.
execute sp_dba_cache
-- Usage : sp_dba_cache [ , OUTPUTTYPE=0|1|2 ] [ , SHOWUSAGE=0|1 ] -- Running : sp_dba_cache 0, 1 Cache Type SizeMb UsedMb UsedPct Tbl# Idx# DB# MissPct VolPct Reuse -------------------- -------- ------ ------ ------- ---- ---- --- ------- ------ ----- default data cache Default 7000 1440 20 509 505 9 0 0 13 smartco log Log Only 200 0 0 1 0 1 0 0 0 smf_distribution Mixed 700 319 45 40 41 1 0 0 0 smf_distribution log Log Only 200 0 0 1 0 1 0 0 6 tempdb cache Mixed 1000 14 1 26 26 1 0 1 0
Ce mode par défaut précise la taille de chaque cache et leur contenu en terme de nombre d’objets
Tbl#
: nombre de tables.Idx#
: nombre d’indexes.DB#
: nombre de bases représentées.
Quelques statistiques pertinentes sont calculées dans ce résumé :
MissPct
: Cache miss % (PhysicalReads / LogicalReads). Excellent 0 <=> 100 Catastrophe.VolPct
: Volatiliy % (PhysicalWrites / PhysicalReads). Excellent 0 <=> 100 Catastrophe.Reuse
: (PagesRead / PagesTouched). Inutile 0 <=> 2+ Bien.
OUTPUTTYPE = 1 : vue détaillée par base
execute sp_dba_cache 1,0
Cache Type SizeMb UsedMb UsedPct Tbl# Idx# DB -------------------- -------- ------ ------ ------- ---- ---- ---------------- default data cache Default 7000 0 0 5 9 model default data cache Default 7000 0 0 5 8 appian default data cache Default 7000 0 0 5 8 dbccdb default data cache Default 7000 2 0 26 31 master default data cache Default 7000 1384 19 421 394 smartco default data cache Default 7000 43 0 14 17 sma_report default data cache Default 7000 0 0 8 10 sybsystemdb default data cache Default 7000 0 0 9 10 sybsecurity default data cache Default 7000 11 0 16 18 sybsystemprocs smartco log Log Only 200 0 0 1 0 smartco smf_distribution Mixed 700 326 46 42 41 smf_distribution smf_distribution log Log Only 200 0 0 1 0 smf_distribution tempdb cache Mixed 1000 14 1 26 26 tempdb
Le second paramètre 0 supprime l’affichage de l’usage (pour une utilisation dans le cadre d’extractions ou d’écrans de consultation).
Les informations sont détaillées par base par rapport à la vue résumée.
OUTPUTTYPE = 2 : vue détaillée par pool (ou zone)
execute sp_dba_cache 2,0
CacheName Pool Type SizeMb UsedMb UsedPct Reuse Stalls PagesRead MRUPct LRUPct -------------------- ---- -------- ------ ------ ------- ----- ------ --------- ------ ------ default data cache 2K Default 5800 474 8 0 0 220738 99 0 default data cache 16K Default 1000 349 34 43 0 7854152 99 0 default data cache 4K Default 200 0 0 5 0 56 100 0 smartco log 2K Log Only 1 0 0 0 0 0 0 0 smartco log 4K Log Only 199 0 0 0 0 2 100 0 smf_distribution 2K Mixed 500 158 31 0 0 38335 97 2 smf_distribution 16K Mixed 200 176 88 1 0 134080 77 22 smf_distribution log 2K Log Only 1 0 0 0 0 0 0 0 smf_distribution log 4K Log Only 199 0 0 6 0 6 100 0 tempdb cache 16K Mixed 400 0 0 0 0 0 0 0 tempdb cache 4K Mixed 200 0 0 0 0 4 100 0 tempdb cache 2K Mixed 400 3 0 1 0 3058 100 0
Les informations déja évoquées dans les vues précédentes (Taille, Usage, Reuse…) sont à présent détaillées par pool.
Stalls
: "Number of dirty buffer retrievals
", autrement dit un temps d’attente I/O (long) sur une mise à disposition d’une page de cache. Lorsque ce paramètre est particulièrement élevé, cela peut révéler un problème majeur d’accès aux disques.PagesRead
: comme son nom l’indique, le nombre de pages lues dans la zone.MRU/LRU pct
: répartition du type de remplacement des données dans la zone (MRU : Most Recent Used, LRU : Least Recent Used).
sp_dba_getobj : quels objets sont en mémoire ?
Usage
sp_dba_getobj
liste les objets en mémoire.
/**
# @(#) Usage : sp_dba_getobj [TABLE] [ , OUTPUTTYPE=0|1|10|11 ] [ , SHOWUSAGE=0|1 ]
# @(#) TABLE : Table name, wildcards managed
# @(#) OUTPUTTYPE : 0 = table only / 1 = include index / +10 = active only
# @(#) SHOWUSAGE : 0 = hide usage / 1 = show usage
*/
Les tables utilisées sont les suivantes :
monOpenObjectActivity
monCachedObject
Comme pour sp_dba_cache
, les jointures sont également réalisées sur les
colonnes CacheID
ou CacheName
.
OUTPUTTYPE = 0 : tables en mémoire
Il s’agit du mode par défaut. Ce mode liste uniquement les tables en mémoires (sans les indexes).
execute sp_dba_getobj
-- Usage : sp_dba_getobj [TABLE] [ , OUTPUTTYPE=0|1|10|11 ] [ , SHOWUSAGE=0|1 ] -- Running : sp_dba_getobj , 0, 1 Cache Tbl Used# LastUsed CachedMb SizeMb Pct ------------------ ------------------------------ ----- ------------ -------- ------ ---- default data cache CLASSIFICATION_VALUE 5152 110308 15:39 0 0 85 default data cache CLASSIFICATION_VALUE 5152 110308 15:39 0 0 100 default data cache PORTFOLIO 19251 110308 15:37 1 1 100 default data cache AGGREG_CRITERION 350 110308 15:37 0 0 100 default data cache MANAGEMENT_TYPE 92 110308 15:37 0 0 100 default data cache PRICE_SOURCE 737 110308 15:36 0 0 100 ... default data cache INSTRUMENT 0 533 533 100
Tous les objets de la base courante actuellement en cache sont affichés :
LastUsed
: colonneLastUsedDate
de la table MDAOpenObjectActivity
, autrement dit date du dernier accès utilisateur sur l’objet.SizeMb
: taille de l’objet.CachedMb
: taille de l’objet en cache.Used#
: nombre d’accès sur l’objet.
Le résultat de l’exemple peut paraître surprenant, un objet est en effet
entièrement en cache (table INSTRUMENT
) sans pourtant montrer d’accès direct
(ni date, ni UsedCount).
2 causes sont possibles :
- des données sont insérées dans une table mais pas lues.
- la présence d’un index de type clustered, index non affiché dans cette vue qui ne référence que les tables. Ce cas de figure est évoqué dans le paragraphe qui suit.
OUTPUTTYPE = 1 : tables et indexes en mémoire
Pour illustrer l’option d’affichage des indexes en cache, dans l’exemple
ci-dessous, un filtre est appliqué sur le nom de la table (INSTRUMENT
).
execute sp_dba_getobj INSTRUMENT, 1,0
Cache Object Used# LastUsed CachedMb SizeMb Pct ------------------ ---------------------------------- -------- ------------ -------- ------ ---- default data cache INSTRUMENT 0 533 533 100 default data cache INSTRUMENT.TRANSCO_2 278786 110308 15:39 20 20 100 default data cache INSTRUMENT.IDX_INST_ECON_LNK_SEC 209261 110308 15:42 3 14 22 default data cache INSTRUMENT.PK_INSTRUMENT 47366068 110308 15:42 2 521 0 default data cache INSTRUMENT.IDX_INST_INST_TYP 2395 110308 15:33 2 20 10 default data cache INSTRUMENT.IDX_INST_DALI_CODE 420211 110308 15:36 2 18 10 default data cache INSTRUMENT.TRANSCO_1 506230 110308 15:39 0 21 1 default data cache INSTRUMENT.IDX_INST_DECALOG_CODE 75 110308 14:51 0 15 0 NULL INSTRUMENT.IDX_INST_UNDY_PTF 3700178 110308 06:56 NULL NULL NULL NULL INSTRUMENT.IDX_INSTRUMENT_REF_ENT 732 110308 06:03 NULL NULL NULL NULL INSTRUMENT.IDX_INSTRUMENT_ISSUE_DT 0 NULL NULL NULL NULL INSTRUMENT.IDX_INSTRUMENT_NAME 0 NULL NULL NULL NULL INSTRUMENT.IDX_INSTRUMENT_ISSUER 0 NULL NULL NULL NULL INSTRUMENT.IDX_INSTRUMENT_CRE_DTE 3 110308 06:03 NULL NULL NULL NULL INSTRUMENT.IDX_INSTRUMENT_ISIN 262173 110308 10:38 NULL NULL NULL NULL INSTRUMENT.IDX_INSTRUMENT_MOD_DTE 2 110308 04:58 NULL NULL NULL NULL INSTRUMENT.IDX_ADMIN_LNK_SECURITY 0 NULL NULL NULL NULL INSTRUMENT.IDX_INST_SEDOL_CODE 94939 110308 11:11 NULL NULL NULL NULL INSTRUMENT.COUNTRY 0 NULL NULL NULL
La démonstration de la provenance des accès sur la table INSTRUMENT
est
faite avec l’affichage des indexes en cache : les pages de données sont en
cache mais accédées par les indexes
Le troisième paramètre 0 supprime l’affichage de l’usage (pour une utilisation dans le cadre d’extractions ou d’écrans de consultation).
sp_dba_getwe (get Wait Events) : quels sont les évènements d’attente ?
Usage
sp_dba_getwe
liste les évènements d’attente globaux ou associés à un
processus.
/**
# @(#) Usage : sp_dba_getwe [SPID] [ , [OUTPUTTYPE=0|1|2] [ , [CLEAR=0|1] ] , [SHOWUSAGE=0|1] ]
# @(#) SPID : Process ID
# @(#) OUTPUTTYPE : 0 = Event detail / 1 = Event summary / 2 = Class summary
# @(#) CLEAR : 0 = maintain history / 1 = clear history
# @(#) SHOWUSAGE : 0 = hide usage / 1 = showusage
*/
Un historique est géré, les données étant stockées dans tempdb. Le troisième paramètre permet de le vider.
monProcessWaits
est La table MDA source utilisée.
Remarque : l’historisation est gérée dans tempdb, le contenu de la table est régulièrement purgée au delà d’une certaine limite. La persistence de cette table dans tempdb est gérée en créant la structure dans la base système model.
OUTPUTTYPE = 0 : détail par évènement
Il s’agit du mode par défaut. Ce mode liste les évènements d’attentes mesurés sur l’instance.
execute sp_dba_getwe
-- Usage : sp_dba_getwe [SPID] [ , [OUTPUTTYPE=0|1|2] [ , [CLEAR=0|1] ] , [SHOWUSAGE=0|1] ] -- Running : sp_dba_getwe NULL , 0 , 0 , 1 Cl_Evt Description T_Waits T_Seconds dtFrom dtTo Waits Seconds sPct ------ ------------------------------------------------------------ ------- --------- -------- -------- ------ ------- ---- 1/214 to be scheduled/on run queue after yield 3227085 21015 08:34:23 15:56:37 526863 3246 0 2/197 a disk read to complete/read to complete in parallel dbcc 3 0 08:34:23 15:56:37 0 0 0 2/200 a disk read to complete/page reads in parallel dbcc 1184134 4068 08:34:23 15:56:37 0 0 0 2/203 a disk read to complete/on MASS_READING bit in parallel dbcc 3 0 08:34:23 15:56:37 0 0 0 2/29 a disk read to complete/regular buffer read to complete 3624460 5614 08:34:23 15:56:37 805537 1180 0 ....
Pour un processus particulier :
execute sp_dba_getwe 149
-- Usage : sp_dba_getwe [SPID] [ , [OUTPUTTYPE=0|1|2] [ , [CLEAR=0|1] ] , [SHOWUSAGE=0|1] ] -- Running : sp_dba_getwe 149 , 0 , 0 , 1 SPID Cl_Evt Description T_Waits T_Seconds DtFrom DtTo Waits Seconds sPct ---- ------ ------------------------------------------------------------ ------- --------- -------- -------- ----- ------- ---- 149 1_214 to be scheduled/on run queue after yield 8353 4 15:45:57 16:01:50 355 0 0 149 2_29 a disk read to complete/regular buffer read to complete 865176 1182 15:45:57 16:01:50 30622 139 14 149 3_31 a disk write to complete/buf write to complete before writin 403 1 15:45:57 16:01:50 39 0 0 149 3_51 a disk write to complete/last i/o on MASS to complete 609 1 15:45:57 16:01:50 36 0 0 149 3_52 a disk write to complete/i/o on MASS initated by another tas 45 0 15:45:57 16:01:50 1 0 0 149 3_54 a disk write to complete/write of the last log page to compl 2 0 15:45:57 16:01:50 0 0 0 149 3_55 a disk write to complete/i/o to finish after writing last lo 3642 6 15:45:57 16:01:50 343 0 0 149 5_150 to take a lock/a lock 1561 3 15:45:57 16:01:50 176 1 0 149 6_36 memory or a buffer/MASS to finish writing before changing 116 0 15:45:57 16:01:50 9 0 0 149 6_46 memory or a buffer/buf write to finish getting buf from LRU 156 3 15:45:57 16:01:50 0 0 0 149 6_157 memory or a buffer/object to be returned to pool 9120 2 15:45:57 16:01:50 0 0 0 149 6_280 memory or a buffer/access to a memory manager semaphore 2 0 15:45:57 16:01:50 0 0 0 149 7_250 input from the network/incoming network data 4780 15636 15:45:57 16:01:50 358 635 68 149 8_251 to output to the network/network send to complete 374763 828 15:45:57 16:01:50 20534 42 4 149 9_41 internal system event/to acquire latch 66 0 15:45:57 16:01:50 7 0 0 149 9_70 internal system event/device semaphore 61 0 15:45:57 16:01:50 2 0 0 149 9_124 internal system event/mass read to finish when getting page 323153 746 15:45:57 16:01:50 37167 114 12 149 9_169 internal system event/message 78 0 15:45:57 16:01:50 11 0 0 149 9_209 internal system event/a pipe buffer to read 111 0 15:45:57 16:01:50 5 0 0 149 9_266 internal system event/message in worker thread mailbox 1042 0 15:45:57 16:01:50 111 0 0 ....
T_Waits
: nombre d’attentes (Total Waits).T_Seconds
: total du temps d’attente (en sec).sPct
: pourcentage du temps d’attente.
OUTPUTTYPE = 1 : résumé par évènement (event)
Cette option résume (somme) toutes les attentes par évènement et par classe.
execute sp_dba_getwe null,1;
-- Usage : sp_dba_getwe [SPID] [ , [OUTPUTTYPE=0|1|2] [ , [CLEAR=0|1] ] , [SHOWUSAGE=0|1] ] -- Running : sp_dba_getwe NULL , 1 , 0 , 1 Cl_Evt Description T_Waits T_Seconds dtFrom dtTo Waits Seconds sPct ------ ------------------------------------------------------------ ------- --------- -------- -------- ------ ------- ---- 1/214 to be scheduled/on run queue after yield 3225796 21044 08:34:23 16:09:26 525614 3273 0 2/197 a disk read to complete/read to complete in parallel dbcc 3 0 08:34:23 16:09:26 0 0 0 2/200 a disk read to complete/page reads in parallel dbcc 1184134 4068 08:34:23 16:09:26 0 0 0 2/203 a disk read to complete/on MASS_READING bit in parallel dbcc 3 0 08:34:23 16:09:26 0 0 0 2/29 a disk read to complete/regular buffer read to complete 3313682 4982 08:34:23 16:09:26 499839 561 0 ...
T_Waits
: nombre d’attentes (Total Waits).T_Seconds
: total du temps d’attente (en sec).sPct
: pourcentage du temps d’attente.
OUTPUTTYPE = 2 : résumé par classe d’évènements (class)
Cette option résume (somme) toutes les attentes uniquement par classe d’évènements.
execute sp_dba_getwe null,2,0,0;
Cls Description T_Waits T_Seconds dtFrom dtTo Waits Seconds sPct --- ------------------------ ------- --------- -------- -------- ------ ------- ---- 1 to be scheduled 3226864 21056 08:34:23 16:11:20 526682 3282 0 2 a disk read to complete 4513240 9086 08:34:23 16:11:20 515569 585 0 3 a disk write to complete 2172483 4685 08:34:23 16:11:20 198502 540 0 5 to take a lock 4249 208 08:34:23 16:11:20 496 7 0 6 memory or a buffer 86105 124 08:34:23 16:11:20 1467 2 0 7 input from the network 1311008 1828269 08:34:23 16:11:20 258017 362745 64 8 to output to the network 751986 1154 08:34:23 16:11:20 148456 213 0 9 internal system event 839458 2738963 08:34:23 16:11:20 81654 191543 34
T_Waits
: nombre d’attentes (Total Waits).T_Seconds
: total du temps d’attente (en sec).sPct
: pourcentage du temps d’attente.
sp_dba_io : comment sont réparties les E/S ou entrées/sorties (I/O Input/output) ?
Usage
sp_dba_io
liste les I/Os répartis par device, devices qui peuvent être
filtrés dans l’affichage.
/**
# @(#) Usage : sp_dba_io [ device ] [ , [REPORTTYPE=0|1] ] [ , SHOWUSAGE=0|1 ]
# @(#) DEVICE : device name ,wildcard managed
# @(#) OUTPUTTYPE : 0 = summary, 1 = detailed
# @(#) SHOWUSAGE : 0 = hide usage / 1 = show usage
*/
Les tables MDA source sont :
monIOQueue
monDeviceIO
sysusages
etsysdevices
OUTPUTTYPE = 0 : résumé par device (support)
Il s’agit du mode par défaut. Ce mode liste, par device, les I/Os dans l’instance.
execute sp_dba_io
-- Usage : sp_dba_io [ device ] [ , [REPORTTYPE=0|1] ] [ , SHOWUSAGE=0|1 ] -- Currently running : sp_dba_io , 0 , 1 Device Type IO IOpc IOT IOTpc ms_IO ---------------------- ---- ------- ---- ---------- ----- ----- log_dbccdb_1 LOG 2667805 5 4587400 0 1 data_investment_01 DATA 2145960 4 16919600 0 7 data_investment_21 DATA 2130452 4 26778500 0 12 log_investment_01 LOG 2052050 4 4128400 0 2 data_investment_23 DATA 1870013 3 16152400 0 8 data_investment_04 DATA 1592711 3 6599800 0 4 ...
IO
: nombre d’I/Os.IOT
: temps I/O.IOpc
: pourcentage d’I/Os sur le device.ms_IO
: durée moyenne (en ms) des I/Os.
OUTPUTTYPE = 1 : détail par device
execute sp_dba_io 'log%',1,0
Device Type IO IOpc ms_IO Reads Rpc ReadsAPF Writes Wpct R_Wpc --------------------- ---- ------- ---- ----- ------ --- -------- ------- ---- ----- log_dbccdb_1 LOG 2667805 5 1 113956 0 30043 2559916 9 4/95 log_investment_01 LOG 2055642 3 2 415042 1 55 2082723 7 16/83 log_FDB_01 LOG 1251549 2 25 308255 0 261525 995356 3 23/76 log_Invest_Staging_01 LOG 797711 1 98 200328 0 158 811450 2 19/80 log_idee_idb_01 LOG 259748 0 3 217133 0 12076 257622 0 45/54 log_ISLF_01 LOG 3 0 66 665 0 0 1 0 99/0 ...
IO
: nombre d’I/Os.IOpc
: pourcentage d’I/Os sur le device.ms_IO
: durée moyenne (en ms) des I/Os.Reads
: nombre de lectures.Rpc
: pourcentage de lectures sur le device.ReadsAPF
: nombre de "Prefetch" (pré lectures anticipées).Writes
: nombre d’écritures.Wpct
: pourcentage d’écritures sur le device.R_Wpc
: répartition lecture/ecriture en pourcentage (Read/Write).
sp_dba_spid : quelle est l’activité d’un processus au cours du temps ?
Usage
sp_dba_spid
liste l’activité globale d’un processus. La méthode affiche un
historique de l’activité mais aussi un différentiel de mesures.
/**
# @(#) Usage : sp_dba_spid SPID [ , [REPORTTYPE=0|1|2] , [SHOWUSAGE=0|1]
# @(#) REPORTTYPE : 0 = physical / 1 = logical / 2 = Transactional
# @(#) SHOWUSAGE : 0 = hide usage / 1 = show usage
*/
monProcessActivity
est la table source MDA utilisée ici.
Remarque : l’historisation est gérée dans tempdb, le contenu de la table est régulièrement purgée au delà d’une certaine limite. La persistence de cette table dans tempdb est gérée en créant la structure dans la base système model.
OUTPUTTYPE = 0 : activité physique
Il s’agit du mode par défaut. Ce mode liste l’activité physique classique d’un processus au cours du temps (temps CPU, temps d’attente, mémoire, lectures, écritures…).
execute sp_dba_spid 41
-- Usage : sp_dba_spid [SPID] , [OUTPUTTYPE=0|1|2] , [SHOWUSAGE=0|1] -- Running : sp_dba_spid 41 , 0 , 1 Date CPUTime WaitTime MemKB ReadsP ReadsL PagesR WritesP PagesW ---------- ------- -------- ----- ------ ------ ------ ------- ------ 16:53:01 100 3870800 4 1291 37667 1354 211 446 16:53:03 100 3873300 4 1291 37667 1354 211 446 16:53:05 100 3874900 4 1291 37667 1354 211 446 16:53:07 100 3876900 4 1291 37667 1354 211 446 16:53:21 100 3891400 4 1291 37667 1354 211 446 16:53:24 100 3893800 4 1291 37667 1354 211 446 17:02:15 100 4424800 4 1291 37667 1354 211 446 17:06:09 100 4659000 4 1291 37667 1354 211 446 17:06:14 100 4663900 4 1291 37667 1354 211 446 < 16:53:01 0 793100 0 0 0 0 0 0 > 17:06:09 0 4900 0 0 0 0 0 0 ...
CPUTime
: usage CPU.WaitTime
: temps d’attente total depuis la connexion.MemKb
: mémoire utilisée.ReadsP
: lectures physiques ( disque ).ReadsL
: lectures logiques ( cache ).PagesR
: pages lues.WriteP
: écritures physiques ( disque ).PagesW
: pages écrites.
Les deux dernières lignes mesurent les différences
"<"
: entre la mesure courante et la première prise.">"
: entre la mesure courante et l’avant-dernière prise.
OUTPUTTYPE = 1 : activité logique
Ce mode se focalise sur l’activité logique d’un processus dans le temps : verrous, accès aux tables et indexes, tables temporaires créées, nombre de transactions.
execute sp_dba_spid 372,1,0
Date Locks TblAccess IdxAccess TmpObj WorkTables Trans ---------- ----- --------- --------- ------ ---------- ----- 16:53:01 0 3994 2707 6 13 34 16:53:03 0 3994 2707 6 13 34 16:53:05 0 3994 2707 6 13 34 16:53:07 0 3994 2707 6 13 34 16:53:21 0 3994 2707 6 13 34 16:53:24 0 3994 2707 6 13 34 17:02:15 0 3994 2707 6 13 34 17:06:09 0 3994 2707 6 13 34 17:06:14 0 3994 2707 6 13 34 17:10:29 0 3994 2707 6 13 34 17:10:34 0 3994 2707 6 13 34 < 16:53:01 0 0 0 0 0 0 > 17:10:29 0 0 0 0 0 0 ...
Locks
: verrous posés.TblAccess
: nombre d’accès à des tables.IdxAccess
: indexes utilisés.TmpObj
: tables temporaires utilisées.Worktable
: nombre de tables de travail temporaires pour des opérations internes comme les tris, les regroupements (order by
,group by
…).Trans
: nombre de transactions
OUTPUTTYPE = 2 : activité transactionnelle
execute sp_dba_spid 372,2,0
Date Trans Commits Rollbacks ULCBytesWritten ULCFlushes ULCMaxUsage ULCCurrentUsage ---------- ----- ------- --------- --------------- ---------- ----------- --------------- 16:53:01 34 34 0 632416 183 10216 0 16:53:03 34 34 0 632416 183 10216 0 16:53:05 34 34 0 632416 183 10216 0 16:53:07 34 34 0 632416 183 10216 0 16:53:21 34 34 0 632416 183 10216 0 16:53:24 34 34 0 632416 183 10216 0 17:02:15 34 34 0 632416 183 10216 0 17:06:09 34 34 0 632416 183 10216 0 17:06:14 34 34 0 632416 183 10216 0 17:10:29 34 34 0 632416 183 10216 0 17:10:34 34 34 0 632416 183 10216 0 17:13:25 34 34 0 632416 183 10216 0 < 16:53:01 0 0 0 0 0 0 0 > 17:10:34 0 0 0 0 0 0 0 ...
Trans
: nombre de transactions.Commits
: nombre de transactions validées.Rollbacks
: nombre de transactions annulées.ULCBytesWritten
: nombre d’écritures dans le cache ULC (User Log Cache).ULCFlush
: nombre d’écritures du cache ULC vers le journal.ULCMaxUsage
: taille maximum du cache ULC.ULCCurrentUsage
: taille actuelle du cache ULC.