서버 이관 프로젝트를 수행하는 과정에서 가장 중요한 과제 중 하나는 데이터베이스 성능을 안정적으로 유지하는 것이다. 새로운 서버 환경에서는 기존 환경과 다른 성능 특성이 나타날 수 있으며, 특히 디스크 I/O 성능 저하는 데이터베이스의 전반적인 성능에 큰 영향을 미칠 수 있다.
디스크 I/O 대기(Time Spent on I/O)는 SQL이 데이터를 읽거나 쓸 때 디스크에서 응답을 받기까지 기다리는 시간을 의미한다. 이 값이 높아질수록 SQL 실행 시간이 길어지고, 데이터베이스의 응답 속도가 저하되면서 전체 시스템 성능이 저하될 수 있다.
본 글에서는 디스크 I/O 대기가 발생하는 원인과 성능 저하에 미치는 영향, 그리고 이를 분석하고 최적화하는 방법을 설명한다. 이를 통해 서버 이관 후 발생할 수 있는 I/O 병목을 신속하게 파악하고 해결할 수 있도록 한다.
1. 디스크 I/O 대기란?
1.1 디스크 I/O 대기의 개념
디스크 I/O 대기는 SQL이 실행되는 동안 데이터 블록을 읽거나 쓰는 과정에서 발생하는 지연 시간을 의미한다. 데이터베이스는 메모리에 캐시된 데이터를 우선적으로 활용하지만, 필요한 데이터가 메모리에 존재하지 않을 경우 디스크에서 데이터를 읽어와야 한다.
디스크 I/O는 CPU보다 속도가 느리기 때문에 디스크 I/O 요청이 많아질수록 데이터베이스의 응답 속도가 느려질 가능성이 크다. 따라서 I/O 대기 시간이 길어지는 경우, 데이터베이스 성능 저하의 주요 원인으로 작용할 수 있다.
1.2 디스크 I/O 대기가 성능 저하에 미치는 영향
디스크 I/O 성능 저하는 다음과 같은 문제를 초래할 수 있다.
- SQL 실행 속도 저하
- 데이터 읽기/쓰기 속도가 느려지면서 전체적인 응답 시간이 증가.
- Full Table Scan이 많아질 경우, 디스크 부하가 급증.
- 트랜잭션 처리 지연
- 트랜잭션이 완료되지 않고 대기 상태로 유지될 가능성이 증가.
- 특히 다중 사용자가 동시 처리하는 OLTP 시스템에서 성능 저하가 두드러짐.
- 서버 리소스 과부하
- I/O가 지연되면서 CPU 사용량도 함께 증가하는 경우 발생.
- 다량의 I/O 요청이 병목을 유발하여 시스템 전체 성능 저하.
- 대기 이벤트 증가
- "db file sequential read", "db file scattered read" 등의 대기 이벤트가 증가.
- SQL 실행이 디스크 I/O로 인해 지연됨에 따라, 세션 간 충돌이 증가할 수 있음.
2. 디스크 I/O 대기 분석 방법
디스크 I/O 대기 시간을 분석하려면 ASH(Active Session History) 데이터와 AWR(Automatic Workload Repository) 보고서를 활용하는 것이 효과적이다.
2.1 ASH를 활용한 디스크 I/O 대기 이벤트 분석
아래 SQL을 실행하면 디스크 I/O 관련 대기 이벤트가 가장 많이 발생한 목록을 확인할 수 있다.
- wait_class = 'User I/O': 디스크 I/O 관련 대기 이벤트만 필터링.
- COUNT(*) AS wait_count: 가장 빈번하게 발생한 이벤트를 확인.
이 데이터를 활용하면, 디스크 I/O로 인해 SQL 실행이 지연되는 주요 원인을 파악할 수 있다.
2.2 AWR 보고서를 활용한 I/O 성능 분석
AWR 보고서를 활용하면 디스크 I/O 성능 지표를 분석하고 SQL별 I/O 사용량을 비교할 수 있다.
AWR 보고서를 생성하려면 다음 명령을 실행한다.
실행 후 보고서 유형(HTML 또는 TEXT), 분석할 시간 범위 등을 설정하면 AWR 보고서가 생성된다.
AWR 보고서에서 다음 항목을 분석하여 디스크 I/O 병목 여부를 확인할 수 있다.
- Top SQL by Physical Reads: 디스크에서 가장 많은 데이터를 읽은 SQL.
- Top SQL by Physical Writes: 디스크에 가장 많은 데이터를 기록한 SQL.
- Wait Event Statistics (User I/O): 디스크 I/O 대기 이벤트의 전체 통계.
이 데이터를 활용하면, 디스크 I/O 부하를 발생시키는 SQL을 우선적으로 최적화할 수 있다.
3. 디스크 I/O 성능 최적화 방법
디스크 I/O 성능을 최적화하기 위해 다음과 같은 기법을 적용할 수 있다.
3.1 인덱스를 활용한 Full Table Scan 방지
디스크 I/O가 많은 SQL의 경우 Full Table Scan이 발생할 가능성이 높다. 이를 해결하려면 적절한 인덱스를 활용해야 한다.
- 결과: Full Table Scan 대신 Index Scan을 활용하여 디스크 I/O 부담을 감소.
3.2 테이블 파티셔닝을 활용한 I/O 부하 분산
대량의 데이터가 포함된 테이블에서 특정 범위의 데이터를 자주 조회하는 경우, 테이블을 파티셔닝하면 성능이 개선될 수 있다.
- 결과: 특정 범위의 데이터만 조회하도록 하여 디스크 I/O를 줄이고 성능을 개선.
3.3 Direct Path Read/Write 튜닝
대량 데이터를 처리하는 SQL에서는 Direct Path Read를 활용하면 I/O 성능을 개선할 수 있다.
- 결과: 버퍼 캐시를 거치지 않고 데이터를 직접 읽어와 I/O 대기 시간을 감소.
디스크 I/O 대기 이벤트는 SQL 실행이 디스크에서 데이터를 읽거나 쓰는 동안 발생하는 성능 저하 원인이다. 이러한 문제가 지속되면 트랜잭션 지연, 서버 부하 증가, 응답 속도 저하 등 여러 성능 이슈가 발생할 수 있다.
ASH와 AWR 보고서를 활용하여 디스크 I/O 부하를 분석하고, 인덱스 최적화, 테이블 파티셔닝, Direct Path Read 활용 등 다양한 성능 개선 기법을 적용하면 I/O 병목 문제를 효과적으로 해결할 수 있다.
'IT > AWR-ASH' 카테고리의 다른 글
ASH에서 특정 세션 분석하기: 문제를 일으키는 특정 세션을 추적하고 해결하는 방법 (0) | 2025.02.10 |
---|---|
ASH를 활용한 SQL 튜닝: 실행 시간이 긴 SQL을 최적화하는 접근법 (0) | 2025.02.09 |
SQL 실행 빈도 분석: 가장 많이 실행되는 SQL을 찾아 성능 최적화를 수행하는 방법 (0) | 2025.02.09 |
락(Lock) 관련 대기 분석: 테이블 락, 행(Row) 락 등 트랜잭션 대기로 인한 문제 해결 (0) | 2025.02.09 |
CPU 대기 이벤트 분석: CPU 사용량이 높은 SQL을 식별하고 최적화하는 방법 (0) | 2025.02.09 |
ASH 보고서에서 Wait Event 분석하기: 가장 많이 발생하는 대기 이벤트를 식별하는 방법. (0) | 2025.02.09 |
대기 이벤트란?: SQL 실행이 지연되는 원인을 분석하는 중요한 요소 (0) | 2025.02.09 |
ASH 데이터를 활용한 성능 분석: 특정 시간 동안 실행된 SQL 및 대기 이벤트 분석 (0) | 2025.02.09 |