Analyse des performances d’un serveur Sybase ASE avec sp_sysmon

Logo

Introduction

La procédure sp_sysmon fournit :

  • une vue de l’activité du serveur pour une durée déterminée
  • des statistiques sur une gamme étendue d’activité système

Cette procédure est très utile pour analyser l’activité générale du serveur ainsi que pour localiser un point de contention à optimiser.

Lors de l’appel de la procédure sp_sysmon, celle-ci supprime les données accumulées dans une série de compteurs qui sont utilisés pendant l’intervalle échantillon afin de fournir des informations sur les activités du système et des utilisateurs. À la fin de l’intervalle échantillon, la procédure lit les compteurs, affiche les rapports et s’arrête.

Syntaxe simplifiée

Il existe 2 méthodes d’utilisation de sp_sysmon :

- en utilisant un intervalle de temps fixe :

exec sp_sysmon intervalle [,section]

- en utilisant les paramètres begin_sample et end_sample pour démarrer et arrêter l’échantillonnage :

exec sp_sysmon begin_sample
exec proc1
exec proc2
exec sp_sysmon end_sample [,section]

Dans le tableau ci-dessous, la liste des sections :

Section Paramètre
Application Management Data Cache Management Disk I/O Management ESP Management Index Management Kernel Utilization Lock Management Memory Management Metadata Cache Management Monitor Access to Executing SQL Network I/O Management Parallel Query Management Procedure Cache Management Recovery Management Task Management Transaction Management Transaction Profile Worker Process Management appmgmt dcache diskio dsp indexmgmt kernel locks memory mdcache monaccess netio parallel pcache recovery taskmgmt xactmgmt xactsum wpm
Section Description
Application Management Statistiques relatives à l’exécution des tâches utilisateur
Data Cache Management Statistiques sur l’usage des caches
Disk I/O Management E/S disque. Cette section retrace les activités des E/S disque sur la totalité du serveur et indique les lectures, écritures et conflits de sémaphores sur chaque device logique
ESP Management Utilisation des procédures stockées étendues
Index Management Gestion des indexes : réductions d’encombrement, fractionnement…
Kernel Utilization Activités qui prennent place à l’intérieur du serveur, comme l’utilisation intense des machines (context switches), l’utilisation CPU par machine, contrôles réseau et E/S disque
Lock Management Activités sur les verrous, inter blocages, conversion et escalades de verrous, conflits
Memory Management Pages allouées et libérées pendant l’intervalle d’échantillonnage
Metadata Cache Management Utilisation des caches de métadonnées (objets, indexes et bases de données
Network I/O Management Activités du moteur ASE sur le réseau
Parallel Query Management Statistiques sur l’exécution de requêtes en parallèle. Nombre de requêtes en parallèle, nombre de réajustements pendant l’exécution, octroi des verrous pendant les fusions et les tris
Procedure Cache Management Statistiques sur les procédures et triggers en cache (requêtes, lectures sur disque, suppressions du cache…)
Recovery Management Statistiques sur les points de reprise (durée moyenne…), les housekeepers
Task Management Connexions ouvertes, commutateurs de tâches contextuels par engine et commutateurs de tâches contextuels par cause
Transaction Management Activités de gestion des transactions : caches ULC des utilisateurs, journaux de transactions, demandes de sémaphores d’ULC
Transaction Profile Statistiques sur les modifications de données par type de commande, plans de verrouillage
Worker Process Management Utilisation des processus de travail, processus de travail octroyés et refusés, succès et échecs des demandes de mémoire pour les processus

L’entête

DBCC execution completed. If DBCC printed error messages, contact a user with
System Administrator (SA) role.
===========================================================================
      Sybase Adaptive Server Enterprise System Performance Report
===========================================================================

Server Version:        Adaptive Server Enterprise/1X.X/XXXX/P/<plate-forme>
Server Name:           XXXXXXXXXXXX
Run Date:              Jan 31, 2002
Statistics Cleared at: 12:00:00
Statistics Sampled at: 12:30:00
Sample Interval:       00:30:00

L’entête donne des informations sur la version d’ASE, ainsi que la date et la durée de l’échantillonnage.

Lecture des résultats

sp_sysmon affiche des statistiques sur les performances sous la forme d’un tableau. Les lignes du tableau sont fonctions de la section. Il y a en général 4 colonnes :

  • "per sec" : moyenne par seconde pendant l’intervalle échantillon
  • "per xact" : moyenne par transaction validée pendant l’intervalle d’échantillon
  • "count" : nombre total pendant l’intervalle échantillon
  • "% of total" : dépend du contexte.

Les sections à connaître

Kernel Utilization

Engine Busy Utilization
 Engine 0                        0.0 %

Dans cette exemple Il n’y a qu’un seul moteur mais cette section montre autant d’engines qu’il y en a de configuré. La section "Engine Busy Utilization" indique le pourcentage de temps pendant lequel le noyau d’ASE exécute des tâches sur chaque engine. La ligne récapitulative (quand il y a plusieurs moteurs) donne le temps d’activité total et moyen pour tous les moteurs combinés. Cette section peut aider à déterminer s’il y a trop ou peu d’engines ASE. Si les valeurs sont très élevés (> 90%), l’ajout d’un engine peut améliorer le temps de réponse et les transmissions de données.

Task Management

Task Management              per sec      per xact       count  % of total
------------------------- ------------  ------------  ----------  ------
  Connections Opened           0.0           0.0           0       n/a

  Task Context Switches by Engine
    Engine 0                   51.0         204.0         204     100.0 %

Task Context Switches Due To:
    Voluntary Yields            0.0           0.0           0       0.0 %
    Cache Search Misses         0.0           0.0           0       0.0 %
    System Disk Writes          0.0           0.0           0       0.0 %
    I/O Pacing                  0.0           0.0           0       0.0 %
    Logical Lock Contention     0.0           0.0           0       0.0 %
    Address Lock Contention     0.0           0.0           0       0.0 %
    Latch Contention            0.0           0.0           0       0.0 %
    Log Semaphore Contention    0.0           0.0           0       0.0 %
    PLC Lock Contention         0.0           0.0           0       0.0 %
    Group Commit Sleeps         0.0           0.0           0       0.0 %
    Last Log Page Writes        0.0           0.0           0       0.0 %
    Modify Conflicts            0.0           0.0           0       0.0 %
    I/O Device Contention       0.0           0.0           0       0.0 %
    Network Packet Received     25.3         101.0         101      49.5 %
    Network Packet Sent         125.3         501.0         501     245.6 %
    Other Causes                -99.5        -398.0        -398      -195 %
switch Description
Voluntary Yields Time-slice expiré
Cache Search Misses Pages non trouvées dans le cache de données, accès aux disques
System Disk Writes Housekeeper, checkpoint
I/O Pacing Sommeil après avoir dépassé la limite des E/S pour un batch
Logical Lock Contention Contention de verrous de table, page et ligne
Address Lock Contention Contention de verrous en mémoire (OAM…)
Log Semaphore Contention Contention de spinlock sur le journal
Group Commit Sleeps Réduction d’écriture de page de journal redondante
Last Log Page Writes Attente que la dernière page du journal soit écrite sur disque
Modify Conflicts Verrous sur les tables systèmes
I/O Device Contention Contention de device en environnement SMP
Network Packet Received Delais de réception de multiples paquets
Network Packet Sent Sommeil après l’envoi de paquets

"Task Context Switches Due To" est une section particulièrement intéressante car elle permet de déterminer les raisons de changement de contextes et surtout donne une indication sur la section à surveiller pour résoudre ce problème. C’est, en général, la première section à regarder.

Il est à noter que le fait d’avoir des compteurs élevés n’est pas forcément signe d’un problème.

La ligne "Cache Search Misses" ainsi que les lignes concernant les contention sont particulièrement à surveiller. Un pourcentage supérieur à 10 - 13% pointe en général un problème concernant ces sections.

Housekeeper Task Activity

Housekeeper Task Activity
-------------------------
                              per sec      per xact       count  % of total
                             ------------  ------------  ----------
Buffer Cache Washes
  Clean                          20.0          80.0          80     100.0 %
  Dirty                           0.0           0.0           0       0.0 %
                             ------------  ------------  ----------
Total Washes                     20.0          80.0          80

Garbage Collections               2.0           8.0           8       n/a
Pages Processed in GC             0.0           0.0           0       n/a
Statistics Updates                2.0           8.0           8       n/a

Buffer Cache Washes

Cette section indique :

  • le nombre de buffers examinés par le gestionnaire de tâches (housekeeper)
  • le nombre de buffers qui n’ont pas été modifiés
  • le nombre de buffers qui ont été modifiés

Garbage Collections

Cette section indique le nombre de fois que la tâche housekeeper a vérifié l’existence de suppressions validées, indiquant la libération d’un espace devenu utilisable par des pages de données.

"Pages Processed in GC" indique le nombre de pages sur lesquelles la tâche housekeeper a réussi à récupérer de l’espace inutilisé dans une page d’une table DOL.

Statistics Updates

"Statistics Updates" indique le nombre de contrôles que la tâche housekeeper a effectué pour voir si des statistiques devaient être enregistrées.

Lock Management

Lock Summary                  per sec      per xact       count  % of total
-------------------------  ------------  ------------  ----------  --------  
  Total Lock Requests            1856.5        7426.0      7426       n/a
  Avg Lock Contention             0.0           0.0           0       0.0 %
  Deadlock Percentage             0.0           0.0           0       0.0 %
  Lock Hashtable Lookups       1856.5        7426.0        7426       n/a
  Avg Hash Chain Length           n/a           n/a     0.00000       n/a

"Lock Summary" fournit des statistiques générales sur les opérations relatives aux verrous exécutées durant l’intervalle échantillon.

"Total Lock Requests" indique le nombre total de demandes de verrous.

"Avg Lock Contention" indique le nombre moyen de conflits de verrous survenus en pourcentage du nombre total de demandes de verrous. Si le nombre "Avgt Lock Contention" est élevé, consulter les informations détaillées relatives aux verrous ("Lock Detail" ).

"Deadlock Percentage" indique le nombre d’interblocages ("deadlocks") en pourcentage du nombre total de demandes de verrous. Si cette valeur est élevée, se reporter à la section "Deadlocks by Lock Type"

"Lock Hashtable Lookups" indique le nombre de fois que la table de hachage de verrou a été consultée pour une recherche de verrou sur une page, une ligne ou une table.

"Avg Hash Chain Length" indique le nombre moyen de verrous par compartiment de hachage durant l’intervalle échantillon. Il est possible de configurer la taille de la table de hachage de verrou avec le paramètre de configuration lock hashtable size. Si le nombre moyen de verrous par chaîne de hachage est inférieur à quatre, il est possible d’augmenter la taille de la table de hachage.

Data Cache Management

Cache Statistics Summary (All Caches)
  -------------------------------------
                            per sec      per xact       count  % of total
                        ------------  ------------  ----------  ----------
    Cache Search Summary
      Total Cache Hits        1254.3        5017.0        5017     100.0 %
      Total Cache Misses         0.0           0.0           0       0.0 %
  -------------------------  ------------  ------------  ----------
    Total Cache Searches      1254.3        5017.0        5017

    Cache Turnover
      Buffers Grabbed            0.0           0.0           0       n/a

    Cache Strategy Summary
      Cached (LRU) Buffers     1254.3        5017.0        5017     100.0 %
      Discarded (MRU) Buffers     0.0           0.0           0       0.0 %

    Large I/O Usage
                                  0.0           0.0           0       n/a

    Large I/O Effectiveness
      Pages by Lrg I/O Cached     0.0           0.0           0       n/a

    Asynchronous Prefetch Activity
                                  0.0           0.0           0       n/a

    Other Asynchronous Prefetch Statistics
      APFs Used                   0.0           0.0           0       n/a
      APF Waits for I/O           0.0           0.0           0       n/a
      APF Discards                0.0           0.0           0       n/a

    Dirty Read Behavior
      Page Requests               0.0           0.0           0       n/a

---------------------------------------------------------------------------
  Cache: default data cache
                              per sec      per xact       count  % of total
-------------------------  ------------  ------------  ----------  --------
Spinlock Contention             n/a           n/a         n/a       0.0 %
    Utilization                 n/a           n/a         n/a     100.0 %

    Cache Searches
      Cache Hits             1254.3        5017.0        5017     100.0 %
         Found in Wash          3.0          12.0          12       0.2 %
      Cache Misses              0.0           0.0           0       0.0 %
-------------------------  ------------  ------------  ----------
    Total Cache Searches     1254.3        5017.0        5017

"Total Cache Hits" indique le nombre de fois qu’une page recherchée est trouvée dans un cache. "% of total" donne le pourcentage de présence dans le cache par rapport au total des recherches.

"Total Cache Misses" indique le nombre de fois qu’une page n’a pas été trouvée dans un cache et a été lue sur le disque. "% of total" donne, en pourcentage, le nombre de fois que le buffer n’a pas été trouvé dans le cache, par rapport au nombre total des recherches.

"Total Cache Searches" indique le nombre total de recherches dans le cache, y compris les présences et les non-présences dans tous les caches.

Large I/O Usage

Cette section comporte des informations relatives aux demandes d’E/S étendues dans tous les caches. Si la valeur de "Large I/Os Denied" est élevée, analyser les caches séparément pour en déterminer la cause.

Large I/O Effectiveness

La section "Large I/O Effectiveness" permet d’évaluer les performances dues aux E/S étendues. Elle compare le nombre de pages extraites dans le cache par des E/S étendues avec le nombre de pages référencées dans le cache. Si le pourcentage "Pages by Lrg I/O Used" est faible, cela signifie que les requêtes accèdent à un nombre restreint de pages dans le cache. Dans ce cas, analyser les requêtes individuelles pour identifier la cause du problème. Utiliser optdiag pour vérifier la valeur de "Large I/O Efficiency" pour chaque table et index.

APFs Denied Due To

Cette section décrit les raisons pour lesquelles les APF (Asynchroned Prefetch) ne sont pas utilisés :

"APF I/O Overloads" indique le nombre de fois que des APF n’ont pas pu être utilisés, en raison d’un manque de structures d’E/S disque ou d’un goulet d’étranglement sur le disque. Si ce nombre est élevé, vérifier les informations suivantes dans la section "Disk I/O Management" du rapport.

"APF Limit Overloads" indique que le pourcentage de zones de buffers pouvant être utilisés pour une prélecture asynchrone est dépassé. Cette limite est définie pour la totalité des activités du serveur à l’aide du paramètre de configuration 'global async prefetch limit'. Elle peut être optimisée au cas par cas avec sp_poolconfig.

"APF Reused Overloads" indique que l’utilisation des APF n’a pas été autorisée, en raison d’une anomalie dans une chaîne de pages ou parce que des buffers extraits par des APF ont été expulsés avant qu’il ait été possible d’y accéder.

Cache Spinlock Contention

"Spinlock Contention" indique, en pourcentage, le nombre de fois qu’un engine a été bloqué par un verrou d’attente et a attendu, par rapport au total des requêtes de verrouillage d’attente pour le cache. Cette section ne concerne que les environnements SMP.

Si le conflit de verrou d’attente représente plus de 10 %, il est nécessaire d’utiliser des caches nommés ou ajouter des partitions de cache.

Procedure Cache Management

Procedure Cache Management    per sec      per xact       count  % of total
---------------------------  ------------  ------------  ----------  ------
  Procedure Requests             0.5           2.0           2       n/a
  Procedure Reads from Disk      0.0           0.0           0       0.0 %
  Procedure Writes to Disk       0.0           0.0           0       0.0 %
  Procedure Removals             0.0           0.0           0       n/a

Procedure Requests

"Procedure Requests" indique le nombre de fois que des procédures stockées ont été exécutées. Lors de l’exécution d’une procédure stockée, les possibilités sont les suivantes :

  • une copie en mémoire du plan d’exécution existe et libre, elle est utilisée
  • aucune copie de la procédure n’est en mémoire ou bien toutes les copies du plan sont utilisées, de sorte que la procédure doit être lue sur le disque

Procedure Reads from Disk

"Procedure Reads from Disk" indique le nombre de fois que des procédures stockées ont été lues sur le disque au lieu d’être copiées dans le cache de procédures.

"% of total" indique le pourcentage de lectures de procédures sur le disque, par rapport au nombre total de requêtes de procédure. Si ce chiffre est relativement élevé, il se peut que le cache de procédures soit trop petit.

Procedure Writes to Disk

"Procedure Writes to Disk" indique le nombre de procédures créées pendant l’intervalle. Ces chiffres peuvent être importants lorsque des programmes d’application génèrent des procédures stockées.

Procedure Removals

"Procedure Removals" indique le nombre de fois qu’une procédure a été supprimée du cache.

Disk I/O Management

Disk I/O Management
-------------------

  Max Outstanding I/Os        per sec      per xact       count  % of total
-------------------------  ------------  ------------  ----------  --------
    Server                     n/a           n/a           0       n/a
    Engine 0                   n/a           n/a           0       n/a


  I/Os Delayed by
    Disk I/O Structures        n/a           n/a           0       n/a
    Server Config Limit        n/a           n/a           0       n/a
    Engine Config Limit        n/a           n/a           0       n/a
    Operating System Limit     n/a           n/a           0       n/a


  Total Requested Disk I/Os    0.0           0.0           0

  Completed Disk I/O's
    Total Completed I/Os       0.0           0.0           0       n/a
  -------------------------  ------------  ------------  ----------
  Total Completed I/Os         0.0           0.0           0


  Device Activity Detail
  ----------------------

    No Disk I/O in Given Sample Period

Disk I/O Structures

"Disk I/O Structures" indique le nombre d’E/S retardées en raison d’un dépassement des limites définies pour les E/S disque. Lorsque ASE dépasse le nombre de blocs de contrôle d’E/S disque disponibles, les E/S sont retardées car les tâches doivent obligatoirement être associées à un bloc de contrôle d’E/S disque avant le lancement d’une demande d’E/S. Si le résultat est une valeur non nulle, augmenter le nombre de blocs de contrôle d’E/S disque disponibles en augmentant la valeur du paramètre de configuration 'disk i/o structures'.

Requested and Completed Disk I/Os

Les sections ci-après décrivent le nombre d’E/S disque requises ainsi que le nombre et le pourcentage d’E/S traitées par chaque engine ASE. Les valeurs dans les colonnes "Total Requested Disk I/Os" et "Total Completed I/Os" doivent être identiques ou quasiment. Ces valeurs sont différentes lorsque des E/S requises ne sont pas traitées en raison d’une saturation. La valeur relative aux E/S requises comprend toutes les requêtes lancées pendant l’intervalle échantillon, dont certaines prennent fin après l’intervalle. Ces E/S ne sont pas comptabilisées dans la section "Total Completed I/Os", d’où un pourcentage inférieur à 100 lorsqu’il n’y a pas de problèmes de saturation. L’inverse est également vrai. Si des demandes d’E/S interviennent avant le début de l’intervalle échantillon et si elles sont exécutées pendant l’intervalle, la valeur dans la colonne "% of Total" correspondant à la ligne "Total Completed I/Os" sera supérieure à 100 %. Si les données indiquent un grand nombre d’E/S requises et un petit nombre d’E/S exécutées, il se peut que le retard soit imputable à un goulet d’étranglement dans le système d’exploitation.

Device Activity Detail

Cette section affiche les informations suivantes sur les E/S relatives à chaque device de données sur le serveur :

  • les noms des devices physiques et logiques
  • le nombre de lectures et d’écritures, ainsi que la totalité des E/S
  • le nombre de sémaphores immédiatement disponibles sur le device et le nombre de fois qu’un processus doit attendre qu’un sémaphore se libère

Total I/Os

La section "Total I/Os" indique le total des lectures et des écritures sur un device. "% of total" indique le pourcentage de lectures et d’écritures sur chaque device nommé, par rapport au nombre de lectures et d’écritures sur la totalité des devices. Ces informations permettent de vérifier la répartition des E/S entre les disques et de prendre des décisions relatives à l’emplacement des objets pour améliorer la répartition des E/S entre les devices. Par exemple, les données peuvent indiquer que certains disques sont plus sollicités que d’autres. Si une part importante des E/S est traitée sur un device nommé déterminé, analyser les tables figurant sur le device pour trouver la solution au problème.

Device Semaphore Granted and Waited

Les sections "Device Semaphore Granted" et "Device Semaphore Waited" indiquent le nombre de fois qu’une demande de sémaphore aboutit immédiatement et le nombre de fois que le sémaphore est occupé, auquel cas la tâche doit attendre qu’il se libère. "% of total" indique, en pourcentage, le nombre de fois que le sémaphore était libre (ou occupé), par rapport au nombre total de sémaphores sollicités. Ces données ne sont utiles que dans un environnement SMP. Lorsqu’Adaptive Server doit effectuer une E/S disque, il affecte à la tâche le sémaphore du device correspondant pour obtenir une structure d’E/S en bloc. Sur des systèmes SMP, plusieurs engines peuvent tenter de transmettre simultanément des E/S aux mêmes.

Network I/O Management

Network I/O Management
----------------------

  Total Network I/O Requests     25.3         101.0         101       n/a
    Network I/Os Delayed          0.0           0.0           0       0.0 %


  Total TDS Packets Received  per sec      per xact       count  % of total
-------------------------  ------------  ------------  ----------  --------
Engine 0                         25.3         101.0         101     100.0 %
-------------------------  ------------  ------------  ----------
  Total TDS Packets Rec'd        25.3         101.0         101

  Total Bytes Received        per sec      per xact       count  % of total
-------------------------  ------------  ------------  ----------  --------
Engine 0                        934.0        3736.0        3736     100.0 %
  -------------------------  ------------  ------------  ----------
  Total Bytes Rec'd             934.0        3736.0        3736

   Avg Bytes Rec'd per Packet    n/a           n/a          36       n/a

---------------------------------------------------------------------------

  Total TDS Packets Sent      per sec      per xact       count  % of total
-------------------------  ------------  ------------  ----------  --------
Engine 0                        125.3         501.0         501     100.0 %
  -------------------------  ------------  ------------  ----------
  Total TDS Packets Sent        125.3         501.0         501

  Total Bytes Sent            per sec      per xact       count  % of total
-------------------------  ------------  ------------  ----------  --------
Engine 0                      56600.5      226402.0      226402     100.0 %
  -------------------------  ------------  ------------  ----------
  Total Bytes Sent            56600.5      226402.0      226402

  Avg Bytes Sent per Packet      n/a           n/a         451       n/a

Total Network I/Os Requests

"Total Network I/O Requests" indique le nombre total de paquets reçus et transmis.

Lorsque le nombre de paquets par seconde que le réseau peut prendre en charge est connu, il est alors possible d’évaluer la capacité d’Adaptive Server par rapport au débit du réseau. Le traitement est le même, qu’il s’agisse d’une E/S entrante ou sortante. Si Adaptive Server reçoit une commande dépassant la taille du paquet, il doit attendre de recevoir la commande complète avant de commencer le traitement. Par conséquent, les commandes qui requièrent plus d’un paquet sont plus longues à traiter et consomment davantage de ressources. Si la moyenne d’octets par paquet avoisine la taille du paquet par défaut définie pour le serveur, configurer des tailles supérieures pour certaines connexions. Il est possible de définir la taille du paquet réseau pour toutes les connexions ou bien permettre à certaines d’utiliser des tailles de paquet supérieures.

Network I/Os Delayed

"Network I/Os Delayed" indique le nombre de fois qu’une E/S est mise en attente. Si ce nombre n’est jamais nul, consulter l’administrateur système.