Performance Insight 써도 돼요?
안녕하세요. 저는 우아한형제들의 시스템신뢰성개발팀에서 DBA로 근무하고 있는 이재웅이라고 합니다.
Performance Insight에 대해 개발팀에서도 궁금해하고 저도 궁금해서 해본 테스트 결과를 공유해보려고 합니다.
Aurora, RDS MySQL 등 RDS를 이용하고 있는데 CPU가 스파이크를 치거나 Replica Lag이 높게 발생하거나
RDS에 문제가 있어 보이는데 어떤 문제인지 모르는 경우가 많습니다.
그래서 RDS를 모니터링하기 위해 Cloudwatch도 보고 SlowQuery도 수집하지만 그래도 뭔가 속시원하진 않아요..
Performance Insight 는 AWS RDS 를 모니터링할 수 있는 새로운 기능입니다.
특히 RDS의 병목 현상을 1초마다 수집하는 쿼리와 함께 분석할 수 있어서 병목의 원인을 찾는데 효율적입니다.
몇달 전부터 한국 리전에서도 사용할 수 있습니다.
Performance Insights
Amazon RDS 성능 개선 도우미(Performance Insights) 사용
AWS에서는 Performance Insight는 가급적 쓰라고 권고합니다.
Performance Insight 에 단점은 없을까? 모니터링 하면서 부하를 주진 않을까?
새로운 기능을 사용할때는 예기치 못한 새로운 문제점도 있을까 우려가 되죠.
AWS에 ‘성능 저하가 있지 않을까요?’ 질문했을때 약간의 성능 저하가 있다고 하지만 공식 레퍼런스에는 성능 저하에 대한 이야기는 없습니다.
DBA나 개발자는 정량화된 수치로 얘기하는걸 좋아해요.
‘이 기능은 좋으니 쓰세요’. ‘이건 안좋으니 안쓰는게 좋아요’ 라고 말하려면 당연히 “왜요?”에 대한 답변과 같이 가야됩니다.
성능이 나빠요 -> 얼만큼 나빠요? -> 조금 나빠요 -> 조금이 얼만큼이죠?
듣는 사람으로 하여금 공감을 받기 위해서 정량화된 수치로 얘기하는게 좋습니다.
모니터링을 위해 성능저하가 발생할 순 있겠지만 서비스에 영향을 미치는건 원치 않죠.
그래서 테스트 해봤습니다.
Performance Insight는 성능 지표를 어떻게 수집하지?
Performance Insight 는 performance_schema 에 기록되는 지표를 이용합니다.
따라서 performance_schema 옵션이 ON 되어있어야 하며 그에 따른 여러 제약 조건이 있습니다.
- Aurora MySQL 2.x(5.7.12) 은 performance_schema 를 사용할 수 없기 때문에 Performance Insight 를 사용할 수 없습니다.
- db.t2 타입에선 사용할 수 없습니다.
성능 개선 도우미(Performance Insights)를 활성화한 상태에서 Amazon RDS MySQL DB 인스턴스를 생성하면 성능 스키마가 자동으로 활성화됩니다. 성능 개선 도우미(Performance Insights)를 활성화한 상태에서 DB 인스턴스를 생성하면 성능 스키마 파라미터의 다음 하위 집합이 지정된 값으로 자동으로 설정됩니다.
- performance_schema=1
- performance-schema-consumer-events-waits-current=ON
- performance-schema-instrument=’wait/%=ON’
- performance-schema-consumer-global-instrumentation=ON
- performance-schema-consumer-thread-instrumentation=ON
성능 개선 도우미(Performance Insights) 활성화
테스트 방법
- 테스트 툴 : sysbench 1.0.15 tpcc
- 스레드 : 2, 4, 8, 16, 32, 64, 128(r3.8xlarge만) 개로 단계적으로 늘림
- 테스트 시간 : 300초
- 데이터 : 10tables, 100scale -> 약 90GB
- Performance Insight OFF, performance_schema OFF
- Performance Insight OFF, performance_schema ON
- Performance Insight ON, performance_schema ON
테스트 결과
메모리 사용
Performance Insight 를 Enable 시키면 기본적으로 약 1.1GB 의 메모리를 더 사용합니다.
이 때문에 t2 타입에서는 해당 기능이 활성화가 안되는걸로 보입니다.
Performance Insight 기능이 메모리를 사용한다기 보단 performance_schema 옵션이 메모리를 사용합니다.
Performance Insight 를 끄고 performance_schema 만 사용해도 동일하게 메모리를 사용합니다.
Free Memory(GB)
type | PI사용안함 | PI사용안함,PS사용 | PI사용 |
---|---|---|---|
r3.large | 5625 | 4493 | 4470 |
r3.2xlarge | 14150 | 13048 | 13020 |
r3.8xlarge | 48706 | 47450 | 47429 |
QPS 성능
Performance Insight (performance_schema) 를 사용하면 사용하지 않았을때보다 약 8% 정도의 QPS 성능 하락을 보여줍니다.
파란색:PI사용안함, 주황색:PI사용안함&PS사용, 회색:PI사용
R3.Large
threads | PI사용안함 | PI사용안함&PS사용 | PI사용 | PI사용안함:PI사용 |
---|---|---|---|---|
2 | 859.51 | 593.34 | 582.9 | 32% |
4 | 1407.01 | 1286.33 | 1236.43 | 12% |
8 | 1899.29 | 1912.89 | 1855.07 | 2% |
16 | 2097.44 | 2310.71 | 2405.39 | -15% |
32 | 2681.32 | 2499.47 | 2459.83 | 8% |
64 | 2739.66 | 2495.07 | 2480.63 | 9% |
R3.2XLarge
threads | PI사용안함 | PI사용안함&PS사용 | PI사용 | PI사용안함:PI사용 |
---|---|---|---|---|
2 | 674.43 | 675.16 | 674.96 | 0% |
4 | 1738.4 | 1800.12 | 1695.45 | 2% |
8 | 4373.47 | 4432.08 | 4251.23 | 3% |
16 | 9520 | 9840.3 | 9524.58 | 0% |
32 | 15817.25 | 15354.18 | 15574.11 | 2% |
64 | 20876.38 | 18255.96 | 19265.53 | 8% |
R3.8XLarge
threads | PI사용안함 | PI사용안함&PS사용 | PI사용 | PI사용안함:PI사용 |
---|---|---|---|---|
2 | 3677.77 | 3516.63 | 3028.16 | 18% |
4 | 6782.67 | 6662.14 | 5700.79 | 16% |
8 | 11752.67 | 11814.5 | 10189.43 | 13% |
16 | 19448.72 | 19675.83 | 17902.32 | 8% |
32 | 30083.57 | 31534.26 | 28841.52 | 4% |
64 | 48621.79 | 49967.41 | 46423.18 | 5% |
128 | 60493.63 | 61706.6 | 59848.1 | 1% |
마치며
Performance Insight 는 RDS의 병목현상을 확인하기에 간편하고 좋은 기능입니다.
이러한 모니터링을 하려면 별도의 모니터링 솔루션을 사용하거나 직접 만들어야합니다.
performance_schema 사용 역시 다른 모니터링 솔루션에서도 자세한 지표를 보기 위해선 요구하고 있으므로 Performance Insight 만의 이슈는 아닙니다.
MySQL 모니터링을 위해 약간의 성능과 트레이드 오프를 하게 되네요.
시스템 자원이 늘 부족한 인스턴스에서 사용하기엔 부담이 되지만 시스템 자원에 여유가 있고 8~10% 성능 하락을 인식하고 사용한다면 추후 성능 개선에 도움이 될 수 있습니다.