Медленный запрос SELECT через DBLink - Oracle - PullRequest
2 голосов
/ 07 февраля 2020

Я пытаюсь использовать следующий запрос через Oracle DBLink для извлечения некоторых данных из Oracle EBS в другую систему.

WITH 
        --Este CTE ira receber todos os fornecedores
 cteallvendors AS (
    SELECT DISTINCT
        asu.vendor_name,
        apv.vendor_id,
        ssa.address_line1,
        ssa.address_line2,
        ssa.address_line3,
        ssa.address_line4,
        ssa.city,
        ssa.state,
        ssa.global_attribute10
        || ''
        || ssa.global_attribute11
        || ''
        || ssa.global_attribute12 cnpj
    FROM
        apps.ap_suppliers@k2prd            asu
        LEFT JOIN apps.ap_vendors_v@k2prd            apv ON apv.vendor_id = asu.vendor_id
        LEFT JOIN apps.ap_supplier_sites_all@k2prd   ssa ON apv.vendor_id = ssa.vendor_id
                                                          AND asu.vendor_id = ssa.vendor_id
)
SELECT
    mmt.transaction_id,
    cffea.document_type     "TIPO_DOCUMENTO",
    rt.vendor_id            "NUMERO_FORNECEDOR",
    vendors.vendor_name     "NOME_FORNECEDOR",
    cfi.invoice_num         "NUMERO_NOTA",
    cfi.series              "SERIE",
    mp.organization_code    "OI",
    mmt.subinventory_code   "SUBINVENTARIO",
    msib.segment1           "CODIGO_ITEM",
    mmt.transaction_uom     "UOM",
    msib.description        "DESCRICAO",
    mmt.creation_date,
    rt.transaction_type
FROM
    apps.mtl_material_transactions@k2prd      mmt
    LEFT JOIN apps.rcv_transactions@k2prd               rt ON mmt.rcv_transaction_id = rt.transaction_id
    LEFT JOIN apps.cll_f189_invoice_lines@k2prd         cfil ON rt.organization_id = cfil.organization_id
                                                        AND rt.po_line_location_id = cfil.line_location_id
    LEFT JOIN apps.cll_f189_invoices@k2prd              cfi ON cfil.invoice_id = cfi.invoice_id
    LEFT JOIN apps.cll_f189_invoice_types@k2prd         cfit ON cfi.invoice_type_id = cfit.invoice_type_id
    LEFT JOIN apps.cll_f189_fiscal_entities_all@k2prd   cffea ON cfi.entity_id = cffea.entity_id
    LEFT JOIN apps.cll_f189_fiscal_operations@k2prd     cffo ON cfil.cfo_id = cffo.cfo_id
    LEFT JOIN cteallvendors                             vendors ON rt.vendor_id = vendors.vendor_id
    LEFT JOIN apps.mtl_parameters@k2prd                 mp ON mmt.organization_id = mp.organization_id
    LEFT JOIN apps.mtl_system_items_b@k2prd             msib ON msib.inventory_item_id = mmt.inventory_item_id
                                                    AND msib.organization_id = mmt.organization_id
    LEFT JOIN apps.mtl_transaction_types@k2prd          mtt ON mmt.transaction_type_id = mtt.transaction_type_id
WHERE
    nvl(mmt.attribute1, '0') = '0'
    AND ( ( rt.transaction_type = 'DELIVER'
            AND cfit.credit_debit_flag = 'D' )
          OR ( rt.transaction_type = 'RETURN TO RECEIVING'
               AND cfit.credit_debit_flag = 'C' ) )
    AND cffo.cfo_code IN (
        1101,
        2101,
        3101
    )
    AND upper(mtt.transaction_type_name) IN (
        'PO RECEIPT',
        'RETURN TO VENDOR'
    )
        ORDER BY
            transaction_id

Но время выполнения ужасно по сравнению с DBLink.

Обычно для его запуска в исходной базе данных требуется несколько миллисекунд (примерно от 0,500 до одной секунды при загрузке данных, это обычное время), но когда я пытаюсь запустить его из DBLink, это не приносит никаких результатов. Я оставил его запущенным более часа, другие запросы по тому же DBLink работают нормально, также, другие DBLinks также работают нормально.

Может ли кто-нибудь помочь мне решить эту ситуацию? Является ли запрос плохо оптимизированным или может возникнуть проблема с инфраструктурой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...