Article
· 5 hr il y a 3m de lecture

Comment identifier les variables globales temporaires qui consomment de l'espace dans la base de données IRISTEMP

Rubrique FAQ InterSystems

Les variables globales temporaires stockées dans les bases de données IRISTEMP/CACHETEMP sont utilisées lorsqu'un processus n'a pas besoin de stocker des données indéfiniment, mais requiert les performances élevées des variables globales. Les bases de données IRISTEMP/CACHETEMP ne sont pas journalisées ; leur utilisation ne crée donc pas de fichiers journaux.

Le système utilise les bases de données IRISTEMP/CACHETEMP pour le stockage temporaire et les utilisateurs peuvent y accéder à cette fin.

Pour plus d'informations sur les variables globales temporaires et la base de données IRISTEMP, consultez le document suivant :

Globals temporaires et la base de données IRISTEMP

Les globales utilisées comme temporaires sont :

1. Variables globales temporaires du système (^IRIS.Temp*, ^%cspSession, ^CacheTemp*, ^mtemp*, etc.)
2. Variables globales temporaires mappées à IRISTEMP/CACHETEMP par l'utilisateur

3. Process private globals  (^||name, ^|"^"|name, ^["^"]name, ^["^",""]name, etc. )
4. Table de GLOBALE TEMPORAIRE

 -> La définition de la table est persistante (disponible pour tous les processus) et les données de la table sont stockées dans les données globales privées du processus (ne durent que pendant la durée du processus).

Les tailles 1 et 2 peuvent être vérifiées à l'aide de l'utilitaire ^%GSIZE:

USER>do ^%GSIZE

Directory name: c:\intersystems\iris\mgr\user\ => c:\intersystems\iris\mgr\iristemp\
                                               // Specify the iristemp database folder
All Globals? No => yes       // Yes to show all globals: 34 items selected
34 available globals
Show details?? No => No   //  No to not show detailed information 
Device:
Right margin: 80 =>

3,4 Les globales privées des processus peuvent être visualisées à l'aide de l'utilitaire ^GETPPGINFO

Pour plus d'informations sur l'utilitaire ^GETPPGINFO, consultez le document suivant :
About the ^GETPPGINFO utility [IRIS]
About the ^GETPPGINFO utility

L'exemple suivant répertorie les variables globales privées de tous les processus actuels 

 set ^||flintstones(1)="Fred"
 set ^||flintstones(2)="Wilma"
 znspace "%SYS"
 do ^GETPPGINFO("*")

Une autre méthode consiste à afficher le contenu de processus individuels utilisant des blocs globaux privés en grande quantité.

L'exemple suivant affiche le nombre de blocs globaux privés par processus supérieur ou égal à 20.

 set ns=$namespace
 znspace "%SYS"
 
 // Only processes with more PPG blocks than the total number of processes are included
 set st=##class(%SQL.Statement).%New()
 set status=st.%PrepareClassQuery("%SYS.ProcessQuery","AllFields")
 set rs=st.%Execute()
 while rs.%Next() {
    set pid=rs.%Get("Pid") // Process ID
    set cnt=rs.%Get("PrivateGlobalBlockCount") // Number of PPG blocks
    
    // When the number of PPG blocks per process is 0 or more, the contents are output (the following example shows 20 or more blocks).
    if cnt > 20 {
       set rs2=##class(%ResultSet).%New("%SYS.ProcessQuery:PPG")
       // "N" Do not return subscripts of a PPG, just return the root name
       // "B" Return the number of blocks used by the PPG (needs the "N" option)
       do rs2.Execute("*",pid,"NB")
       for {
          quit:'rs2.Next()
          write cnt_" PID:"_pid_", PPG name "_rs2.GetData(1)_" is using "_rs2.GetData(3)_" disc blocks",!
       }
    }
 }
 
 znspace ns
Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer