itsource

오라클 테이블에 데이터를 삽입하는 가장 빠른 방법은 무엇입니까?

mycopycode 2023. 8. 30. 21:42
반응형

오라클 테이블에 데이터를 삽입하는 가장 빠른 방법은 무엇입니까?

데이터를 처리하여 테이블에 로드하는 데이터 변환을 PL/SQL로 작성하고 있습니다.PL/SQL Profiler에 따르면 변환에서 가장 느린 부분 중 하나는 대상 테이블에 실제 삽입하는 것입니다.테이블에는 단일 인덱스가 있습니다.

로드할 데이터를 준비하기 위해 테이블의 행 유형을 사용하여 변수를 채운 다음 다음과 같이 테이블에 삽입합니다.

insert into mytable values r_myRow;

다음을 수행함으로써 성과를 얻을 수 있었던 것 같습니다.

  • 삽입하는 동안 로깅 끄기
  • 한 번에 여러 레코드 삽입

이러한 방법이 바람직합니까?그렇다면 구문은 무엇입니까?

PL/SQL 테이블과 FORALL을 사용하여 한 번에 수백 개의 행을 삽입하는 것이 훨씬 좋습니다.자세한 내용은 여기를 참조하십시오.

또한 PL/SQL 테이블을 구성하는 방법에도 주의해야 합니다.PL/SQL에서 행별 작업은 여전히 SQL보다 느리기 때문에 가능하면 "INSERT INTER t1 SELECT..."를 사용하여 모든 변환을 SQL에서 직접 수행하는 것을 선호합니다.

모두 하여 직접 삽입을 사용할 .INSERT /*+APPEND*/기본적으로 DB 캐시를 우회하여 데이터 파일에 새 블록을 직접 할당하고 씁니다.이렇게 하면 사용 방법에 따라 로깅 양을 줄일 수도 있습니다.이것도 몇 가지 시사점이 있으니 먼저 미세한 설명서를 읽어보시기 바랍니다.

마지막으로 테이블을 잘라내고 재구성하는 경우 먼저 삭제(또는 사용할 수 없음으로 표시)한 후 인덱스를 재구성하는 것이 좋습니다.

일반 삽입 문은 테이블에서 데이터를 가져오는 가장 느린 방법이며 대량 삽입에는 사용되지 않습니다.다음 기사에서는 성능 향상을 위한 다양한 기술을 소개합니다. http://www.dba-oracle.com/oracle_tips_data_load.htm

인덱스를 삭제한 다음 행을 삽입한 다음 인덱스를 다시 만듭니다.

인덱스를 삭제해도 속도가 충분하지 않으면 Oracle SQL*Loader가 필요합니다.

http://www.oracle.com/technology/products/database/utilities/htdocs/sql_loader_overview.html

당신이 아이디, 이름, 샐, 직업을 얻었다고 가정해 보겠습니다.따라서 먼저 다음과 같이 테이블을 만듭니다.

SQL>create table tablename(eid number, ename varchar2(20),sal number,job char(10));

이제 데이터를 삽입합니다.

SQL>insert into tablename values(&eid,'&ename',&sal,'&job');

이 링크를 확인하십시오. http://www.dba-oracle.com/t_optimize_insert_sql_performance.htm

  1. 사례에서 고려해야 할 주요 사항은 추가 힌트를 사용하는 것입니다. 이 힌트는 프리리스트를 사용하는 대신 테이블에 직접 추가됩니다.로깅을 해제할 수 있는 경우 로깅 힌트 없이 append를 사용하여 로깅을 해제할 수 있습니다.
  2. PL/SQL에서 반복하는 대신 대량 삽입 사용
  3. 파일 피드에서 데이터를 가져오는 경우 sqloaded를 사용하여 테이블에 직접 데이터 로드

여기 빠른 삽입에 대한 제 추천 사항이 있습니다.

트리거 - 테이블과 연결된 모든 트리거를 비활성화합니다.삽입이 완료된 후 활성화합니다.

색인 - 색인을 삭제하고 삽입이 완료된 후 다시 작성합니다.

오래된 통계 - 테이블 및 인덱스 통계를 다시 분석합니다.

색인 조각 모음 해제 - 필요한 경우 색인 재구성 기록 없음 사용 - INSERT APEND(오라클 전용)를 사용하여 삽입합니다.이 접근 방식은 매우 위험한 접근 방식으로, redo 로그가 생성되지 않으므로 롤백을 수행할 수 없습니다. 시작하기 전에 테이블을 백업하고 활성 테이블을 사용하지 마십시오.DB에 유사한 옵션이 있는지 확인합니다.

병렬 인서트: 병렬 인서트를 실행하면 작업 속도가 빨라집니다.

대량 삽입 제약 조건 사용 - 삽입하는 동안 오버헤드가 많지 않지만 1단계 이후에도 여전히 느리다면 확인하는 것이 좋습니다.

자세한 내용은 http://www.dbarepublic.com/2014/04/slow-insert.html 에서 확인할 수 있습니다.

가장 좋은 방법 중 하나는 실제로 Oracle을 최대한 피하는 것입니다.저도 이에 당황했지만, Java 프로세스는 OCI(읽기: SQL Plus)를 사용하거나 올바르게 작동하는 데 너무 많은 시간을 소모하는 Oracle 유틸리티(읽기: SQL*Loader)를 능가하는 경우가 많습니다.

이렇게 해도 특정 힌트(예: /APPEND/)를 사용할 수 있습니다.

저는 그런 종류의 해결책에 눈을 돌릴 때마다 유쾌하게 놀랐습니다.

건배.

롤로

언급URL : https://stackoverflow.com/questions/143872/what-is-the-fastest-way-to-insert-data-into-an-oracle-table

반응형