Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026

DB2 for z/OS SQL / Explain Analyzer V2 – Analyseur SQL, access path, packages et RUNSTATS

Objectif du guide

Installer, tester et exploiter db2_zos_sql_explain_analyzer_v2.py, un utilitaire autonome qui analyse des exports DB2 for z/OS : PLAN_TABLE-like, SQL, predicates, index catalog, table statistics, packages et baseline.

TĂ©lĂ©charger l’utilitaire DB2 for z/OS SQL / Explain Analyzer V2

Le bouton principal pointe explicitement vers /static/toolbox/db2_zos_sql_explain_analyzer_v2.py. DĂ©pose ce script dans static/toolbox/ pour l’exposer depuis IDEO-Lab.

Cet outil est conçu pour les DBA DB2, les ingĂ©nieurs performance, les Ă©quipes batch et les projets de modernisation. Il transforme plusieurs fichiers d’export en diagnostic actionnable : tablespace scans, index faibles, predicates stage 2, RUNSTATS obsolĂštes, packages risquĂ©s, regressions access path et candidats d’index.

Explain
Analyse PLAN_TABLE-like : access type, MATCHCOLS, method, sort, prefetch, getpages, cost, rows.
Catalog
Croisement avec predicates, indexes, table statistics, clustering ratio, RUNSTATS et packages.
Regression
Comparaison baseline/current pour repĂ©rer les changements d’access path, coĂ»t, rows et getpages.

Ce que le moteur analyse

DomaineSignaux analysésDiagnostic produit
Access pathACCESSTYPE, MATCHCOLS, METHOD, SORTN, PREFETCH, RID.Tablespace scan, index usage faible, sort coûteux, RID pool pressure, prefetch suspect.
SQL statementsSELECT *, fonctions sur colonnes, LIKE '%...', OR, DML sans WHERE.SQL non sargable, accĂšs trop large, risque de scan ou risque production.
PredicatesStage 1/2, indexable, columns, operators, filter factor.Stage 2 coûteux, predicate non indexable, colonne candidate à index.
IndexesColonnes, cardinalité, clustering ratio, nlevels, duplication, unique/non unique.Index faible, index non aligné predicates, clustering à corriger.
RUNSTATSDate stats, cardinalitĂ©, NPAGES, rows, stats obsolĂštes.Risque access path instable ou mauvais choix d’optimiseur.
PackagesIsolation, degree, validate, reopt, release, bind date, collection.Options de bind risquées : RR/RS, DEGREE(ANY), VALIDATE(RUN), rebind nécessaire.
Positionnement : la V2 n’est pas un client DB2 live. Elle travaille sur exports CSV/SQL/JSONL afin de rester portable, testable hors mainframe et intĂ©grable dans un portail d’audit ou un pipeline d’analyse de performance.

Téléchargement des fichiers

Cette page fournit les liens explicites vers le script Python, les samples DB2, la policy et le pack complet. Pour IDEO-Lab, les fichiers doivent ĂȘtre dĂ©posĂ©s sous /static/toolbox/.

Utilitaire principal

Script Python autonome, sans dépendance externe, à lancer sur des exports DB2 Explain / catalog / SQL.

Explain current

Export PLAN_TABLE-like courant contenant access path, cost, getpages et méthode.

Download current

Explain baseline

Export de rĂ©fĂ©rence pour dĂ©tecter les regressions d’access path ou de coĂ»t.

Download baseline

SQL statements

Fichier SQL brut pour détecter SELECT *, DML risqué, fonctions, LIKE et OR predicates.

Download SQL

Predicates

Export DSN_PREDICAT_TABLE-like pour stage 2 et indexability.

Download predicates

Indexes / stats / packages

Exports de catalog, RUNSTATS et bind options pour diagnostic DBA.

Indexes

Stats

Packages

Pack ZIP

Script, samples, policy, outputs et rapport de démonstration.

Download ZIP

Arborescence static recommandée

static files
static/
  toolbox/
    db2_zos_sql_explain_analyzer_v2.py
    db2_zos_sql_explain_analyzer_v2_pack.zip
    sample_db2_v2_explain_current.csv
    sample_db2_v2_explain_baseline.csv
    sample_db2_v2_sql.sql
    sample_db2_v2_predicates.csv
    sample_db2_v2_indexes.csv
    sample_db2_v2_table_stats.csv
    sample_db2_v2_packages.csv
    sample_db2_v2_policy.json
    db2_zos_sql_explain_analyzer_v2_guide.html
ContrÎle visuel : le bouton Download db2_zos_sql_explain_analyzer_v2.py est présent en haut de la page, dans Téléchargement, Installation et Fichiers input.

Installation de DB2 for z/OS SQL / Explain Analyzer V2

Le script est autonome. Il suffit d’une version Python moderne et d’un ou plusieurs fichiers d’export DB2 : Explain, SQL, predicates, indexes, stats, packages et baseline.

1. Arborescence locale recommandée

Project tree
db2_explain_lab/
  bin/
    db2_zos_sql_explain_analyzer_v2.py
  input/
    sample_db2_v2_explain_current.csv
    sample_db2_v2_explain_baseline.csv
    sample_db2_v2_sql.sql
    sample_db2_v2_predicates.csv
    sample_db2_v2_indexes.csv
    sample_db2_v2_table_stats.csv
    sample_db2_v2_packages.csv
    sample_db2_v2_policy.json
  output/
    reports/
    csv/
    json/
Lien direct du script Ă  installer

Ce bouton pointe explicitement vers /static/toolbox/db2_zos_sql_explain_analyzer_v2.py.

2. Installation Linux / macOS

Linux / macOS setup
mkdir -p db2_explain_lab/bin db2_explain_lab/input db2_explain_lab/output/reports db2_explain_lab/output/csv db2_explain_lab/output/json
cp db2_zos_sql_explain_analyzer_v2.py db2_explain_lab/bin/
cp sample_db2_v2_* db2_explain_lab/input/
cd db2_explain_lab
python3 bin/db2_zos_sql_explain_analyzer_v2.py --demo

3. Installation Windows PowerShell

Windows PowerShell setup
New-Item -ItemType Directory -Force db2_explain_lab\bin, db2_explain_lab\input, db2_explain_lab\output\reports, db2_explain_lab\output\csv, db2_explain_lab\output\json
Copy-Item .\db2_zos_sql_explain_analyzer_v2.py .\db2_explain_lab\bin\
Copy-Item .\sample_db2_v2_* .\db2_explain_lab\input\
Set-Location .\db2_explain_lab
python .\bin\db2_zos_sql_explain_analyzer_v2.py --demo

4. Test de validation

Validation command
python bin/db2_zos_sql_explain_analyzer_v2.py input/sample_db2_v2_explain_current.csv \
  --sql input/sample_db2_v2_sql.sql \
  --baseline input/sample_db2_v2_explain_baseline.csv \
  --predicates input/sample_db2_v2_predicates.csv \
  --indexes input/sample_db2_v2_indexes.csv \
  --table-stats input/sample_db2_v2_table_stats.csv \
  --packages input/sample_db2_v2_packages.csv \
  --policy input/sample_db2_v2_policy.json \
  --profile production \
  --html output/reports/sample_db2_v2_report.html \
  --json output/json/sample_db2_v2_analysis.json \
  --csv-findings output/csv/sample_db2_v2_findings.csv
RĂ©sultat attendu : le sample doit produire un statut BLOCKED, un score de risque Ă©levĂ©, des findings DB2, des candidats d’index, et un rapport HTML consultable.

Fichiers input attendus

La V2 accepte plusieurs sources complĂ©mentaires. L’analyse devient vraiment puissante quand on croise Explain, SQL, predicates, catalog indexes, RUNSTATS et packages.

Utilitaire nécessaire pour analyser les inputs

TĂ©lĂ©charger d’abord le script Python, puis lancer l’analyse sur les exports DB2.

1. Sources acceptées

SourceContenu typiqueUsage
Explain currentPLAN_TABLE-like CSV/JSON/JSONL, access type, cost, rows, getpages.Base principale du diagnostic access path.
Explain baselineAncien plan ou plan attendu.Détection des regressions avant/aprÚs rebind ou livraison.
SQL fileStatements SQL bruts.Détection syntaxique : SELECT *, DML sans WHERE, fonctions, LIKE, OR.
Predicates exportStage, indexability, predicate text, columns, filter factor.RepĂ©rer stage 2 et candidats d’index.
Index catalogIndex name, columns, clustering, cardinality, nlevels.Comprendre pourquoi l’optimiseur choisit ou Ă©vite un index.
Table statsRows, pages, RUNSTATS date, cardinalité.Détecter RUNSTATS obsolÚtes ou stats insuffisantes.
PackagesCollection, package, isolation, degree, validate, reopt, bind date.Détecter bind options risquées ou packages à rebind.

2. Exemple minimal d’Explain CSV

sample_db2_v2_explain_current.csv
queryno,stmtno,applname,collid,progname,query_cost,access_type,matchcols,method,sortn,prefetch,getpages,table_schema,table_name,index_name
1001,1,PAYROLL,COLLPAY,PAYRPT01,12500.0,R,0,0,Y,S,920000,PRODDB,PAYMENT,
1002,1,CUSTAPI,COLLAPI,CUSTAPI,820.0,I,1,0,N,L,21000,PRODDB,CUSTOMER,IX_CUSTOMER_01

3. Samples disponibles

Explain current

Plan courant utilisé pour le scoring principal.

Download

Baseline

Plan de référence pour comparer les changements de coût et access path.

Download

Predicates

Export stage/indexability pour diagnostic avancé.

Download

Indexes

Catalogue index et clustering pour recommandations.

Download

Table stats

RUNSTATS, rows et pages pour évaluer la fraßcheur des stats.

Download

Packages

Bind options pour détecter RR/RS, DEGREE, VALIDATE et REOPT.

Download

RÚgle de sécurité : les exports Explain/catalog peuvent révéler schémas, tables, packages, collections, index et conventions applicatives. Utiliser --redact avant partage externe.

Utilisation quotidienne

1. Mode démo intégré

Demo mode
python db2_zos_sql_explain_analyzer_v2.py --demo

2. Analyse simple d’un fichier Explain

Simple analysis
python db2_zos_sql_explain_analyzer_v2.py input/sample_db2_v2_explain_current.csv

3. Analyse complĂšte avec tous les exports

Full export analysis
python db2_zos_sql_explain_analyzer_v2.py input/sample_db2_v2_explain_current.csv \
  --sql input/sample_db2_v2_sql.sql \
  --baseline input/sample_db2_v2_explain_baseline.csv \
  --predicates input/sample_db2_v2_predicates.csv \
  --indexes input/sample_db2_v2_indexes.csv \
  --table-stats input/sample_db2_v2_table_stats.csv \
  --packages input/sample_db2_v2_packages.csv \
  --policy input/sample_db2_v2_policy.json \
  --profile production \
  --json output/json/db2_analysis.json \
  --html output/reports/db2_report.html \
  --csv-findings output/csv/db2_findings.csv \
  --csv-plan output/csv/db2_plan_rows.csv \
  --csv-statements output/csv/db2_statements.csv \
  --csv-predicates output/csv/db2_predicates.csv \
  --csv-index-candidates output/csv/db2_index_candidates.csv \
  --csv-compare output/csv/db2_compare.csv \
  --csv-categories output/csv/db2_categories.csv \
  --csv-indexes output/csv/db2_indexes.csv \
  --csv-stats output/csv/db2_stats.csv \
  --csv-packages output/csv/db2_packages.csv

4. Mode anonymisé

Redacted report
python db2_zos_sql_explain_analyzer_v2.py input/production_explain.csv \
  --sql input/production_sql.sql \
  --redact \
  --html output/reports/production_db2_redacted.html \
  --json output/json/production_db2_redacted.json

5. Mode batch strict

Batch strict mode
python db2_zos_sql_explain_analyzer_v2.py input/nightly_explain.csv \
  --profile performance \
  --html output/reports/nightly_db2_report.html \
  --csv-findings output/csv/nightly_db2_findings.csv \
  --fail-on ERROR
Lecture recommandée : commencer par le HTML pour le diagnostic humain, puis utiliser les CSV pour Excel, SQL, BI, historique, comparaison de releases et discussion avec DBA / performance engineer.

ParamĂštres de ligne de commande

1. ParamĂštres d’entrĂ©e et de sortie

ParamĂštreDescriptionExemple
input_fileFichier Explain principal.input/explain.csv
--explainAlias explicite du fichier Explain courant.--explain input/explain.csv
--sqlFichier de statements SQL bruts.--sql input/sql.sql
--predicatesExport predicates stage/indexability.--predicates input/predicates.csv
--indexesExport catalogue index.--indexes input/indexes.csv
--table-statsExport table statistics / RUNSTATS.--table-stats input/table_stats.csv
--packagesExport package / bind options.--packages input/packages.csv
--baselineFichier Explain de référence.--baseline input/baseline.csv
--policyPolicy JSON pour seuils et objets sensibles.--policy input/policy.json
--jsonExport JSON complet.--json output/analysis.json
--htmlRapport HTML.--html output/report.html
--csv-findingsAnomalies détectées.--csv-findings output/findings.csv
--csv-index-candidatesCandidats d’index.--csv-index-candidates output/index_candidates.csv
--csv-compareComparaison baseline/current.--csv-compare output/compare.csv

2. Paramùtres d’analyse et de gouvernance

ParamÚtreEffetUsage recommandé
--profileProfil : production, performance, db2, batch, api, packages, capacity, training, strict.Ajuster la lecture métier et la priorité des catégories.
--write-samplesGénÚre les fichiers samples dans un dossier cible.Créer un environnement de test complet.
--demoLance le moteur contre des samples générés.Validation rapide aprÚs installation.
--redactMasque les noms sensibles dans les sorties.Partage externe ou support.
--fail-onRetourne un code erreur Ă  partir d’une sĂ©vĂ©ritĂ© donnĂ©e.--fail-on ERROR en contrĂŽle batch, --fail-on CRITICAL en audit moins strict.

3. Exemple profil packages

Packages profile
python db2_zos_sql_explain_analyzer_v2.py input/package_explain.csv \
  --packages input/packages.csv \
  --profile packages \
  --html output/reports/packages_report.html \
  --csv-findings output/csv/packages_findings.csv

Exemples d’utilisation

ScĂ©nario 1 – Audit d’un plan avant mise en production

Cas DevOps/DBA : contrîler un nouveau plan d’accùs avant livraison applicative.

Release gate analysis
python db2_zos_sql_explain_analyzer_v2.py input/release_explain.csv \
  --sql input/release_sql.sql \
  --profile production \
  --html output/reports/release_db2_report.html \
  --csv-findings output/csv/release_db2_findings.csv \
  --fail-on ERROR

ScĂ©nario 2 – RĂ©gression access path aprĂšs rebind

Cas critique : comparer un Explain avant/aprÚs rebind ou livraison pour détecter une dégradation.

Baseline regression
python db2_zos_sql_explain_analyzer_v2.py input/current_explain.csv \
  --baseline input/baseline_explain.csv \
  --profile performance \
  --html output/reports/access_path_regression.html \
  --csv-compare output/csv/access_path_compare.csv

ScĂ©nario 3 – Analyse RUNSTATS et catalog index

Cas DBA : vĂ©rifier si un mauvais access path vient de stats obsolĂštes ou d’index inadaptĂ©s.

RUNSTATS and indexes
python db2_zos_sql_explain_analyzer_v2.py input/explain.csv \
  --indexes input/indexes.csv \
  --table-stats input/table_stats.csv \
  --predicates input/predicates.csv \
  --profile db2 \
  --html output/reports/db2_catalog_diagnostic.html \
  --csv-index-candidates output/csv/db2_index_candidates.csv

ScĂ©nario 4 – Analyse des packages et options de bind

Cas production : repĂ©rer les options d’isolation, degree, validate ou reopt qui exposent Ă  des comportements coĂ»teux.

Package audit
python db2_zos_sql_explain_analyzer_v2.py input/explain.csv \
  --packages input/packages.csv \
  --profile packages \
  --html output/reports/package_audit.html \
  --csv-packages output/csv/packages_out.csv

ScĂ©nario 5 – ContrĂŽle nocturne automatisĂ©

Cron entry
0 5 * * * /opt/db2-explain/bin/python /opt/db2-explain/db2_zos_sql_explain_analyzer_v2.py \
  /data/db2/nightly_explain.csv \
  --sql /data/db2/nightly_sql.sql \
  --baseline /data/db2/baseline_explain.csv \
  --indexes /data/db2/indexes.csv \
  --table-stats /data/db2/table_stats.csv \
  --packages /data/db2/packages.csv \
  --profile production \
  --html /var/www/reports/db2/nightly_explain_report.html \
  --csv-findings /var/log/db2/nightly_findings.csv \
  --json /var/log/db2/nightly_analysis.json \
  --fail-on ERROR >> /var/log/db2/db2_explain_analyzer.log 2>&1

RĂšgles DB2, scoring et diagnostic

La V2 applique une logique de scoring par catĂ©gories. Le but n’est pas de remplacer un DBA DB2, mais de trier vite les risques et de faire Ă©merger les points Ă  vĂ©rifier en prioritĂ©.

1. Catégories de risques

CatégorieSignaux typiquesLecture DBA
Access pathTablespace scan, index scan faible, MATCHCOLS=0, nested loop coĂ»teux.Le plan choisi risque de consommer trop d’I/O ou de CPU.
PredicatesStage 2, non-indexable, functions on indexed columns, leading wildcard.Les predicates ne filtrent pas assez tît ou ne peuvent pas utiliser l’index.
Sort / workfileSort obligatoire, sort gros volume, manque d’index order compatible.Risque de workfile pressure et temps elapsed Ă©levĂ©.
RUNSTATSStats absentes, obsolĂštes, cardinalitĂ© incohĂ©rente.L’optimiseur peut prendre une mauvaise dĂ©cision.
PackagesRR/RS, DEGREE(ANY), VALIDATE(RUN), bind ancien.Risque de lock, parallélisme non désiré, ou erreur runtime.
RegressionCost, rows, getpages, elapsed ou access path dégradés vs baseline.Plan potentiellement dangereux avant production.

2. Exemple de candidats d’index

Index candidates
table_schema,table_name,columns,reason,confidence
PRODDB,PAYMENT,CUSTOMER_ID,PAY_DATE,Stage 2 predicate and high getpages,HIGH
PRODDB,CUSTOMER,STATUS,LAST_UPDATE,Frequent predicate and low matchcols,MEDIUM

3. Bon rĂ©flexe d’analyse

  • Ne jamais conclure sur COST seul : croiser avec GETPAGES, rows, predicates et access type.
  • VĂ©rifier d’abord les tablespace scans sur tables volumineuses.
  • Sur index existant mais MATCHCOLS=0, vĂ©rifier l’ordre des colonnes et les predicates rĂ©ellement indexables.
  • Quand un plan change, comparer baseline/current avant de valider le rebind.
  • Une recommandation d’index doit toujours ĂȘtre validĂ©e avec volumĂ©trie, frĂ©quence SQL, coĂ»t DML et politique DBA.
Attention : un candidat d’index n’est pas un ordre de crĂ©ation. C’est une hypothĂšse Ă  vĂ©rifier avec EXPLAIN, cardinalitĂ©, frĂ©quence d’exĂ©cution, coĂ»t update/delete/insert et normes DBA.

Exports et exploitation des résultats

Rapport HTML

Vue lisible : score, catégories, findings, access path, candidates, baseline compare et recommandations.

Analyse JSON

Format complet pour API, ingestion SQL, archivage ou comparaison automatique.

Findings CSV

Une ligne par anomalie DB2, avec sévérité, catégorie et explication.

Plan rows CSV

Plan rows normalisés pour tri Excel, SQL ou dashboard.

Index candidates CSV

Hypothùses d’index avec raisons et niveau de confiance.

Compare CSV

Diff baseline/current pour détecter régressions de plan.

Exemple de synthĂšse console

Console output
DB2 for z/OS SQL / Explain Analyzer V2
Status             : BLOCKED
Highest severity   : CRITICAL
Risk score         : 100/100
Explain rows       : 12
SQL statements     : 7
Predicates         : 12
Indexes            : 9
Table stats        : 10
Packages           : 5
Findings           : 174
Index candidates   : 5
Baseline compare   : 23

Idée de table SQL pour historisation

SQL model idea
CREATE TABLE db2_explain_analyzer_run (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    source_name VARCHAR(255),
    profile VARCHAR(32),
    status VARCHAR(32),
    highest_severity VARCHAR(16),
    risk_score INTEGER,
    explain_row_count INTEGER,
    statement_count INTEGER,
    finding_count INTEGER,
    index_candidate_count INTEGER,
    baseline_regression_count INTEGER,
    report_path VARCHAR(500),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Vision produit : la V2 peut devenir un véritable module de Release Gate DB2 : analyse SQL, Explain, packages, RUNSTATS, régression access path, scoring et recommandation DBA avant mise en production.

Dépannage et bonnes pratiques

1. Le script ne détecte aucun plan

Cause possibleCorrection
Le CSV n’a pas d’en-tĂȘtes reconnus.VĂ©rifier les noms de colonnes ou normaliser l’export en PLAN_TABLE-like.
Le fichier Explain est vide ou filtré trop fortement.Exporter tous les rows utiles pour le queryno/stmtno analysé.
Les types numériques sont exportés avec un format incompatible.Utiliser point décimal et colonnes non formatées.
Le fichier SQL ne correspond pas aux queryno Explain.Vérifier le mapping SQL / Explain / package / statement.

2. Trop de findings remontées

En environnement rĂ©el, beaucoup de signaux peuvent ĂȘtre lĂ©gitimes. Commencer avec un profil training ou performance, puis activer strict seulement pour les gates critiques.

Less strict command
python db2_zos_sql_explain_analyzer_v2.py input/explain.csv \
  --profile training \
  --html output/reports/db2_training_report.html \
  --fail-on CRITICAL

3. Check-list avant partage externe

  • Utiliser --redact pour masquer schĂ©mas, tables, packages et index sensibles.
  • VĂ©rifier manuellement les statements SQL contenant des donnĂ©es mĂ©tier ou commentaires internes.
  • Conserver une copie brute interne pour valider les mappings queryno/stmtno.
  • Ne pas crĂ©er un index uniquement parce que l’outil le suggĂšre : tester avec EXPLAIN et analyser l’impact DML.
  • Comparer baseline/current avant tout rebind en production.
Point critique : les exports DB2 peuvent rĂ©vĂ©ler la structure mĂ©tier du SI. Ils doivent ĂȘtre traitĂ©s comme des documents sensibles, surtout avec SQL, catalog indexes et packages.