잘 돌아가'던' RDS FreeStorageSpace가 낮아졌다고 문의가 올때가 있었습니다..
대다수 클라우드 고객들의 이슈라고 생각하는데,
그러면 클라우드 사용하는 유저분들은 왜 우리 리소스에 문제가 생겼지?
인프라 문제 아니야? 라고 생각할 지 모릅니다.
하지만, 그럴 경우에는 진단 및 관제 후 해당 내용에 대한 조치가 이루어진 다음에 다시 어떻게 진행되는지 살펴보는
프로세스를 거쳐서 RDS 인스턴스의 메모리가 낮은 이유를 역추적 해야 합니다.
대개는 파라미터 그룹 설정 혹은 DB 최적화 이슈, DB 커넥션 급증이 가장 큰 원인이지 않을까 싶습니다.
무슨 일인지 문제 시점을 보자
그림 1) RDS Instance의 ReadIOPS, WriteIOPS입니다.
Spike성 Peak가 한 차례 있었습니다.
그림 2) CPUUtilization입니다.
CPU Peak는 없었습니다.
중간에 17시부터 17:15분까지 중간에 치솟은 값이 있지 않느냐? 하실 수 있는데
퍼센티지로 현재 0.899%.. 상당히 낮습니다.
그림 3) FreeStorageSpace의 경우 인스턴스 재시작 이후 증가한 것을 확인하였습니다.
해당 내용을 해소할 수 있는 임시 방편은 다음과 같습니다.
1) innodb_buffer_pool_size의 조정 혹은 2) db 인스턴스 사이즈를 업그레이드
(DB 최적화를 못한다) 어떻게 해결하지..?
임시 방책으로 다음의 세 가지 방법들을 통해서 처리할 수 있습니다.
1) innodb_buffer_pool_size의 조정
파라미터 그룹이 default parameter group이면 해당 생성 후 적용해야 하며, 파라미터 그룹 적용시 즉시 해당 내용 적용하시려면 db 인스턴스를 재부팅하셔야 합니다..
(DBInstanceClassMemory*3/4) 현행의 3/4를 -> 5/8로 변경하셔서 해당 내용을 일시적으로 완화!
다만, 해당 내용의 재조정 이후에 BufferCacheHitRatio (RDS for MySQL의 경우, innodb_buffer_pool_hit_rate)을 확인 후, 너무 낮은 수치가 보일 경우에다시 상향 조정합니다. (innodb_buffer_pool_hit_rate은 Performance Insights를 사용하는 경우에 확인이 가능합니다.)
2) DB 인스턴스 사이즈를 업그레이드
마찬가지로, db 구동에 있어서 적합한 사이즈를 사용하셔야 하는데, 부족한 용량의 DB를 사용하실 수 있습니다.
3) Flush를 진행
각 MyISAM 테이블에 잠금 및 플러시를 수행합니다. 예를 들어, 다음 명령은 myisam_table1 및 myisam_table2라는 두 테이블을 잠그고 플러시합니다.
mysql> FLUSH TABLES myisam_table, myisam_table2 WITH READ LOCK;
DB 인스턴스의 DB 스냅샷을 만듭니다. 스냅샷을 완료하면 MyISAM 테이블에서 잠금을 해제하고 활동을 다시 시작합니다. 다음 명령을 사용하여 테이블의 잠금을 해제할 수 있습니다.
mysql> UNLOCK TABLES;
이러한 단계를 통해 MyISAM에서 메모리에 저장된 데이터를 디스크로 강제 플러시하여 DB 스냅샷 복원 시 깨끗한 상태에서 시작할 수 있습니다.
https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html
SHOW FULL PROCESSLIST;
명령어를 통해 현재의 Connection을 확인합니다.
데이터베이스 연결이 급증하면 사용 가능한 메모리가 줄어들 수 있습니다. Amazon RDS에서 max_connections의 소프트 한도는 다음과 같이 계산됩니다.
{DBInstanceClassMemory/12582880}
SHOW ENGINE INNODB STATUS;
해당 명령어는 버퍼 풀 및 메모리 항목을 확인합니다. BUFFER POOL AND MEMORY 항목은
“Total Memory Allocated”, “Internal Hash Tables” 및 “Buffer Pool Size”와 같이 InnoDB에 대한 메모리 할당에 대한 정보를 제공합니다. InnoDB Status는 래치, 잠금 및 교착 상태에 대한 추가 정보도 제공합니다.
- 디스크 공간 소비 – 사용된 공간이 지속적으로 총 디스크 공간의 85% 이상인 경우 디스크 공간 소비를 조사합니다. 공간을 확보하기 위해 인스턴스에서 데이터를 삭제하거나 데이터를 다른 시스템에 아카이브할 수 있는지 확인하십시오.
다만, 어디까지나 앞서 말씀드린 세가지 방책은 임시방편이므로, DB 최적화를 늘 염두에 두고 진행하시기 바랍니다.
https://aws.amazon.com/ko/premiumsupport/knowledge-center/low-freeable-memory-rds-mysql-mariadb/?nc1=h_ls
'IT > AWS' 카테고리의 다른 글
aws efs vs ebs (0) | 2022.01.25 |
---|---|
AWS S3 Pre-signed URL 완벽 가이드 (0) | 2022.01.13 |
Aws Cloudwatch와 EC2 내부 CPU 사용량 차이 (0) | 2022.01.09 |
AWS Athena를 통한 S3 Request 분석하기 (0) | 2022.01.01 |
Aws Aurora 다수 DB 커넥션 끊어졌을때 (0) | 2022.01.01 |