현재 데이터베이스를 Postgresql을 사용하는 서비스에서, cpu 사용률이 100%에 닿을떄가 종종…

현재 데이터베이스를 Postgresql을 사용하는 서비스에서, cpu 사용률이 100%에 닿을떄가 종종 있어서 scale을 해야하는데, 어떻게 해야할지 고민입니다. 그런데 여기서 문제는 서비스 특성상 사용자가 한없이 없을떈 cpu사용률이 5%미만이나 한없이 많을떈 100%까지 올라간다는 점입니다. rds 인스턴스는 현재 m3.medium을 사용하고 있습니다.

아래와 같은 두 가지 방법을 생각해봤습니다.
1. 더 큰 인스턴스로 scale up.
=> 그런데 이같은 경우는, 서비스 특성상 5~100%까지 cpu사용률의 변동성이 매우 큰데, 지금 시점에서 인스턴스를 올리는 것은 부담이 될 것 같고, 더 좋은 방법이 있을 것 같습니다.
2. read replication 사용
=> 그런데 aws rds를 보니 postgrsql은 read replica를 지원하지 않는다고 합니다.

* 레디스는 이미 사용하고 있습니다.

아직 실력이 부족하여 위의 두가지 방법 밖에 생각해보지 못했으나, 1번은 더 좋은 방법이 있을 것 같고, 2번은 rds에서의 postgresql에도 데이터베이스를 스케일아웃할 수 있는 방법이 있을 것 같아서, 여기 계신 고수분들께 도움을 요청드립니다…

꼬꼬마에게 조언 부탁드리겠습니다…

11 thoughts on “현재 데이터베이스를 Postgresql을 사용하는 서비스에서, cpu 사용률이 100%에 닿을떄가 종종…

  1. 원이 파악을 먼저 하신 후에 대책을 세우시는게 어떨까 합니다. 바쁜 시간에 도는 쿼리중에 테이블 풀스캔을 할 수고 있고 그러니까요.

  2. m3.medium이 cpu 하나 뿐이라 별로고요. 피크시에만 많이 쓴다면 t2.medium이 적당해보이네요. cpu 2개에 비용도 더 저렴합니다. 단, cpu를 하루종일 100% 사용할 수는 없습니다. 피크가 하루중 1시간 미만이라면 문제가 없을겁니다.

  3. Hoseung Kim t2.medium으로 옮기고 나서의 결과입니다. 웹서버엔 큰 변동이 없는 것으로 보아, 사용자 수가 줄어든 것은 아닌 것 같고, 정말 퍼포먼스가 좋아진 것 같습니다. 좋은 조언 감사드립니다. 피크때 어떻게 될지 기대됩니다!

  4. Hwe Chul Cho 아, 그게 문제일 수도 있겠군요… vacuum을 따로 한 적은 없는데, 해당 디비 인스턴스를 사용한지 한달이 되지 않았습니다. 보통은 얼마간의 주기로 혹은 어떤 기준으로 vacuum을 하나요??

  5. 부연 하자면… 김호승님 추천이 정말 좋은게 t2는 bursting기능이 있어서 안쓸때 cpu 파워(크레딧)를 축적 해두었다가 필요할때 파워를 왕창 뽑아 씁니다. (참고로 EBS도 genernal ssd로 바뀌면서 bursting기능이 생겼죠). 초기 크레딧도 미디움이면 60을 주고.. 단,크레딧은 24시간마다 초기화 됩니다. t2 쓰기 딱 좋은 케이스 인것 같습니다.. 물론 서비스가 많이 커지면 감당이 안되겠죠…

    CloudWatch에서 크레딧 쌓이는것과 소모되는 비율을 모니터링해 보시고 t2로 감당이 되는지 결정하시면될것 같습니다. 자세한 사항은 아래 링크로..
    http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instances.html

    아.. 그리고 vacuum은 9. 때 버전 부터 자동으로 되는걸로 알고 있습니다.

  6. Mun-gi Chang 오 좋은 부연 감사드립니다. bursting기능이 처음에 봤을때 cpu은행 같아서 좋긴한데, t2고유의 “base performance”라는 제약이 있군요…

  7. autovacuum은 factor수치를 조절해서 적절하게 변경되도록 두어야합니다. (물론 다른 수치도 있지만..) 아이템갯수가 엄청 많은경우에서, aws디폴트로(거의 엔진 디폴트)는 autovacuum이 안돌아가는 경우가있어요. 적절..하게 두심이..

  8. DB의 성능 이슈는 인스턴스 변경만으로는 한계가 있습니다. No-Chul Park 의견대로 원인 파악 후 대응하는 편이 더 좋을 듯 싶습니다. 사실 DB에 호출되는 쿼리에 인덱스만 잘 잡혀 있어도 CPU 사용률은 현저하게 줄어듭니다.

Comments are closed.