AWS Lambda, 데이터베이스 프리징 문제, 해결책은?

by DD
1개월 전
조회수 8

AWS Lambda 환경에서 데이터베이스 프리징(Database Freezing) 현상이 발생하여 서비스에 심각한 영향을 미침

문제의 원인은 InnoDB 히스토리(History) 길이 증가커넥션 풀링(Connection Pooling)의 부적절한 사용으로 분석됨

`transaction_isolation=READ-COMMITTED` 설정을 통해 InnoDB 히스토리(History) 관리 효율성을 개선하여 문제를 해결

MS SQLPostgreSQL과 같은 다른 데이터베이스(Database)에서도 유사한 문제에 적용 가능

InnoDB 히스토리(History) 길이 문제의 근본 원인

본문에서는 AWS Lambda 환경에서 발생하는 데이터베이스 프리징(Database Freezing) 문제의 근본 원인을 InnoDB 히스토리(History) 길이 증가로 지목한다. 특히, 커넥션 풀링(Connection Pooling) 환경에서 트랜잭션(Transaction)이 제대로 종료되지 않아 오래된 행 버전(Old Row Versions)이 삭제되지 못하는 상황을 설명한다. 이러한 문제는 InnoDB의 MVCC(Multi-Version Concurrency Control) 특성과 결합되어 데이터베이스 성능 저하를 야기한다.

READ-COMMITTED 격리 수준(Isolation Level) 설정의 중요성

저자는 `transaction_isolation=READ-COMMITTED` 설정을 통해 문제를 해결할 수 있다고 제안한다. 기술적으로 보면, READ-COMMITTED 격리 수준은 각 문(Statement)이 실행된 직후 읽기 뷰(Read View)를 해제하여 오래된 행 버전(Old Row Versions)의 삭제를 돕는다. 이는 InnoDB 히스토리(History) 길이를 줄여 데이터베이스 성능을 향상시키는 핵심 전략이다. 특히, Galera 클러스터(Cluster) 환경에서 더욱 효과적이다.

커넥션 풀링(Connection Pooling)과 트랜잭션(Transaction) 관리

본문은 커넥션 풀링(Connection Pooling) 환경에서 트랜잭션(Transaction) 관리가 얼마나 중요한지를 강조한다. 커넥션 풀(Connection Pool)은 데이터베이스 연결을 재사용하여 성능을 향상시키지만, 트랜잭션(Transaction)이 제대로 관리되지 않으면 오래된 읽기 뷰(Read View)가 남아 InnoDB 히스토리(History) 길이를 증가시킨다. 따라서, 트랜잭션(Transaction)의 명시적인 종료와 적절한 격리 수준 설정이 필수적이다.

다른 데이터베이스(Database) 시스템에서의 적용 가능성

댓글에서 언급된 바와 같이, `transaction_isolation=READ-COMMITTED` 설정은 MS SQL과 같은 다른 데이터베이스(Database) 시스템에서도 유사한 문제 해결에 적용될 수 있다. 이는 데이터베이스(Database) 시스템의 MVCC(Multi-Version Concurrency Control) 특성 때문이다. 따라서, 데이터베이스(Database) 성능 문제를 겪고 있는 개발자는 격리 수준(Isolation Level) 설정을 검토하여 성능을 개선할 수 있다.

The AWS Lambda 'Kiss of Death'