2012-05-24 153 views
0

執行SELECT查詢時出現一些超時問題。SELECT query throws timeout

這是SQL Server 2008鏈接到Oracle服務器(數據庫AAAA,表K和P)。 我們正在使用的提供程序是用於Oracle的Microsoft OLE DB提供程序(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獲取數據,但也許某些查詢優化可能會解決問題。

問候。

UPDATE:

的索引被設置行和表中的數據的量是小於100K。 我已經將問題追溯到dbo.AAAA_tblPosiljke,它是從Oracle上的表中獲取數據的MSSQL服務器上的視圖。下面是查詢:

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相同的查詢執行而需要更少然後第二。看起來像是提取數據的問題。任何想法如何解決優化?

問候。

+2

請編輯您的帖子並添加所有涉及表中存在的索引,每個表中的行數以及上述SQL生成的當前查詢執行計劃。謝謝。 –

+0

我已經與Oracle鏈接服務器「混合」了,至少可以說。你嘗試過'INNER JOIN KOPA..SCHEMA_NAME.KDF_INPUT_POD AS P'嗎?您可能想嘗試使用Oracle的OLE DB提供程序而不是Microsoft的,它在某些情況下性能更好。雖然老實說,我發現與Oracle連接的服務器合作比純粹的科學更具有試驗和錯誤。 – Pondlife

+0

謝謝你幫助我。 BOn Jarvis:我確信問題在於與MSSQL相關的Oracle,而不是索引/記錄數量相關。 Pondlife:如果更改爲Oracle提供程序不起作用,我還有其他選項嗎? – no9

回答

0

我通過創建本地問題表解決了這個問題。我定期同步表,並在SQL服務器端而不是在oracle端執行它們。