đŸ DB2 for z/OS â Le Guide Ultime
Deep Dive : Architecture (MSTR, DBM1, IRLM), Storage (VSAM, UTS), Concurrence (Locks) & Sysplex (Data Sharing).
1. Architecture z/OS
Les "Address Spaces" : MSTR, DBM1, DIST, IRLM. Pools (EDM, Bufferpools).
2. Storage & Fichiers
VSAM LDS (les "fichiers"). Catalog/Directory, Tablespaces (UTS).
3. Logging & Recovery
RBA/LRSN (le "temps" DB2). Checkpoints, Archive Logs, Restart.
4. đ Concurrence & Locks
Critique (OLTP). L-LOCK / P-LOCK, Modes (IS, IX, S, X), Deadlock.
5. Bufferpools & Tuning
BP0, BP8K... Le cache (RAM). PGSTEAL, Deferred Write.
6. Access Paths & Optimizer
Dynamic vs Static SQL. Packages & Plans. RUNSTATS.
7. Sysplex (Data Sharing)
Le "Cluster" (multi-nĆud). Coupling Facility (CF), GBP, Failover.
8. Monitoring (Troubleshooting)
SMF (100/101), IFCID (3, 199, 400), Wait Event Analysis.
9. Exploitation (Utilitaires)
REORG, RUNSTATS, CHECK, COPY, QUIESCE, LOAD/UNLOAD.
10. Cas d'Usage Réels
SystĂšme core bancaire (compte courant), facturation, transactions cartes.
Core Banking OLTP11. Diagrammes
Flux mémoire, logs, I/O, Sysplex.
Diagrams Architecture12. Cheat-Sheets
Commandes CLIST/TSO (-DIS), templates JCL (DSNTEP2), SQL (patterns).
DB2 (comme tout sous z/OS) ne tourne pas comme un seul "processus". Il s'exécute en tant que plusieurs **Address Spaces (AS)** (espaces d'adressage mémoire) qui collaborent.
Diagramme (Simplifié)
(Client: CICS, Batch/JCL, TSO)
|
| (Connexion)
âŒ
+-----------------+
| DIST (as) | (Distributed Data Facility)
| (Réseau / TCP/IP) |
+-----------------+
|
âŒ
+-----------------+
| MSTR (as) | (Master / System Services)
| (Coordinateur) |
+-----------------+
|
+----------------------------------+
| |
⌠âŒ
+-----------------+ +-----------------+
| DBM1 (as) | (Database Manager) | IRLM (as) | (Lock Manager)
| (Le "Cerveau" SQL)| | (Gestionnaire de |
| (EDM Pool) | | Verrous) |
| (Bufferpools) | +-----------------+
+-----------------+
| Address Space | RĂŽle (Ce qu'il fait) |
|---|---|
| MSTR (Master) | Le "CĆur". DĂ©marre/ArrĂȘte DB2. GĂšre les logs, l'archivage, les commandes opĂ©rateur. |
| DBM1 (Database Mgr) | Le "Cerveau". GÚre la mémoire (Bufferpools, EDM Pool), exécute le SQL, gÚre les accÚs aux données (I/O). |
| DIST (Distributed) | Le "Porte". GÚre les connexions réseau (TCP/IP) (ex: un client Java ou une API externe). |
| IRLM (Lock Manager) | Le "Gendarme". (Intersystem Resource Lock Manager). GĂšre **tous** les verrous (Locks) (voir 4.4). |
| WLM (Workload Mgr) | (Composant z/OS) Le "Prioritiseur". GĂšre la prioritĂ© CPU des requĂȘtes (CICS = haute, Batch Nuit = basse). |
DB2 ne stocke pas ses données dans un "gros fichier .db". Il utilise une structure complexe de fichiers (datasets) gérés par z/OS.
1. Fichiers Physiques (VSAM LDS)
Au plus bas niveau, les données sont stockées dans des VSAM Linear Data Sets (LDS). C'est le "fichier plat" (dataset) sur le disque (DASD). L'OS (z/OS) voit un LDS, mais DB2 (DBM1) voit un Tablespace.
2. Hiérarchie (Catalog & Directory)
DB2 utilise un "meta-stockage" pour se gĂ©rer lui-mĂȘme :
- Catalog (
DSNDB06) : La "meta-base". Contient les définitions (SYSTABLES,SYSCOLUMNS...). C'est ici que leCREATE TABLEest stocké. - Directory (
DSNDB01) : Le "cache interne" (DBD, Plans...). (Invisible pour l'utilisateur).
3. Le Tablespace (UTS) (Le "Conteneur" de Table)
On ne stocke pas une TABLE. On stocke un TABLESPACE, qui contient une (ou plusieurs) TABLE(s).
UTS (Universal Table Space) est le standard moderne (recommandé). Il ne contient qu'une seule table.
- PBG (Partition-By-Growth) : (Le plus simple). Un UTS qui grossit "par morceaux" (partitions) automatiquement (ex: ajoute un nouveau fichier VSAM de 4Go quand il est plein).
- PBR (Partition-By-Range) : (Le plus performant/complexe). L'Admin partitionne la table (ex: par
ANNEE,CODE_CLIENT). Permet le "Partition Pruning" (l'Optimizer ne lit que la partition2024) et l'exploitation (REORGd'une seule partition).
Le "Logging" (Journalisation) est la fonction la plus critique de DB2 (garantit ACID).
Diagramme (Flux de Log)
(UPDATE/INSERT/DELETE)
|
âŒ
+-----------------+
| Log Buffer (RAM)| (Rapide)
+-----------------+
| (Full / Checkpoint / Commit)
âŒ
+-----------------+
| Active Log (Disque)| (Circulaire)
+-----------------+
| ("Offload" quand plein)
âŒ
+-----------------+
| Archive Log (Bande/Disque)
| (Historique/Backup)
+-----------------+
- RBA/LRSN (L'Horloge) : DB2 n'utilise pas de "timestamp". Il utilise un RBA (Relative Byte Address) (ou LRSN en Sysplex). C'est le "compteur kilométrique" (offset) du log. (Ex: "Le Checkpoint est à RBA=5000", "Ce
COMMITest Ă RBA=5120"). - Checkpoint (Point de contrĂŽle) : Moment oĂč DB2 "force" l'Ă©criture des pages modifiĂ©es (sales) (des Bufferpools) sur disque (VSAM). Permet un redĂ©marrage (Restart) rapide.
- Group Commit : (Performance OLTP) DB2 attend (quelques ms) pour "grouper" plusieurs
COMMIT(ex: 50COMMITS) en une seule I/O physique sur l'Active Log. - Restart (Recovery) :
- Restart Light : (AprĂšs un crash) DB2 lit l'Active Log depuis le dernier Checkpoint ->
ROLLBACK(UNDO) lesCOMMITS non validés,ROLLFORWARD(REDO) lesCOMMITS validés mais non écrits. - Cold Start / Recovery : (AprÚs une perte disque) Restaure le
COPY(Backup), puis applique lesArchive Logs.
- Restart Light : (AprĂšs un crash) DB2 lit l'Active Log depuis le dernier Checkpoint ->
Le **Locking** (Verrouillage) est le cĆur de la performance **OLTP (Transactionnel)**. C'est gĂ©rĂ© par l'IRLM (1.1).
DB2 utilise un verrouillage "multi-granularité" (Tablespace, Table, Page, Ligne).
Types de Verrous (Locks)
| Mode | Nom | Description |
|---|---|---|
IS (Intent Share) | Intention Partagée | "Je veux lire (S) une (ou plusieurs) LIGNE(s) dans cette PAGE." |
IX (Intent Exclusive) | Intention Exclusive | "Je veux modifier (X) une (ou plusieurs) LIGNE(s) dans cette PAGE." |
S (Share) | Partagé | "Je lis (SELECT) la PAGE (ou Ligne). D'autres peuvent lire (S), personne ne peut écrire (X)." |
SIX (Share + Intent Excl) | Combo | "Je lis (S) TOUTE la table, ET je veux modifier (IX) certaines lignes." (Ex: UPDATE TBL SET A=A+1). |
X (Exclusive) | Exclusif | "Je modifie (UPDATE/DELETE) la PAGE (ou Ligne). Personne ne peut lire (S) ni écrire (X)." |
Deadlock (Ătreinte fatale)
Un "Deadlock" se produit quand :
1. Transaction A prend un Lock (X) sur la Ligne 1.
2. Transaction B prend un Lock (X) sur la Ligne 2.
3. Transaction A demande un Lock (X) sur la Ligne 2 (Bloquée par B).
4. Transaction B demande un Lock (X) sur la Ligne 1 (Bloquée par A).
L'IRLM détecte ce cycle (via son "Deadlock Detector") et choisit une "victime" (généralement celle qui a fait le moins de COMMITS) et lui envoie un SQLCODE -911 (Rollback). C'est au programme (COBOL/CICS) de gérer ce -911 (ex: retenter l'opération).
Le Bufferpool (Pool de Tampons) est le "Cache" (RAM) principal de DB2 (dans l'Address Space DBM1). C'est là que DB2 stocke les pages de données (lues depuis le disque VSAM) pour éviter les I/O (l'opération la plus lente).
On définit plusieurs pools, (BP0, BP1... BP3K, BP8K...) de tailles différentes (4K, 8K, 16K) pour les différents Tablespaces (Index vs Données).
Diagramme (I/O & Bufferpool)
(SQL: SELECT * FROM ... WHERE ID=1)
|
âŒ
+-------------------------+
| DBM1 (Cerveau) |
| (1. "Ai-je la page X ?")|
+-------------------------+
|
âŒ
+-------------------------+
| Bufferpool (RAM) |
| (2. OUI: Hit !) | (2. NON: Miss...)
+-------------------------+
| (Hit: Rapide) | (Miss: Lent)
⌠âŒ
(Retour) (I/O -> VSAM (Disque))
Concepts de Tuning
Page Fix: (PGFIX=YES) "Verrouille" le Bufferpool en mĂ©moire rĂ©elle (pas de "paging" z/OS). (Critique pour la performance OLTP).PGSTEAL(Steal Algorithm) : L'algorithme (LRU - Least Recently Used) qui dĂ©cide quelle "vieille" page (non utilisĂ©e) doit ĂȘtre "volĂ©e" (steal) (retirĂ©e du cache) pour faire de la place.Deferred Write(Ăcriture DiffĂ©rĂ©e) : DB2 n'Ă©crit **pas** unUPDATEsur disque auCOMMIT(c'est le Log qui garantit l'ACID). Il Ă©crit "plus tard" (diffĂ©rĂ©), quand le Bufferpool est plein ou au Checkpoint.
L'"Optimizer" (Optimiseur) DB2 est le composant qui choisit le "Access Path" (Chemin d'accĂšs) (ex: "Utiliser l'Index A" ou "Faire un full TableScan ?").
RUNSTATS : L'utilitaire (JCL, voir 9.1) **critique** qui collecte les statistiques (CARDINALITY, HIGH2KEY...) sur les tables/index. Sans RUNSTATS, l'Optimizer est "aveugle" et choisit des chemins d'accÚs désastreux.
| Type | Description | Avantage | Inconvénient |
|---|---|---|---|
| Static SQL (Statique) | Le SQL est "embarqué" (EXEC SQL) dans le programme (COBOL) et **compilé** (PREPARE, BIND) à l'avance. | Performance (OLTP). Le chemin d'accÚs (Access Path) est déjà calculé et stocké (Package/Plan). | Rigide. (Si les données changent (RUNSTATS), il faut REBIND le Package). |
| Dynamic SQL (Dynamique) | Le SQL est un string envoyĂ© "Ă la volĂ©e" (ex: via un client Java/JDBC). | FlexibilitĂ©. (Analytique, Outils BI). | Plus lent (Overhead). DB2 doit "parser" et "optimiser" la requĂȘte Ă *chaque* exĂ©cution. |
ProblĂšme : J'ai 1 Mainframe (LPAR) qui exĂ©cute DB2. S'il tombe (panne matĂ©rielle), la banque s'arrĂȘte.
Solution : Sysplex (Data Sharing). C'est l'architecture "Cluster" (Actif-Actif) de DB2.
Plusieurs instances DB2 (sur des LPARs/machines diffĂ©rentes) accĂšdent aux **mĂȘmes** fichiers VSAM (disques partagĂ©s), mais chaque instance a ses propres Bufferpools (cache RAM).
Diagramme (Sysplex Data Sharing)
(Clients -> DDF -> Routeur)
| |
⌠âŒ
+-----------------+ +-----------------+
| LPAR 1 (OS 1) | | LPAR 2 (OS 2) |
| +-------------+ | (Communique)| +-------------+ |
| | DB2 (MSTR1) | |<-- (CF) -->| | DB2 (MSTR2) | |
| | (BP 1) | | | | (BP 2) | |
| +-------------+ | +-------------+ |
+-----------------+ +-----------------+
| (I/O) | (I/O)
+------------+---------------+
|
âŒ
+----------------+
| Disques (VSAM) | (Partagés)
+----------------+
Coupling Facility (CF) (Le "Coordinateur")
Le CF (matériel ou logiciel) est le "cerveau" partagé qui gÚre le "Data Sharing" :
- Lock Structure : GĂšre les verrous (Locks) (
P-LOCKS) *entre* les LPARs. - Group Buffer Pools (GBP) : GĂšre la "cohĂ©rence du cache" (s'assure que le BP 1 et le BP 2 ont la mĂȘme version d'une page).
Comment "dépanner" DB2 ? On utilise des outils (ex: DataDog, Omegamon) qui lisent les "traces" (IFCIDs) générées par DB2 (envoyées via SMF).
| Outil | Description |
|---|---|
| SMF (System Management Facilities) | Le "logger" (collecteur) de z/OS. DB2 écrit ses "Accounting" (compta) et "Statistics" (stats) dans les SMF 100 (Stats) et 101 (Accounting). |
| IFCID (Instrumentation Facility ID) | Les "événements de trace" (l'équivalent des "Spans" APM). Un "IFCID" est un type d'événement (ex: IFCID 003 = "Début/Fin de SQL"). |
IFCIDs Critiques (pour l'analyse de "Wait Events")
Pour savoir "Pourquoi ma requĂȘte est lente ?", on analyse les "Wait Events" (temps d'attente) de la requĂȘte :
IFCID 199(Bufferpool) : Temps d'attente I/O (Synchrone) (ex:sync_read_io_time). (ProblĂšme de Bufferpool (5.1)).IFCID 400/401(Locks) : Temps d'attente sur un Verrou (Lock). (ProblĂšme de Concurrence (4.4)).IFCID 003(SQL) : Temps CPU total vs Temps d'attente total.
La maintenance de DB2 se fait via des "Utilitaires" (Utilities), qui sont des programmes (ex: DSNUTILB) lancés via JCL (voir 4.1).
Utilitaire (EXEC PGM=...) | RĂŽle (Quoi/Pourquoi) | Niveau (SHRLEVEL) |
|---|---|---|
REORG | Réorganise un Tablespace (dés-fragmente, récupÚre l'espace vide aprÚs DELETES). | SHRLEVEL CHANGE (Permet R/W) |
RUNSTATS | (Critique) Met à jour le Catalogue (SYSTABLES) avec les statistiques (Cardinalité...). | SHRLEVEL CHANGE (Permet R/W) |
COPY | Prend un Backup (Image Copy) du Tablespace (pour Recovery (3.1)). | SHRLEVEL CHANGE (Permet R/W) |
CHECK DATA | Vérifie l'intégrité référentielle (Clés étrangÚres). | SHRLEVEL REFERENCE (Permet R) |
QUIESCE | Met en "pause" (read-only) un Tablespace (pour garantir un point de consistance). | (Bloque les écritures) |
LOAD / UNLOAD | Import (Load) / Export (Unload) de données en masse (ex: depuis/vers un fichier séquentiel). | SHRLEVEL NONE (Bloque tout) |
DB2 for z/OS (et le Mainframe) excelle dans les environnements **OLTP (Online Transaction Processing)** Ă trĂšs haute volumĂ©trie et trĂšs haute fiabilitĂ© (oĂč 0% de perte de donnĂ©es est la norme).
| Secteur | Cas d'usage | Pourquoi DB2/zOS ? |
|---|---|---|
| Banque (Core Banking) | SystÚme de compte courant (UPDATE SOLDE ... WHERE ID=...). | Volume (Milliards de transactions), Fiabilité (ACID), Sécurité. |
| Finance (Cartes) | Autorisation de transaction par carte (SELECT ... WHERE CARD_ID=...). | Latence (doit répondre en < 50ms), Uptime (99.999%). |
| Assurance | Gestion des polices, facturation (batch de nuit). | Capacité de traitement Batch (JCL) (ex: "Calculer 10M de primes"). |
Diagrammes conceptuels (voir les modales précédentes pour le contexte) :
Architecture (Address Spaces)
(Voir Modale 1.1) Montre MSTR, DBM1, DIST, IRLM.
Bufferpool (I/O)
(Voir Modale 5.1) Montre le flux SQL -> Bufferpool -> (Miss) -> VSAM.
Logging & Recovery
(Voir Modale 3.1) Montre Log Buffer (RAM) -> Active Log -> Archive Log.
Sysplex (Data Sharing)
(Voir Modale 7.1) Montre LPAR1/DB2 <-> CF <-> LPAR2/DB2 (partageant le disque VSAM).
Commandes TSO/CLIST (Admin)
(Exécutées depuis l'écran TSO/ISPF pour interagir avec DB2).
* (Préfixe du sous-systÚme DB2, ex: DSN1) -DSN1 DISPLAY DATABASE(DB_NAME) SPACE(TS_NAME) LOCKS -DSN1 DISPLAY THREAD(*) TYPE(ACTIVE) -DSN1 DISPLAY BUFFERPOOL(BP0) DETAIL -DSN1 DISPLAY GROUP (Sysplex) -DSN1 STOP DATABASE(DB_NAME) SPACENAM(TS_NAME) -DSN1 START DATABASE(DB_NAME) SPACENAM(TS_NAME)
JCL (Utilitaires Batch)
(Template JCL pour REORG).
//REORGJOB JOB ...
//STEP1 EXEC PGM=DSNUTILB,PARM='DSN1,MONREORG'
//SYSIN DD *
REORG TABLESPACE DB_NAME.TS_NAME
SHRLEVEL CHANGE
LOG NO
//SYSPRINT DD SYSOUT=*
JCL (SQL Batch - DSNTEP2)
(DSNTEP2 est le programme "client SQL" de JCL).
//SQLJOB JOB ... //STEP1 EXEC PGM=IKJEFT01 //SYSTSPRT DD SYSOUT=* //SYSTSIN DD * DSN SYSTEM(DSN1) RUN PROGRAM(DSNTEP2) END //SYSIN DD * SELECT * FROM MA_TABLE WHERE ID < 100; DELETE FROM LOGS WHERE TIMESTAMP < (CURRENT DATE - 30 DAYS); /*
