SELECT查询抛出超时

时间:2012-05-24 11:21:29

标签: oracle sql-server-2008 select timeout

执行SELECT查询时出现一些超时问题。

SQL Server 2008链接到Oracle服务器(数据库AAAA,表K和P)。 我们使用的提供程序是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中获取数据,但也许某些查询优化可能会解决问题。

问候。

更新:

索引设置正常,表中的数据量小于100k。 我已将问题追溯到dbo.AAAA_tblPosiljke,这是在MSSQL服务器上从Oracle上的表中获取数据的视图。这是查询:

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 个答案:

答案 0 :(得分:0)

我通过创建有问题的表localy解决了这个问题。我定期同步表并在sql服务器端而不是在oracle端执行它们。