2012-05-24 3 views
0

SELECT 쿼리를 실행할 때 시간 초과 문제가 있습니다.SELECT 쿼리가 시간 초과를 throw합니다.

Oracle 서버 (데이터베이스 AAAA, 테이블 K 및 P)에 연결된 SQL Server 2008입니다. 우리가 사용하는 공급자는 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 :

인덱스가 OK 설정하고 테이블에있는 데이터 양이 100,000 미만이다. 오라클의 테이블에서 데이터를 가져 오는 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 분 이상 걸리는 초 후 걸리지 : 여기 쿼리이다. 데이터를 가져 오는 데 문제가있는 것 같습니다. 어떤 아이디어를 어떻게 최적화 할 수 있습니까?

감사합니다.

+2

게시물을 편집하고 관련된 모든 테이블에있는 인덱스, 각 테이블의 행 수 및 위의 SQL에서 생성 된 현재 쿼리 실행 계획을 추가하십시오. 감사. –

+0

필자는 오라클 링크 서버와 함께 '혼란 스럽다'는 말을했습니다. 대신'INNER JOIN KOPA..SCHEMA_NAME.KDF_INPUT_POD AS P'를 시도 했습니까? 그리고 Microsoft의 OLE DB 공급자 대신 Oracle의 OLE DB 공급자를 사용해보고 싶을 수도 있습니다. 솔직히 오라클 링크 서버로 작업하는 것이 정확한 과학보다 시행 착오적 인 것으로 나타났습니다. – Pondlife

+0

나를 도와 주셔서 감사합니다. BOn Jarvis : 문제는 MSSQL 링크 된 Oracle이며 인덱스/레코드 금액과 관련이 없습니다. Pondlife : 오라클 제공 업체로 변경하면 다른 옵션을 사용할 수없는 경우? – no9

답변

0

문제가되는 테이블 인 localy를 작성하여 문제를 해결했습니다. 나는 주기적으로 테이블을 동기화하고 오라클 측에서 오히려 SQL 서버 측에서 실행하고있다.

관련 문제