Performances SQL en V5R20

BoTTom |    Changer de couleur
 
 QAQQINI, essayer d'influencer l'optimiseur de requêtes.
 -------------------------------------------------------
 
  vous pouvez apporter des options à votre environnement DB2/400, pouvant
   éventuellement influencer l'optimiseur de requêtes (Query Governor)
 
  il s'agit d'un fichier "INI" ou fichier paramètre, composé de deux zones:
 
  QQPARM VARCHAR(256)    : entrée, paramètre à modifier
  QQVAL  VARCHAR(256)    : valeur à attribuer
 
  vous avez aussi QQTEXT VARCHAR(1000) pour commentaire
 
  le plus simple est de dupliquer celui fourni dans QSYS vers QUSRSYS
 
 le système cherche un fichier portant ce nom dans la biblothèque indiqué
  par la commande :
                    CHGQRYA   QRYOPTLIB( )
 
  la valeur par défaut est QUSRSYS, et s'il n'existe pas un tel fichier
   vous verrez un message d'information dans l'historique.


|    Changer de couleur
V5R20,
 
 Attention, certaines options du fichier QAQQINI ne sont plus supportées,
   les seules options supportées sont les suivantes :
   ------------------------------------------------
  APPLY_REMOTE                           PARALLEL_DEGREE
  ASYNC_JOB_USAGE                        PARAMETER_MARKER_CONVERSION
  COMMITMENT_CONTROL_LOCK_LIMIT          QUERY_TIME_LIMIT
  FORCE_JOIN_ORDER                       REOPTIMIZE_ACCESS_PLAN
  IGNORE_LIKE_REDUNDANT_SHIFTS           SQLSTANDARDS_MIXED_CONSTANT
  MESSAGES_DEBUG                         SQL_TRANSLATE_ASCII_TO_JOB
  OPEN_CURSOR_CLOSE_COUNT                STAR_JOIN,QL_WARNINGS
  OPEN_CURSOR_THRESHOLD                  SUPPRESS_SQL_WARNINGS
  OPTIMIZATION_GOAL                      UDF_TIME_OUT,N_DIAGRAM
  OPTIMIZE_STATISTIC_LIMITATION          VISUAL_EXPLAIN_DIAGRAM
 
 Si vous avez créé un fichier QAQQINI dans une de vos bibliothèques et
  qu'il contient des options non supportées (elles étaient non documentées
  et destinées au support IBM uniquement), vous recevrez le message
  CPI433A ou CPF433B. Cela n'empèche pas la requête de s'exécuter.
 
 Il est conseillé de recréer le fichier à partir de celui de QSYS.


|    Changer de couleur
 
D'autre part, le moteur SQL (query engine) a été revu, mais cohabite avec
 l'ancien.
 
 le nouvel optimiseur de requête se nomme SQE (SQL query Engine)
 l'ancien CQE (Core query Engine)
 
 De nombreuses fonctions SQL ont été descendues en dessous du microcode,
  DONT SQE, qui est écrit en programmation Objet (C++) au niveau SLIC.
 
ATTENTION, seul SQL peut utiliser SQE :
 
  - SQL interactif ,dans les programmes ou des scripts (RUNSQLSTM), QM.
  - CLI, NetDATA et autre produits utilisant CLI
  - JDBC/ ODBC
 
 n'en profitent pas :
 
  - les E/S natives
  - OPNQRYF
  - QUERY/400
 


|    Changer de couleur
 Ceci dit, pour des problèmes de transition et de temps, toutes les
  requêtes ne profiterons pas immédiatement de SQE.
 
 il donc été mis en place un dispatcher qui va diriger (router) chaque
  requête soit vers SQE, soit vers CQE.
 
 Plus SQE saura traiter de cas différents, (au fur et à mesure des versions
  et des PTF, voyez l'APAR II13486) plus le dispatcher dirigera vers SQE.
 
 En début de V5R20 (début 2003), le dispatcher route la requête vers CQE si:
 
 - le resultat de la requête est modifiable (FOR UPDATE OF...)
 - la requête reférence :
   -> plus d'une table (jointure ou UNION)
   -> une table avec des BLOB ou des CLOB
   -> un fichier logique ou une vue SQL
   -> des tables distribuées (DB2 Multisystem)
 
 - la requête contient :
   -> un autre ordre SELECT( sous sélection, table dérivée, ...)
   -> une clause OR, LIKE , IN
   -> des comparaisons de colonnes ayant un CCSID différent


|    Changer de couleur
 
 - vous utilisez DB2 SMP,dispo facturable pour utilisation multi-processeurs
 
   Toutes les autres requêtes doivent être dirigées vers SQE.
   (suite à STRDBMON, QQC16 d'une ligne QQRID à 3014, l'indique)
 
 Au 14 Mai 2003, avec le dernier GROUPE de PTF database, (SF99502)
  ainsi que les PTF :
 
   - SI07650  et -SI08876
 
 SQE traite les requêtes avec :
 
   JOIN ainsi que les jointures en règle générale.
   les prédicats IN et OR
 
   Ainsi que les INSERT avec un SELECT imbriqué
 
 (voyez l'APAR II13486 et le site
 http://www-1.ibm.com/servers/eserver/iseries/db2/sqe.html )
 
 l'utilisation de DB2 SMP devrait être aussi intégrée rapidement.


|    Changer de couleur
 
 toutefois, il peut arriver que SQE soit invoqué à tort, auquel cas il
  redirige lui-même le requête vers CQE (légère perte de temps),
  particulièrement lors de l'utilisation d'index particuliers:
 
    - avec des sélections/omissions
    - pointant sur plusieurs membres
    - avec des clé dérivées (zones résulat de traitement: CONCAT, TRANSLATE)
    - utilisant le paramètre SRTSEQ et/ou le mot-clé ALTSEQ
 
 
 Data Access Primitives 
 
 SQE, contrairement à CQE ne fait pas de statistiques, de sondages sur les
  différentes valeurs et leur nombre, ces fonctions sont réalisées par l'OS.
 
 SQE ne créé pas d'index temporaires, mais il réalise mieux les balayages
  de table et les traitement de la clause DISTINCT.
 
 Il ne créé plus de tables temporaires pour les requêtes complexes, mais
  un objet interne (niveau microcode), plus léger.
 


|    Changer de couleur
 
 Nouveautés .
 
 Plan Cache 
 
   les plans d'accès SQE sont désormais conservés (dans un cache)
 
     - jusqu'à IPL ou jusqu'à une certaine taille (non indiquée)
         les plus anciens et les moins utilisés sont alors détruit.
 
     les SQL Package existent toujours (ainsi que le cache niveau JOB),
      ils stockent toujours les paramètres systèmes et les requêtes, mais
      ils utilisent les plans d'accès du cache système.
 
     - on mémorise jusqu'à 5 plans par requêtes
        (avec ou sans index, avec ALWCPYDTA(*ALWAYS ou *OPTIMZE), etc..)
 
     - on peut espérer, lors d'une requête,(sauf suite à IPL) rencontrer
        un plan d'accès déja validé et ainsi gagner du temps.
 
     - il n'existe pas de possibilité de visualisation de ce cache.
 


|    Changer de couleur
 
 Statistic Manager 
 
  nouvelle fonction (au niveau SLIC) chargée de collecter des informations
   liées aux performances.
 
  Avant, le seul moyen de prendre de bonnes décisions, était pour
  l'optimiseur d'utiliser les index (estimations), maintenant
  la collecte de statistiques permet au statistic manager de founir des
  informations plus pertinentes.
 
  c'est lui qui indique l'index à utiliser (et non plus l'optimiseur)
 
  Si aucune statistique n'existe pour une table, l'information est mémorisée
   et les statistiques sont collectées lors des temps morts.
 
 
  Vous pouvez aussi demander explicitement la collecte de certaines
    statistiques via iseries navigator ou API :
 
    (les noms longs correspondent au *SRVPGM QDBSTMGR)
 


|    Changer de couleur
 Cancel Requested Statistics Collections
  (QDBSTCRS, QdbstCancelRequestedStatistics)
 Delete Statistics Collections
  (QDBSTDS, QdbstDeleteStatistics)
 List Statistics Collection Details
  (QDBSTLDS, QdbstListStatisticsCollection)
 List Statistics Collections
  (QDBSTLS, QdbstListStatistics)
 Request Statistics Collections
  (QDBSTRS, QdbstRequestStatistics)
 Update Statistics Collection
  (QDBSTUS, QdbstUpdateStatistics)
 
 Les statistiques contiennent les informations suivantes :
 
   - Cardinalité :  nombre de valeur différentes
   - Fréquence   :  liste des valeurs les plus fréquentes + nbr de lignes
   - Histogramme :  divise les différentes valeurs en tranches égales
                     et indique pour chaque tranche 1er, dernier et nombre.
 
 Elle sont collectées pour une colonne à la fois, et éventuellement à partir
  d'un index existant


|    Changer de couleur
 
 La collecte de statistiques est effectuée par le JOB QDBFSTCCOL
   .................................................................
   : QALERT        QSYS        SYS    0,0                  DEQW    :
   : QCMNARB01     QSYS        SYS    0,0                  EVTW    :
   : QCMNARB02     QSYS        SYS    0,0                  EVTW    :
   : QCMNARB03     QSYS        SYS    0,0                  EVTW    :
   : QDBFSTCCOL    QSYS        SYS    0,0                  EVTW    :
   : QDBSRVXR      QSYS        SYS    0,0                  DEQW    :
   :...............................................................:
  Ce job est multi-thread, faire DSPJOB et option 20 pour les voir.
   .......................................................................
   :     Unité                       Total                    Priorité   :
   :   exécution       Etat            UC            E-S     exécution   :
   :   00000001        EVTW          0,132           458          50     :
   :   00000007        DEQW          0,000             1          99     :
   :   00000006        DEQW          0,000             0          99     :
   :   00000005        DEQW          0,016            65          96     :
   :   00000004        DEQW          0,013           104          96     :
   :   00000003        DEQW          0,000             0          93     :
   :   00000002        DEQW          0,000             1          90     :
   :.....................................................................:


|    Changer de couleur
 
 les requêtes utilisateur courtes sont traitées à une priorité de 90
 les requêtes utilisateur longues sont traitées à une priorité de 93
 
 les requêtes système courtes sont traitées à une priorité de 96
 les requêtes système longues sont traitées à une priorité de 99
 
 la valeur système QDBFSTCCOL permet de gérer les collectes
 
  -  *ALL   : autorise la collecte de toute statistique (val. par défaut)
 
  -  *NONE  : interdit toute collecte automatique (les collectes immédiates
               demandées par l'utilisateur sont toujours effectuées)
 
  -  *USER  : autorise les collectes utilisateur en tâche de fond.
 
  -  *SYSTEM:  autorise les collectes système en tâche de fond.
 
 les collectes étant réalisées par défaut en tâche de fond, cela devrait
   avoir peu d'impact sur les temps de réponse, mais peut en avoir sur
   l'utilisation globale de la CPU (moins de périodes d'inactivité).
 





©AF400