0

クエリの実行時にタイムアウトの問題が発生しSELECTます。

これは、Oracle サーバー (データベース AAAA、テーブル K および P) にリンクされた SQL Server 2008 です。使用しているプロバイダーは、Microsoft OLE DB Provider for Oracle (MSDAORA) です。

SELECT     
    I.DOF AS Id, I.DokumentDatumDokumenta, I.DokumentaDatumPrejetja, 
    I.PartnerID, I.PartnerNaziv, I.PartnerNaslov, I.PartnerIdentifikacijskaStevilka, 
    I.PartnerPostnaStevilka, I.PartnerKraj, I.PartnerDrzava,   
    I.PrejemnikInternoPodjetjeId, I.PrejemnikInternoPodjetje,   
    I.PrejemnikOrganizacijskaSkupinaId, 
    I.PrejemnikOrganizacijskaSkupina, I.PrejemnikZaposleni, I.DokumentEksternaOznaka, 
    I.DokumentVrstaDokumenta, I.DokumentZadeva, 
    I.ProcesOpravilo, I.PrejemnikVSkupiniId, I.PrejemnikVSkupiniNaziv, 
    I.PrejmnikVSkupiniWorkflowId, D.Path AS EDokumentPath, I.SkeniranjeUporabnik, 
    I.SkeniranjeTime, I.ReleaseTime, I.WorkflowName, I.NadzornikRacunaId, 
    I.NadzornikRacunaNaziv, I.NadzornikRacunaWorkflowId, I.Znesek, 
    K.SIF_VAL AS Valuta, D.ZagnanProcesTime, I.DatumValute, I.StevilkaNarocila, 
    I.DUR, D.DocId, P.ZNESEK AS ZnesekVeur
FROM         
    dbo.tblAscentIndex AS I 
INNER JOIN
    dbo.tblAscentDoc AS D ON D.DocId = I.DocId 
INNER JOIN
    dbo.AAAA_tblPosiljke AS K ON I.DOF = K.DOF 
INNER JOIN
    OPENQUERY(AAAA, 'SELECT DOF,ZNESEK FROM KDF_INPUT_POD') AS P ON P.DOF = I.DOF

誰かがこのクエリの最適化の提案を持っている場合、私は非常に感謝しています.

問題は、ローカルの SQL Server とリンクされた Oracle の両方からデータを取得しているためですが、クエリの最適化によって問題が解決する可能性があります。

よろしく。

アップデート:

インデックスは OK に設定されており、テーブル内のデータ量は 100k 未満です。Oracle のテーブルからデータを取得している MSSQL サーバーのビューである dbo.AAAA_tblPosiljke まで問題を追跡しました。クエリは次のとおりです。

SELECT     ID_KIP AS ID_CDS, STATUS, DOF, ST_DOK AS ST_DOKUMENTA, SIF_OE, SIF_PP, IDENTIF_ST_OE, IDENTIF_ST_PP, DAT_DOSPETJA, DAT_DUR, 
                      SIF_VAL, ZNESEK_VAL, OPIS, VR_PREDMETA, PODPISNIK AS SIF_PODPISNIKA, REFERENT AS SIF_REFERENTA, DAT_FAKTURE, ST_NAROCILA, 
                      DAT_ZAPADLOSTI, APLIKACIJA, DAT_OBDOBJA, DAT_ECL, ST_ECL, CAR_POSTOPEK, MODEL, SKLIC, VRSTA_TRR, VEZA_URL, 
                      KPA_STATUS_PRENOSA, KPA_NAPAKA, UPORABNIK, ID_ARH, VK_PGD, ID_PGD, PROJEKT
FROM         OPENQUERY(AAAA, 'SELECT * FROM KDF_INPUT_POD WHERE STATUS NOT IN (9)') AS derivedtbl_1
WHERE     (DAT_DOSPETJA > CONVERT(DATETIME, '2012-03-01 00:00:00', 102))

このクエリの一部の実行には 2 分以上かかりますが、Oracle では同じクエリに 1 秒もかかりません。データの取得に問題があるようです。最適化にアプローチする方法はありますか?

よろしく。

4

1 に答える 1

0

問題のあるテーブルのローカルを作成することで問題を解決しました。テーブルを定期的に同期しており、Oracle側ではなくSQLサーバー側で実行しています。

于 2012-07-02T11:20:42.620 に答える