IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

escartefigue

DB2 for Z/OS : analyser le besoin de réorganisation

Noter ce billet
par , 29/11/2023 à 11h03 (530 Affichages)
Voici une requête qui permet de vérifier le cluster ratio des index cluster sur DB2 for Z/OS, et donc, le besoin éventuel d'exécuter des réorgs.

Les noms d'objets sont restitués sur 8 caractères, car c'est la longueur maximale la plus souvent utilisée dans le monde Z/OS pour des raisons historiques, à adapter si besoin.

Si le cluster ratio est fortement dégradé, il faut peut-être augmenter la fréquence des réorgs ou augmenter la valeur du paramètre PCTFREE pour les tables à insertion fréquente et volumineuse.
Peut-être également qu'un événement inhabituel a fortement chargé les TS concernés, auquel cas une surveillance particulière aurait due être mise en place.

Sur Z/OS, l'essentiel des requêtes est livré dans des packages, il faut donc penser à exécuter les statistiques si elles n'ont pas été activées lors des réorgs, puis à faire un REBIND des packages pour qu'ils reconsidèrent leur chemin d'accès.

Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
-- Cette requete analyse la désorganisation des tablespaces en vérifiant le     
-- cluster ratio des index cluster et restitue le nombre de MàJ depuis la       
-- dernière réorg                                                               
-- Le ratio est bon si >= 95%                                                   
-- Paramêtres à modifier en fonction du besoin :                                
--    TB.CREATOR et TB.NAME dans le WHERE                                       
   set current schema = 'SYSIBM'                                                
   ;                                                                            
-- analyse du cluster ratio des index cluster (besoin de réorg ?)               
   select substr(TB.CREATOR, 01, 08)   as SCHEMA                                
        , substr(TB.NAME, 01, 08)      as TABLE                                 
        , substr(IX.NAME, 01, 10)      as INDEX                                 
        , IX.UNIQUERULE                as UNIQ                                  
        , IX.CLUSTERING                as CLSG                                  
        , IX.CLUSTERED                 as CLSD                                  
        , IX.CLUSTERRATIO              as RATIO                                 
        , TB.CARDF                     as CARDF                                 
        , TB.NPAGESF                   as NPAGESF                               
        , subq.RGDAT                   as REOGDATE                              
        , subq.RGISR                   as REORGISR                              
        , subq.RGDEL                   as REORGDEL                              
        , subq.RGUPD                   as REORGUPD                              
   from       SYSTABLES      as TB  -- table des tables                         
   inner join SYSTABLESPACE  as TS  -- table des tablespaces                    
     on  TS.DBID = TB.DBID                                                      
     and TS.NAME = TB.TSNAME                                                    
   inner join SYSINDEXES     as IX  -- table des index                          
     on  IX.TBCREATOR = TB.CREATOR                                              
     and IX.TBNAME    = TB.NAME                                                 
   left  join -- nombre d'insert/delete/update depuis la dernière réorg         
        (select DBID                                                            
              , PSID                                                            
              , date(REORGLASTTIME) as RGDAT                                    
             -- les 3 cols sont "nullables" d'où COALESCE + CAST                
              , sum(cast(coalesce(REORGINSERTS, 0) as bigint)) as RGISR         
              , sum(cast(coalesce(REORGDELETES, 0) as bigint)) as RGDEL         
              , sum(cast(coalesce(REORGUPDATES, 0) as bigint)) as RGUPD         
         from SYSTABLESPACESTATS    -- table des RTS (Real Time Statistics)     
         group by DBID                                                          
                , PSID                                                          
                , DATE(REORGLASTTIME)                                           
        ) subq                                                                  
     on  subq.DBID = TB.DBID                                                    
     and subq.PSID = TS.PSID                                                    
   where IX.CLUSTERING = 'Y'            -- index cluster                        
     and IX.CLUSTERED  = 'N'            -- mal organisé                         
     and TB.TYPE       = 'T'            -- type table                           
     and (TB.CARDF = -1 or TB.CARDF >0) -- sauf tables vides                    
   -- modifier les schemas et préfixes de tables ci-dessous                     
     and TB.CREATOR in ('SCH1', 'SCH2')                                         
     and TB.NAME like 'TR%'                                                    
   order by TB.NAME                                                             
          , TB.CREATOR

Et une autre approche donnant le détail par partition (merci à Bernard59139)

Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
  set CURRENT PRECISION = 'D31.2'                                               
  ;                                                                             
  select substr(RTS.DBNAME, 01, 08)                   as "DataBase"             
       , substr(RTS.NAME, 01, 08)                     as "Table Space"          
       , TP.PARTITION                                 as "Part"                 
       , TS.TYPE                                      as "Type"                 
       , cast (RTS.REORGINSERTS/dec(RTS.TOTALROWS)*100 as dec(5,2))             
                                                      as "RTSIsr%"              
       , cast (RTS.REORGDELETES/dec(RTS.TOTALROWS)*100 as dec(5,2))             
                                                      as "RTSDel%"              
       , cast (RTS.REORGUNCLUSTINS/dec(RTS.TOTALROWS)*100                       
                                        as dec(5,2))  as "UnClus%"              
       , cast ( (RTS.REORGNEARINDREF+RTS.REORGFARINDREF)                        
               / dec(RTS.TOTALROWS)*100 as dec(5,2))  as "Malplace"             
       , cast (replace(varchar_format                                           
                (RTS.REORGMASSDELETE,'999,999,999,999'), ',', ' ')              
                as char(16))                          as "MassDel"              
       , cast (replace(varchar_format                                           
                (RTS.TOTALROWS,'999,999,999,999'), ',', ' ')                    
                as char(16))                          as "TotalRows"            
       , cast (replace(varchar_format                                           
                (RTS.NPAGES,'999,999,999,999'), ',', ' ')                      
                as char(16))                          as "Pages"               
       , RTS.REORGLASTTIME                            as "Last Réorg"          
  from        SYSIBM.SYSTABLESPACESTATS as RTS                                 
  inner join  SYSIBM.SYSTABLESPACE      as TS                                  
     on TS.DBNAME = RTS.DBNAME                                                 
    and TS.NAME   = RTS.NAME                                                   
  inner join  SYSIBM.SYSTABLEPART       as TP                                  
     on TP.DBNAME    = TS.DBNAME                                               
    and TP.TSNAME    = TS.NAME                                                 
    and TP.PARTITION = RTS.PARTITION                                           
  where RTS.TOTALROWS > 50                                                     
    and TS.DBNAME='Ma_database'                                                   
  order by 1, 2, 3                                                             
  ;

Envoyer le billet « DB2 for Z/OS : analyser le besoin de réorganisation » dans le blog Viadeo Envoyer le billet « DB2 for Z/OS : analyser le besoin de réorganisation » dans le blog Twitter Envoyer le billet « DB2 for Z/OS : analyser le besoin de réorganisation » dans le blog Google Envoyer le billet « DB2 for Z/OS : analyser le besoin de réorganisation » dans le blog Facebook Envoyer le billet « DB2 for Z/OS : analyser le besoin de réorganisation » dans le blog Digg Envoyer le billet « DB2 for Z/OS : analyser le besoin de réorganisation » dans le blog Delicious Envoyer le billet « DB2 for Z/OS : analyser le besoin de réorganisation » dans le blog MySpace Envoyer le billet « DB2 for Z/OS : analyser le besoin de réorganisation » dans le blog Yahoo

Mis à jour 13/12/2023 à 09h36 par escartefigue

Tags: cluster, db2, reorg, sql
Catégories
Sans catégorie

Commentaires