말랑말랑제리스타일

[오라클 DB] 데이터 INSERT 이후 속도 저하 현상 본문

데이터베이스/Oracle SQL

[오라클 DB] 데이터 INSERT 이후 속도 저하 현상

제리제리 2023. 2. 15. 11:22

오라클 DB를 사용하다 보면 간혹 대량의 데이터를 한 번에 INSERT 한 이후 속도가 저하되는 경우가 발생합니다.

다양한 이유가 있겠지만 SQL문이 아무 이상이 없고 INDEX도 올바른데 이런 현상이 나타나는 경우 테이블 ANALYZE 기능을 이용해볼 수 있습니다.

오라클에서 TABLE ANALYZE로 속도를 향상시킬 수 있는 경우

반응형

오라클에서 TABLE ANALYZE를 통해 속도를 향상시킬 수 있는 경우를 확인해보는 방법은 다음과 같습니다.

1. COUNT를 이용해 해당 테이블의 전체 ROW 수를 확인해봅니다.

SELECT COUNT(*) FROM 테이블명

2. DBA_TABLES 테이블에서 해당 테이블의 데이터를 조회해봅니다.

SELECT * FROM DBA_TABLES WHERE TABLE_NAME = '테이블 명'

3. 1번에서 조회한 COUNT와 2번에서 조회한 데이터 중 NUM_ROWS 컬럼의 값을 비교해봅니다.

여기서 차이가 발생한다면 INSERT 이후 테이블 ANALYZE가 제대로 이루어지지 않은 것이고 TABLE ANALYZE 기능을 이용해 오라클 DB에서 SQL문의 속도를 향상시킬 수 있습니다.

물론 ROW 수만 같을 뿐 실제 데이터가 다른 경우라도 ANALYZE를 통해 속도를 향상시킬 수 있습니다.

DBA_TABLES 테이블을 조회한 화면
DBA_TABLES 테이블을 조회한 화면

침고로 저같은 경우 약 10만 건을 INSERT 했으나 NUM_ROWS가 0으로 제대로 분석되지 않은 경우를 확인했습니다.

 

오라클에서 TABLE ANALYZE로 속도 저하 현상을 해결하는 방법

우선 오라클에서 바로 사용 가능한 ANALYZE 쿼리 예시부터 알려드립니다. 부가 설명이 필요 없으신 분들은 아래 쿼리만 사용하셔도 무방합니다.

반응형
ANALYZE TABLE 테이블명 COMPUTE STATISTICS;

이런 쿼리를 실행시켜주면 바로 ANALYZE가 가능합니다.

여기서 TABLE 대신 INDEX나 여타 OBJECT 타입이 들어갈 수 있고, 

COMPUTE라고 되어있는 부분은 실행 옵션으로 COMPUTE 대신 ESTIMATE 또는 DELETE 옵션이 사용될 수 있습니다.

각각을 설명하면 아래와 같습니다.

오라클 TABLE ANALYZE 옵션 간단히 설명

1. COMPUTE : 가장 정확하게 테이블 정보를 분석해 통계 결과를 저장한다. (실행 속도가 느리고 정확도가 높음)

2. ESTIMATE : ORACLE 알고리즘으로 (정확한 기준은 확실하지 않음) 테이블 정보를 분석해 통계 결과를 저장한다.(실행 속도는 COMPUTE에 비해 빠르나 정확도가 다소 떨어질 수 있음)

3. DELETE : 테이블 통계 정보를 삭제한다.

 

반응형
Comments