Problemas de desempenho em consultas com subconsultas na Data Virtualization

Se você executar uma consulta que tenha subconsultas, será possível encontrar problemas de desempenho.

Sintomas

Você executa uma consulta que possui subconsultas, mas a consulta demora muito para retornar resultados.

Resolvendo o problema

Para resolver esse problema,
  1. Se a busca paralela de apelido estiver ativada, acesse o plano de acesso gerado.
  2. Verifique se sua subconsulta foi regravada em uma junção na instrução SQL, conforme mostrado no exemplo a seguir.
    Instrução SQL original
    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)
    ))
    Instrução SQL gravada novamente
    (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. Ao final de todos os valores do parâmetro DB2_DV_OVERRIDES, inclua o valor NO_SUBQPPD_MPP. Por exemplo, se os valores atuais do parâmetro DB2_DV_OVERRIDES forem como a seguir.
    DB2_DV_OVERRIDES=EN_OJMQT,EN_JOINFILTER,EN_GAIANQUERY_JOINFILTER,
    Depois de incluir o valor NO_SUBQPPD_MPP, os valores de parâmetro serão mostrados no exemplo a seguir.
    DB2_DV_OVERRIDES=EN_OJMQT,EN_JOINFILTER,EN_GAIANQUERY_JOINFILTER,NO_SBQPPD_MPP

    É possível configurar o parâmetro DB2_DV_OVERRIDES no nível da instância para que o parâmetro se aplique a todas as consultas, ou no nível da consulta para que o parâmetro se aplique a uma determinada consulta. Para fazer isso, é possível aplicar perfis de otimização (OPTGUIDELINE) a uma consulta específica. Para obter mais informações, consulte Variáveis de registro do compilador SQL em um perfil de otimização.