2013-02-01 2 views
0

나는 다음과 같은 스키마를 갖는 테이블에 많은 행을 삽입 해요 :Oracle DB에 XML을 삽입하는 데 시간이 오래 걸리는 이유는 무엇입니까?

TABLE "SPACE"."WORKTABLE" 
    ( "ID" NUMBER, 
    "AUTHOR" VARCHAR2(20 BYTE), 
    "INSERTION_DATE" DATE, 
    "XML_DOCUMENT" "SYS"."XMLTYPE" 
    ) 

삽입은 ADO.NET (OracleXmlType)를 사용하여 수행되고있다. 첫 번째로 삽입 된 행이 완료되는 데 2 ​​분 이상 걸립니다. 그러나이 삽입이 완료되면, 다음 모든 것은 첫 번째 것보다 훨씬 적은 시간이 걸립니다.

  1. 왜 이렇게 되나요?
  2. 이것은 XML을 삽입 할 때 수행되는 XML 구문 분석과 관련이 있습니까? 왜 (그렇다면) 첫 번째 삽입에서만 발생합니까?
  3. 이번 시간을 단축 할 수 있습니까?

(가능하면, 답을 기록하십시오)

UPDATE : 코드가 실행되는 5500 문자 길이의 XML을 갖는 대부분의 10 행에 대한 간단한 삽입합니다. 또한, 나는 지연의 원인으로 열리는 연결에 이미 취해진 시간을 없앴습니다.

string sql = "INSERT INTO WORKTABLE VALUES (" + rowID + ",'JBALVIN',1,'01-JAN-12',:xmldocument)"; 
using (OracleCommand comm = new OracleCommand(sql, con)) 
{ 
    comm.Parameters.Add(":xmldocument", OracleDbType.XmlType); 
    OracleXmlType xmlType = new OracleXmlType(con, entidadXML); 
    comm.Parameters[0].Value = xmlType; 
    comm.ExecuteNonQuery(); 
} 

UPDATE : 우리는 지연의 원인이 라인이 OracleXmlType xmlType = new OracleXmlType(con, entidadXML);입니다 것으로 나타났습니다

. 오라클이 XML 유효성을 검사하는 것을 막음으로써 문제를 해결할 수 있습니까? 그렇다면 ... 어떻게 할 수 있습니까? 연결을 사용하여 직접 명령으로?

+0

"오랜 시간"이란 무엇을 의미합니까? 허용 가능한 시간 제한은 무엇입니까? 오랜 시간이 걸릴 수도 있음을 나타내는 코드를 제공하지 않았습니다. – Ben

+0

예, 코드를 보여줄 수 있습니까? 오라클 대신 코드에 버그가있을 수 있습니까? – Pete

+0

@ben 우리는 많은 단위 테스트를위한 시나리오를 설정하기위한 데이터를 수립하고 있습니다. 이 데이터는 마치 숫자가있는 행을 삽입 한 것처럼 삽입 될 것입니다. 또는 더 나은 : 가능한 한 빨리. 삽입에는 30 초가 걸리고 300 단위 테스트가 있기 때문에 모든 단위 테스트를 실행하는 데는 실용적이지 않습니다. 또한, 질문에 언급했듯이, 첫 번째 삽입은 대부분의 시간이 걸립니다. – JPCF

답변

0

음 ... 추측과 검색 후 XML에서 사용 된 스키마가있는 URL (속성 xmlns:xsixsi:noNamespaceSchemaLocation)이 삭제되면 삽입이 밀리 초 단위로 완료된다는 사실을 발견했습니다. 안타깝게도이 동작은 Oracle OracleXmlType documentation에 문서화되어 있지 않습니다.

관련 문제