Lorsqu'un rapport est généré, il est trié par une procédure de tri interne. La procédure de tri est optimisée pour les rapports d'une taille de 180 à 200K, pourtant de nombreux facteurs déterminent la taille des données qui peuvent être prises en charge par le tri interne.
Le fichier FOCSORT utilisé pour le tri interne peut être de n'importe quelle taille autorisée par le système d'exploitation et l'espace disque disponible. L'utilisateur ne doit pas décomposer une requête pour que celle-ci puisse contenir des fichiers de taille importante. Dans les versions précédentes, le fichier FOCSORT était limité à 2 giga-octets et l'utilisateur recevait un message FOC298 au moment du dépassement de la limite WebFOCUS. Comme WebFOCUS n'applique pas de limite, le système d'exploitation fournit tout traitement d'avertissement ou d'erreur qui est disponible pour la gestion d'un fichier FOCSORT qui dépasse les limites.
Vous pouvez générer de plus grands rapports quelque peu plus rapidement, en utilisant des produits de tri spécialisés, tels que SyncSort, DFSORT ou, dans les environnements non-mainframe, les sous-programmes de tri externe WebFOCUS.
Pour utiliser un tri externe, le paramètre EXTSORT doit être actif. L'utilisation d'une feuille de style désactive le tri externe.
Notez que dans les environnements Mainframe, le tri externe fonctionne avec les langues nationales française, espagnole, allemande et scandinaves (suédoise, dannoise, finnoise et norvégienne). Pour préciser l'environnement de support de langues nationales, utilisez le paramètre LANG comme le décrit dans Développement d'applications de reporting .
Les produits de tri externe DFSORT et SyncSort peuvent être utilisés avec toute requête TABLE, FML, GRAPH ou MATCH dans tous les environnements mainframe de WebFOCUS. Pour tous les autres environnements d'exploitation, WebFOCUS utilise ses propres sous-programmes de tri externe.
Il vaut mieux ne pas utiliser de tri externe dans les situations suivantes :
Pour savoir si le rapport peut être transformé en TABLEF, utilisez ? STAT (tel que décrit dans Interroger le type de tri) ou exécutez une version abrégée de la requête avec une petite limite d'enregistrement et un tri externe. Si les statistiques de rapport sont imprimées après la sortie TABLE, elles sont effectuées comme TABLEF ; si les statistiques sont imprimées avant le premier écran de la sortie TABLE, alors elles sont traitées avec TABLE parcequ'elles ne sont pas convertibles en TABLEF.
Pour déterminer quel tri est utilisé, les critères suivants sont évalués, dans l'ordre suivant :
Vous pouvez activer et désactiver la fonctionnalité de tri externe en utilisant la commande SET EXTSORT.
SET EXTSORT = {ON|OFF}
où :
permet l'utilisation sélective d'un produit de tri externe spécialisé pour trier les rapports. Il s'agit de la valeur par défaut dans tous les environnements mainframe.
utilise une procédure de tri interne pour trier tous les rapports Il s'agit de la valeur par défaut dans tous les environnements mainframe.
Pour déterminer quel tri est utilisé pour un rapport quelconque, lancez la commande suivante après la requête de rapport :
? STAT
La commande affiche les valeurs suivantes pour le paramètre SORT USED :
Indique que la procédure de tri interne a été utilisée pour trier le rapport complet.
Vous utilisez une source de données relationnelle et le SGBDR a déjà fournit les données dans le bon ordre.
Un produit de tri externe a trié le rapport.
Le rapport n'exige pas de tri.
Comment : |
Il existe deux avantages liés à la fourniture d'une estimation de taille d'entrée (ESTRECORDS) ou de taille de rapport (ESTLINES):
Référence : |
Dans les environnements non Mainframe, la fonctionnalité de tri externe utilise des fichiers de travail temporaires pour stocker les résultats de tri intermédiaires. Il est important que pour chaque type de tri externe, vous avez des connaissances sur le fonctionnement des fichiers de travail, leur création et leur utilisation.
Bien que l'utilitaire de tri externe n'utilise qu'un seul fichier de travail, FOCSORT (attribué dans le répertoire EDATEMP), le tri externe permet d'utiliser jusqu'à 31 fichiers de travail, affectés dans un ou plusieurs lecteurs de disque (axes) ou répertoires. (Avertissement : il est possible que les fichiers de travail prennent beaucoup d’espace. Comptez à utiliser davantage d'espace disque que ne l'exige FOCSORT).
Par défaut, cinq fichiers de travail sont alloués dans le répertoire /tmp dans UNIX, ou dans le répertoire auquel pointe la variable de l'environnement TMP dans Windows. Il se peut que cela ne soit pas assez d'espace de travail et, même si les fichiers entrent dans le répertoire /, il est probable que les cinq fichiers ne suffissent pas pour assurer la performance optimale. De plus, si tous les fichiers de travail se trouvent sur le même disque, cela diminue la performace encore plus.
Vous avez deux autres options :
Si la variable UNIX TMPDIR ou Windows TMP est définie, elle doit être désactivée pour pouvoir utiliser les variables IBITMPDIRnn. La commande UNIX pour modifier la définition de la variable TMPDIR est :
unset TMPDIR
La commande Windows pour modifier la définition de la variable TMPDIR est :
SET TMP=
Différentes variables peuvent pointer vers le même répertoire, si désiré. Si vous souhaitez affecter n fichiers de travail, vous devez définir les variables 01 à n. La première variable qui manque à l'environnement détermine le nombre de fichiers de travail qui seront utilisés. (Si vous définissez moins de cinq variables, des fichiers de travail supplémentaires sont affectés en utilisant la variable d'interpréteur de commandes TMPDIR pour en atteindre cinq). Le plus de fichiers de travail que vous affectez et le plus ils sont dispersés sur les axes, les meilleurs les résultats que vous obtenez. La contrainte la plus importante est l'espace disque total disponible.
Les noms des fichiers de travail sont générés par la fonction ANSI tempnam, cependant, les noms commencent tous par srtwk. Si le processus de tri fini normalement ou est annulé à cause d'une erreur detectable (généralement un dépassement d'espace disque), tous les fichiers de tâches affectés sont supprimées. Il n'y a pas de moyen formel pour les sauvegarder. Si une autre terminaison anormale survient, les fichiers srtwk peuvent être stockés sur le disque. Vous pouvez et devriez les supprimer.
Sur IBM i (anciennement i5/OS), le nombre de fichiers de travail est fixé sur 9. Il s'agit de fichiers virtuels.
Le message d'erreur WebFOCUS FOC909 est délivré pour toutes les erreurs de tri externes. Un code à trois chiffres supplémentaire est fourni, dont les deux derniers chiffres sont le point d'intérêt. Si vous recevez un chiffre d'erreur se terminant par :
Dans cette section : Comment : |
Par défaut, les messages d'erreur créés par votre produit de tri externe mainframe ne s'affichent pas. Cependant, vous pouvez afficher ces messages à votre écran à titre diagnostique.
Si vous utilisez la commande SET SORTLIB pour spécifier l'utilitaire de tri utilisé dans votre site et pour les variables DFSORT et SYNCSORT sur z/OS, pour afficher les messages de tri.
SET SORTLIB = {sortutility|DEFAULT}
où :
peut prendre l'une des valeurs suivantes :
DFSORT pour DFSORT sans messages.
MVSMSGDF pour DFSORT sans messages.
SYNCSORT pour SyncSort sans messages.
MVSMSGSS pour SyncSort avec messages standards.
MVSMSGSD pour SyncSort avec messages débogage (détaillés).
DEFAULT pour DFSORT. Cependant, il est plus efficace et fortement recommandé de spécifier explicitement l'utilitaire de tri en utilisant l'une des autres valeurs.
Attribuez DDNAME SYSOUT au flux de sortie par lot ou à un fichier sur z/OS en insérant la carte DD suivante appropriée dans votre JCL par lot du serveur, s'il n'y existe pas. Par exemple, la carte DD suivante attribue DDNAME SYSOUT au flux de sortie par lot :
//SYSOUT DD SYSOUT=*
Lorsqu'un tri externe crée une erreur, vous pouvez créer une trace du traitement de tri et examiner les codes de retour et les messages FOCUS pour identifier le problème.
Lorsqu'un problème de tri externe se produit, l'un des messages suivants s'affiche :
(FOC909) CRITICAL ERROR IN EXTERNAL SORT. RETURN CODE IS: xxxx (FOC1810) External sort not found (FOC1899) Load of %1 (external-sort module) under %2 failed
En réponse à ces messages, ainsi que pour tout autre problème lié au tri, il est utile de tracer le traitement de tri. Pour plus d'informations sur l'identification de problèmes de tri externe, consultez Identification d'erreurs de tri externe.
//FSTRACE DD SYSOUT=*,DCB=(RECFM=FA,LRECL=133,BLKSIZE=133)
SET TRACEUSER = ON SET TRACEON = SORT/1/FSTRACE
Lorsque vous recevez un message FOC909, il inclut un code de retour :
(FOC909) CRITICAL ERROR IN EXTERNAL SORT. RETURN CODE IS: xxxx
Il se peut que vous receviez aussi l'un des messages suivants :
(FOC1810) External sort not found (FOC1899) Load of %1 (external-sort module) under %2 failed
Les notes suivantes s'appliquent lorsque ce message ou un FOC1800 ou un message FOC1899 est créé par une requête TABLE.
Afin de diagnostiquer l'erreur, vous devez générer des messages de tris externes (à l'aide des instructions compris dans les chapitres Sélectionner un utilitaire de tri et des options de message et Tracer le traitement de tri et ensuite reproduire l'échec.
Pour les codes de retour non décrit ci-dessous, suivez la même procédure que celle décrite pour le code de retour 16.
IEC130I SYSOUT DD STATEMENT MISSING.
Lorsque REBUILD INDEX appelle un tri externe qui échoue, il crée un message semblable à celui-ci :
ERROR OCCURRED IN THE SORT yyyyyyyyzzzzzzzz
Dans ce cas, le code de retour est yyyyyyyy et est exprimé en hex. Vous devez ignorer les huit derniers chiffres zzzzzzzz.
Convertissez le code de retour en format décimale et suivez les instructions pour les codes de retour dans une requête TABLE.
Notez aussi que lorsqu'une requête TABLE crée un code de retour non zéro à partir d'un tri externe, FOCUS est annulé. Contrairement à cela, lorsque REBUILD INDEX génère un code de retour non zéro à partir d'un tri externe, la commande REBUILD est annulée mais non pas FOCUS.
Avant de suivre ces instructions, assurez-vous que les messages de tri externe ont été générés (pour en savoir plus, consultez Sélectionner un utilitaire de tri et des options de message) et que ceux-ci indiquent clairement que l'échec s'est produit en raison d'un espace de travail de tri insuffisant.
WebFOCUS passe cette estimation à l'utilitaire de tri externe au moyen de la liste de paramètres.
Ne remplacez pas les cartes DD pour SORTWKnn, S001WKnn, DFSPARM ou $SORTPARM, sauf contre-indication de la part de l'assistance technique. Vous pouvez obtenir des informations équivalentes aux rubriques Sélectionner un utilitaire de tri et des options de message, Tracer le traitement de tri et Estimer le nombre d'enregistrements d'entrée ou la taille de rapport pour le tri.
Comment : Référence : |
L'utilisation du tri externe pour effectuer l'agrégation entraîne une diminution du temps de traitement significative par rapport à l'utilisation de l'utilitaire de tri interne. Les augmentations sont surtout remarquables dans le cadre de requêtes simples et de grandes sources de données.
Lorsque l'agrégation s'effectue par un tri externe, les variables statistiques &RECORDS et &LINES sont égales car les produits de tri externe ne renvoient pas de décompte de lignes au jeu de réponses. Cela est un changement de comportement et modifie tout code qui vérifie le valeur de &LINES. (S'il est nécessaire de tester &LINES, n'utilisez pas cette fonctionnalité).
SET EXTAGGR = aggropt
où :
peut prendre l'une des valeurs suivantes :
OFF refuse l'agrégation par un tri externe.
NOFLOAT permet l'agrégation s'il n'y a aucun champs de données de point flottant présents.
ON permet l'agrégation par un tri externe. Il s'agit de la valeur par défaut.
Si vous appliquez SUM à un champ alphanumérique dans votre requête de rapport sans utiliser un tri externe, la dernière instance des champs triés s'affiche dans la sortie. L'activation de l'agrégation dans le tri externe affiche le premier enregistrement plutôt. Cependant, vous pouvez contrôlez l'ordre d'affichage à l'aide du paramètre SUMPREFIX. Avec SUMPREFIX = LST (la valeur par défaut), la dernière instance s'affiche même lorsque le paramètre EXTAGGR est défini sur ON.
La commande suivante active l'agrégation et laisse le paramètre SUMPREFIX défini sur LST (la valeur par défaut) et, affiche ainsi le dernier enregistrement :
SET EXTAGGR = ON SET SUMPREFIX = LST TABLE FILE CAR SUM CAR BY COUNTRY END
La sortie est :
COUNTRY CAR ------- --- ENGLAND TRIUMPH FRANCE PEUGEOT ITALY MASERATI JAPAN TOYOTA W GERMANY BMW
Remarque : SUMPREFIX est décrite à Changement d'ordre de récupération avec l'agrégation (environnements mainframe uniquement) .
Lorsque le paramètre SUMPREFIX est défini sur FST, la sortie est :
COUNTRY CAR ------- --- ENGLAND JAGUAR FRANCE PEUGEOT ITALY ALFA ROMEO JAPAN DATSUN W GERMANY AUDI
Comment : |
Lorsqu'un tri externe effectue l'agrégation de formats alphanumériques ou de date intelligente, l'ordre du jeu de réponses renvoyé diffère de l'ordre des jeux de réponses triés à l'intérieur.
Les produits de tri externe renvoient le premier enregistrement alphanumérique ou de date intelligente qui a été agrégé. Inversement, le tri interne renvoie le dernier enregistrement.
La commande SUMPREFIX permet aux utilisateurs de choisir l'ordre d'affichage du jeu de réponses.
SET SUMPREFIX = {LST|FST}
où :
affiche la première valeur lorsque les types de données alphanumériques et de date intelligente sont agrégés. Il s'agit de la valeur par défaut.
affiche la première valeur lorsque les types de données alphanumériques et de date intelligente sont agrégés.
Comment : Référence : |
Vous pouvez utiliser des tris externes mainframe pour créer des fichiers HOLD, gagnant beaucoup de temps de traitement. Les augmentations sont surtout remarquables dans le cadre de requêtes simples et de grandes sources de données.
SET EXTHOLD = {OFF|ON}
où :
désactive les fichiers HOLD par un tri externe.
active les fichiers HOLD par un tri externe. Il s'agit de la valeur par défaut.
WebFOCUS |