La version 6 avait apporté à l'ordre SELECT l'option SKIP LOCKED DATA cela permettait lors d'une lecture avec verrouillage d'enregistrement, c.a.d COMMIT à CS(*CS) ou RS(*ALL), d'ignorer les lignes verrouillées Cette option a été étendue aux instructions UPDATE et DELETE EN V7, vous avez, en plus, le choix entre trois comportements : WAIT FOR OUTCOME Attendre que les lignes soient libérées (COMMIT par exemple) cela n'a pas d'effet sur les niveaux de COMMIT inférieurs à CS USE CURRENTLY COMMITTED Utiliser les valeurs déjà validées cela ne peut s'appliquer qu'aux COMMIT niveau CS (sans KEEP LOCKS) SKIP LOCKED DATA les lignes verrouillées sont ignorées. Comme cette clause est maintenant valide avec UPDATE/DELETE, elle peut être utilisée avec tous les niveaux de COMMIT, sauf RR (repeatable read) |
Vous pouvez en plus préciser cette option : 1/ en fin des ordres, SELECT, UPDATE, DELETE, PREPARE 2/ sur le nouveau paramètre CONACC des commandes de compilation (CRTSQLRPGI par ex.) et RUNSQLSTM (pas STRSQL) 3/ sur l'ordre CREATE PROCEDURE|CREATE FUNCTION (ou ALTER) 4/ avec SET OPTION CONACC=*CURCMT | *WAIT | *DFT dans la procédure SQL 5/ dans QAQQINI avec l'option SQL_CONCURRENT_ACCESS_RESOLUTION la procédure CANCEL_SQL de QSYS2 permet d'annuler une requête CALL QSYS2.CANCEL_SQL('123456/QUSER/QZDASOINIT'); |
Performances ------------ Global Cache Statistic (GCS) le système stocke des statistiques par colonne de fichier depuis la V5.2 et elles peuvent être visualisées par System i Navigator. il garde maintenant en mémoire des statistiques globales sur les dernières requêtes effectuées, particulièrement le nombre de lignes pour jointure. ces statistiques ne peuvent, pour l'instant, pas être visualisées. Elles sont utilisées particulièrement par Adaptive Query Processing (AQP) nouvelle technologie permettant au moteur (SQE uniquement) de changer de plan d'accès dynamiquement. |
si aucune ligne n'est retournée sous 2 secondes, alors AQP compare le nombre actuel de lignes(GCS) avec le nombre estimé et peux refaire le plan et relancer la requête avec le nouveau plan. en fonction des statistiques d'utilisation des fichiers (globales ->GCS) et deux nouvelles zones RANDOM_READS et SEQUENTIAL_READS dans les fichiers statistiques SYSPARTITIONSTAT et SYSINDEXSTAT de QSYS2, les fichiers les plus fréquement utilisés seront placés automatiquement sur disque SSD (si vous en possédez) ce paramètre peut être forcé lors de la création : les ordres CREATE TABLE, CREATE INDEX, DECLARE TEMPORARY TABLE possèdent une nouvel attribut UNIT UNIT SSD, demandant à placer, de préférence, cet objet sur un disque SSD UNIT ANY (le standard) n'indique pas de préférence |
pour connaitre la préférence -> SELECT MEDIA_PREFERENCE FROM TABLE(QSYS2.PARTITION_STATISTICS('BIBLIO', 'TABLE') ) AS temp retourne 0 (pas de préférence) ou 255 (préférence pour SSD) pour connaitre la localisation actuelle -> SELECT UNIT_TYPE FROM TABLE(QSYS2.PARTITION_DISKS('BIBLIO' , 'TABLE) AS temp retourne 0 (disque "normal") ou 1 (disque SSD) Un fichier pouvait déjà être chargé "manuellement" en mémoire par la commande SETOBJACC. vous pouvez maintenant le déclarer comme devant l'être automatiquement à l'aide du paramètre KEEPINMEM(*YES) des commandes CHGPF / CHGLF le pool mémoire dans lequel garder ce fichier est précisé par l'option de QAQQINI : MEMORY_POOL_PREFERENCE = N° ou nom (*SHRPOOLx) depuis TR10/TR2 - Les index avec sélection d'enregistrement(avec une clause WHERE) sont maintenant pleinement utilisés par SQE |
- possibilité d'inclure des fonctions agrégées (SUM,AVG,COUNT,VAR,STDDEV) dans un index EVI. CREATE ENCODED VECTOR INDEX EVI01 ON COMMANDES (DATCMD, FAM) INCLUDE (SUM(QTE) , COUNT(*) ) Avec le groupe PTF SF99701 level 18, les requêtes utilisant GROUPING SET, ROLLUP ou CUBE, bénéficient aussi de ce type d'index. Nouvelles options de QAQQINI ---------------------------- MEMORY_POOL_PREFERENCE (voir ci dessus) ALLOW_ADAPTIVE_QUERY_PROCESSING Autorise ou non l'activation de AQP SQL_CONCURRENT_ACCESS_RESOLUTION (voir plus haut dans ce cour) |
pour une liste complète des options de QAQQINI, voyez http://publib.boulder.ibm.com/infocenter/iseries/v7r1m0/topic/rzajq/qryopt.htm rappel: vous pouvez modifier une option en appellant la procédure cataloguée OVERRIDE_QAQQINI, depuis la V6R1. -- créé un fichier QAQQINI dans QTEMP Call override_qaqqini('1' , ' ', ' ') -- modifie la valeur pour le job Call override_qaqqini('2' , 'SQL_PSEUDO_CLOSE' , '05') -- détruit le fichier de QTEMP, retour à la normale Call override_qaqqini('3' , ' ', ' ') |
Avec le niveau 34 de SF99701 ou le niveau 5 de SF99702 Un même index peut être utilisé pour réalisé la sélection ET le tri cette technique est nommée IMO (index Merge Ordering) la requête doit être prévue *FIRSTIO ALWCPYDTA ne doit pas être à *NO le curseur ne doit pas être flottant (SCROLL CURSOR) le nombre de ligne résultat doit être élevé la table doit être de grande taille (plus de 500 Millions de lignes) l'index doit exister (pas de création temporaire, pas MTI) L'index doit contenir 1/ les critères de sélection autre que par égalité (<> par ex.) 2/ puis les critères de sélection par égalité (=) 3/ enfin les critères de tri. Une liste triée sera faite en mémoire à partir de l'index. |