0 / 0
Retourner à la version anglaise de la documentation
Problèmes de performance dans les requêtes avec sous-requêtes dans la Data Virtualization
Dernière mise à jour : 26 nov. 2024
Problèmes de performance dans les requêtes avec sous-requêtes dans la Data Virtualization

Si vous exécutez une requête contenant des sous-requêtes, vous pouvez rencontrer des problèmes de performances.

Symptômes

Vous exécutez une requête qui comporte des sous-requêtes, mais la requête prend trop de temps pour renvoyer les résultats.

Résolution du problème

Pour résoudre ce problème,
  1. Si l'extraction parallèle de pseudonymes est activée, accédez au plan d'accès généré.
  2. Vérifiez que votre sous-requête est réécrite dans une jointure dans l'instruction SQL, comme illustré dans l'exemple suivant.
    Instruction SQL d'origine
    SELECT
    A5."CD_GENDER" C0,
    A5."CD_MARITAL_STATUS" C1,
    A5."CD_EDUCATION_STATUS" C2,
    A5."CD_PURCHASE_ESTIMATE" C3,
    A5."CD_CREDIT_RATING" C4,
    A5."CD_DEP_COUNT" C5,
    A5."CD_DEP_EMPLOYED_COUNT" C6,
    A5."CD_DEP_COLLEGE_COUNT" C7
    FROM
    "TPCDS1TB"."CUSTOMER_ADDRESS" A1,
    "TPCDS1TB"."CUSTOMER" A2,
    "TPCDS1TB"."CUSTOMER_DEMOGRAPHICS" A5
    WHERE
    (A1."CA_COUNTY" IN ('Allen County', 'Rock County', 'Modoc County', 'Yamhill County', 'Lee County')) AND
    (A2."C_CURRENT_ADDR_SK" = A1."CA_ADDRESS_SK") AND
    (1 =
    (SELECT
    DISTINCT 1
    FROM
    "TPCDS1TB"."STORE_SALES" A3,
    "TPCDS1TB"."DATE_DIM" A4
    WHERE
    (A2."C_CUSTOMER_SK" = A3."SS_CUSTOMER_SK") AND
    (A3."SS_SOLD_DATE_SK" = A4."D_DATE_SK") AND
    (A4."D_YEAR" = 1999) AND
    (2 <= A4."D_MOY") AND
    (A4."D_MOY" <= 5)
    ))
    Instruction SQL réécrite
    (SELECT
    Q3.CD_GENDER,
    Q3.CD_MARITAL_STATUS,
    Q3.CD_EDUCATION_STATUS,
    Q3.CD_PURCHASE_ESTIMATE,
    Q3.CD_CREDIT_RATING,
    Q3.CD_DEP_COUNT,
    Q3.CD_DEP_EMPLOYED_COUNT,
    Q3.CD_DEP_COLLEGE_COUNT
    FROM
    TPCDS1TB.CUSTOMER_ADDRESS AS Q1,
    TPCDS1TB.CUSTOMER AS Q2,
    TPCDS1TB.CUSTOMER_DEMOGRAPHICS AS Q3,
    (SELECT
    DISTINCT 1
    FROM
    TPCDS1TB.DATE_DIM AS Q4,
    TPCDS1TB.STORE_SALES AS Q5
    WHERE
    (Q4.D_MOY <= 5) AND
    (2 <= Q4.D_MOY) AND
    (Q4.D_YEAR = 1999) AND
    (Q5.SS_SOLD_DATE_SK = Q4.D_DATE_SK) AND
    (Q2.C_CUSTOMER_SK = Q5.SS_CUSTOMER_SK)
    ) AS Q6,
  3. À la fin de toutes les valeurs du paramètre DB2_DV_OVERRIDES, ajoutez la valeur NON_QPPD_MPP. Par exemple, si les valeurs en cours du paramètre DB2_DV_OVERRIDES sont les suivantes :
    DB2_DV_OVERRIDES=EN_OJMQT,EN_JOINFILTER,EN_GAIANQUERY_JOINFILTER,
    Une fois que vous avez ajouté la valeur NON_QPPD_MPP, les valeurs des paramètres sont affichées dans l'exemple suivant.
    DB2_DV_OVERRIDES=EN_OJMQT,EN_JOINFILTER,EN_GAIANQUERY_JOINFILTER,NO_SBQPPD_MPP

    Vous pouvez définir le paramètre DB2_DV_OVERRIDES au niveau de l'instance, de sorte que le paramètre s'applique à toutes les requêtes ou au niveau de la requête, de sorte que le paramètre s'applique à une requête particulière. Pour ce faire, vous pouvez appliquer des profils d'optimisation (OPTGUIDELINE) à une requête spécifique. Pour plus d'informations, voir Variables de registre du compilateur SQL dans un profil d'optimisation.

Recherche et réponse à l'IA générative
Ces réponses sont générées par un modèle de langue de grande taille dans watsonx.ai en fonction du contenu de la documentation du produit. En savoir plus