< Précédent | Suivant >

Leçon 6 : exécution instructions SQL en mode statique

Les applications que votre entreprise développe devront exécuter des instructions SQL en mode statique sur la base de données GSDB, qui s'exécute sur DB2. Dans cette leçon, vous allez associer et exécuter en mode statique des instructions SQL figurant dans l'interface InventoryLevelsData.
Les instructions SQL en mode statique présentent les avantages suivants :
Pas de cache pour instructions dynamiques
L'utilisation d'instructions SQL statiques réduit les conflits liés au cache pour instructions dynamiques, d'où amélioration des performances pour les applications qui utilisent des instructions SQL dynamiques.
Cohérence des chemins d'accès
Avec les instructions SQL statiques, les chemins d'accès sont verrouillés avant exécution d'une application, d'où des temps de réponse prévisibles et stables. Pour les instructions SQL dynamiques, en revanche, les chemins d'accès sont calculés au moment de l'exécution.
Possibilité de performances accrues pour vos applications
Les instructions SQL statiques peuvent améliorer les performances de vos applications.
  • Les plans d'accès sont déterminés avant exécution, ce qui dispense de la préparation des instructions SQL au moment de l'exécution.
  • Il n'est pas nécessaire de préparer et de décrire chaque instruction et de ce fait, le trafic réseau entre applications clientes et serveurs de base de données se trouve réduit.
  • Les instructions SQL statiques imposent le strict respect des types de données pour les variables hôtes ou les paramètres utilisés dans les prédicats. Ce strict respect garantit la correspondance des données en entrée avec les types cibles dans la base de données.
Sécurité renforcée
Vous pouvez accorder aux utilisateurs le privilège EXECUTE sur les packages DB2 plutôt que de leur accorder des privilèges sur les objets de base de données.
Facilité de révision des modules
La gestion des versions de modules DB2 vous permet de redéfinir les liens sans risquer de perdre des chemins d'accès préexistants et mieux appropriés.

Pour associer et exécuter en mode statique des instructions SQL figurant dans l'interface InventoryLevelsData, procédez comme suit :

  1. Dans l'explorateur de packages, recherchez le fichier Default.genProps dans le dossier pureQueryFolder de votre projet pureQuery_test Java : pureQuery_test > pureQueryFolder > Default.genProps. Cliquez deux fois sur le fichier pour l'ouvrir et pouvoir ainsi l'éditer.
  2. Sur une ligne vierge du fichier Default.genProps, indiquez le package et le nom de l'interface. Vous pouvez saisir le package et le nom manuellement ou vous faire aider par pureQuery. Pour vous faire aider par pureQuery, procédez comme suit :
    1. Tout en maintenant la touche CTRL enfoncée, appuyez sur la barre d'espace. Une petite fenêtre s'ouvre.
      Figure 1. pureQuery répertoriant les interfaces du projet Java
      Fenêtre Assistant de contenu
    2. Cliquez deux fois sur le nom de l'interface pour l'insérer dans la ligne vierge.
  3. Ajoutez un espace, le signe = et un autre espace de sorte que la ligne se présente comme suit :
    com.mycompany.pureQuery.test.InventoryLevelsData = 
  4. Déterminez quelles options vous pouvez utiliser pour définir le nom de la collection et celui du package racine. Tout en maintenant la touche CTRL enfoncée, appuyez sur la barre d'espace. Une autre petite fenêtre s'ouvre.
    Conseil : Lorsque vous cliquez sur une option, une description de cette dernière apparaît à côté de la liste. Vous pouvez cliquer sur la description et utilisez la barre de défilement en bas de la fenêtre jaune pour afficher le texte dans son intégralité.
    Figure 2. Options que vous pouvez spécifier pour l'interface dans le fichier Default.genProps
  5. Complétez la ligne afin qu'elle se présente comme suit :
    com.mycompany.pureQuery.test.InventoryLevelsData = -collection "GOSALES" -rootPkgName "invlevl"
  6. Enregistrez le fichier et cliquez sur Oui dans le message qui s'affiche. pureQuery doit enregistrer dans la classe d'implémentation de l'interface les valeurs que vous avez saisies dans le fichier the Default.genProps. Lorsque vous associez l'instruction SQL figurant dans l'interface, l'utilitaire StaticBinder de pureQuery recherche ces valeurs dans la classe d'implémentation afin de déterminer comment créer les packages de base de données.
  7. Passez en revue la structure des packages que vous envisagez de créer. Dans la vue Structure SQL, cliquez sur l'onglet Packages de base de données.
    Conseil : Si les données de performances organisées dans une table continuent de s'afficher dans la vue Structure SQL, cliquez sur le bouton Afficher l'arborescence ou la vue Table (Bouton Afficher l'arborescence ou la vue de table).

    Bien que seul un package s'affiche dans la vue, vous allez créer quatre packages, un pour chaque niveau d'isolement. Cependant, chacun des packages présentera le même nom racine invlevl et les mêmes instructions SQL. Si vous souhaitez créer un package pour un niveau d'isolement seulement, vous pouvez éditer le fichier Default.bindProps. Ce fichier vous permet de spécifier les options de l'utilitaire StaticBinder qui permet de créer les packages. De plus, aux fins de ce tutoriel, vous pouvez conserver les valeurs par défaut des options de l'utilitaire StaticBinder.

  8. Associez le package :
    1. Cliquez avec le bouton droit de la souris sur le nom du package et sélectionnez Lier. La fenêtre Sélection d'une connexion s'ouvre.
    2. Sélectionnez la connexion GSDB et cliquez sur Terminer.

    pureQuery exécute l'utilitaire StaticBinder et affiche les résultats dans la vue Console :

    ================================================================================
    
    The StaticBinder utility successfully bound the package 'invlevl1' for the isolation level UR.
    The StaticBinder utility successfully bound the package 'invlevl2' for the isolation level CS.
    The StaticBinder utility successfully bound the package 'invlevl3' for the isolation level RS.
    The StaticBinder utility successfully bound the package 'invlevl4' for the isolation level RR.
    
    The StaticBinder utility successfully bound 'com.mycompany.pureQuery.test.InventoryLevelsDataImpl'.
    
    ================================================================================
    
    
    Results of the StaticBinder utility's activity:
    
        Number of implementation classes and pureQueryXml files for which the bind operation SUCCEEDED: 1
    
    
    Bind for package invlevl using connection GSDB succeeded.
    Vous pouvez inspecter les packages dans l'explorateur de sources de donnée. La vue Structure SQL permet de les retrouver facilement.
  9. Dans la vue Structure SQL, cliquez avec le bouton droit de la souris sur le nom du package et sélectionnez Rechercher dans l'explorateur de sources de données. L'explorateur de sources de données s'ouvre et développe les dossiers de la connexion GSDB jusqu'à ce qu'il trouve et mette en surbrillance les packages.
  10. Exécutez les instructions SQL en mode statique. Vous pouvez alors comparer les données avec celles capturées lors de l'exécution des instructions SQL en mode dynamique.
    1. Cliquez avec le bouton droit de la souris sur le dossier du projet et sélectionnez Exécuter en tant que > Configurations d'exécution.
    2. Dans la fenêtre Configurations d'exécution, ouvrez la configuration utilisée pour capturer le premier jeu de données de performances. Dans la zone Arguments VM de la page Arguments, saisissez cette ligne puis cliquez sur Appliquer :
      -Dpdq.executionMode="STATIC"
    3. Cliquez sur Exécuter.
  11. Dans l'explorateur de projets, cliquez avec le bouton droit de la souris sur le dossier du projet et sélectionnez pureQuery > Actualiser le projet dans SQL Outline. Examinez alors les données de performances.
    1. Dans la vue Structure SQL, cochez la case Comparer. La vue est actualisée. Si votre projet contient plus d'un jeu de données de performances enregistré, vous pouvez sélectionner l'un d'entre eux dans la zone à côté de la case Comparer.
      Figure 3. Commandes permettant de comparer des jeux de données de performances
      Commandes permettant de comparer des jeux de données de performances

      Chaque colonne contient désormais une colonne gris et une colonne blanche. Les colonnes grises correspondent aux données de performances actuelles, obtenues en exécutant les instructions SQL en mode statique. Les colonnes blanches correspondent aux données de performances précédentes, obtenues en exécutant les mêmes instructions SQL en mode dynamique.

      Par défaut, la vue compare le temps d'exécution en millisecondes des instructions.

    2. Utilisez la zone Afficher en bas de la vue pour comparer les données de performances de deux autres façons :
      Différence
      Les colonnes grises indiquent le temps en millisecondes pour le jeu de données en cours. Les colonnes blanches indiquent les différences de temps. Par exemple, voici les statistiques pour la première instruction dans la vue.
      Tableau 1. Temps actuel en millisecondes pour l'instruction comparé à la différence entre le temps actuel et le temps précédent
      Temps total Temps max. Temps moyen Temps min.
      18,32 11,11 15,92 -0,25 6,11 3,70 1,11 1,08
      Les chiffres indiquent que dans le jeu de données précédent :
      • le temps d'exécution total est supérieur de 11,11 millisecondes à celui du jeu de données actuel ;
      • le temps d'exécution maximum est inférieur de 0,25 millisecondes à celui du jeu de données actuel ;
      • le temps d'exécution moyen est supérieur de 3,70 millisecondes à celui du jeu de données actuel ;
      • le temps d'exécution minimum est supérieur de 1,08 millisecondes à celui du jeu de données actuel.
      Pourcentage
      Les colonnes grises indiquent le temps en millisecondes pour le jeu de données en cours. Les colonnes blanches indiquent les différences de temps sous la forme de pourcentages. Voici de nouveau les statistiques pour la première instruction dans la vue.
      Tableau 2. Temps actuel en millisecondes pour l'instruction comparé à la différence sous forme de pourcentage entre le temps actuel et le temps précédent
      Temps total Temps max. Temps moyen Temps min.
      18,32 60,66 % 15,92 -1,56 % 6,11 60,66 % 1,11 97,29 %
      Les chiffres indiquent que dans le jeu de données précédent :
      • le temps d'exécution total est supérieur de 60,66 % à celui du jeu de données actuel ;
      • le temps d'exécution maximum est inférieur de 1,56 % à celui du jeu de données actuel ;
      • le temps d'exécution moyen est supérieur de 60,66 % à celui du jeu de données actuel ;
      • le temps d'exécution minimum est supérieur de 97,29 % à celui du jeu de données actuel.
< Précédent | Suivant >

Commentaires