Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Aurora MySQL version 3でTempTable溢れの振り返り

MIXI ENGINEERS
September 12, 2023

Aurora MySQL version 3でTempTable溢れの振り返り

9/11に開催された、【Chatwork × みてね勉強会】EKS&Aurora最新ノウハウでお話させていただいた、みてねSREの伊東の登壇資料です。

MIXI ENGINEERS

September 12, 2023
Tweet

More Decks by MIXI ENGINEERS

Other Decks in Technology

Transcript

  1. Aurora MySQL version 3での
    TempTable溢れの振り返り
    【Chatwork × みてね勉強会】EKS&Aurora最新ノウハウ

    View full-size slide

  2. MIXI, Inc.
    自己紹介

    株式会社MIXI Vantageスタジオ 

    みてねプロダクト開発部 基盤開発グループ SREチーム 

    伊東 宏起


    https://hekki.info


    View full-size slide

  3. MIXI, Inc.
    家族アルバム みてねの紹介
    写真プリント
    フォトブック
    スマホで撮影した子どもの写真や動画を家族と共有し、
    コミュニケーションして楽しむ家族アルバムサービスで
    す。


    View full-size slide

  4. MIXI, Inc.
    家族アルバム みてねの紹介
    利用者数1,800万人を突破(2023年5月時点)
    ※ iOS・Android™ アプリ登録者数、ブラウザ版登録者数の合計
    7言語・175の国と地域でサービスを提供

    View full-size slide

  5. MIXI, Inc.
    本日お話する内容

    - 障害発生時のタイムライン 

    - 障害の原因を分析

    - 再発防止策

    - まとめ


    View full-size slide

  6. MIXI, Inc.
    障害発生時のタイムライン

    - ある日のピークタイム、APIサーバーの全面に配置されているALBのHTTPCode_Target_5XX_Countが急
    激に増加しアラートが発報 

    - アプリケーションログを確認したところ The table is full というエラーが頻発していることが判明 

    - Aurora MySQLクラスターのライターインスタンス・リーダーインスタンスそれぞれクエリを投げてみると、
    リーダーインスタンスのみで同様のエラーが出ていることに気づく 

    - そこで新しいリーダーインスタンスを追加してみたところエラーが出ない 

    - インスタンス固有の問題と勘違いし、既存のリーダーインスタンスを削除したところ、新しいリーダーインス
    タンスでも同様のエラーが発生 

    - ピークタイムの終わりに伴って負荷が下がった結果、自然とエラーが解消 


    View full-size slide

  7. MIXI, Inc.
    - TempTableストレージエンジンとは? 

    - MySQL8.0で登場した、テンポラリテーブルのためのストレージエンジン

    - 基本的にインメモリで動作しつつ、データが大きすぎる場合にディスク領域も確保する

    - TempTableストレージエンジンがテンポラリテーブルに割り当てることができるメモリ・ディスク領域の上限
    はそれぞれtemptable_max_ram, temptable_max_mmap で定義されている

    - どちらもデフォルト値は1GB

    障害の原因を分析

    TempTableストレージエンジンが確保 したメモリ・ディスク領域のサイズが上限値を超えてしまった 


    View full-size slide

  8. MIXI, Inc.
    - Aurora MySQL 3系のリードレプリカの場合、Aurora DB クラスター独
    自のストレージアーキテクチャによりテンポラリテーブルの挙動が異
    なる

    - aurora_tmptable_enable_per_table_limit はデフォルトで0

    - temptable_max_ram を超えるまでメモリ領域を確保

    - メモリ領域を使い切ったら temptable_max_mmap 超えるまでディスク領域を
    確保

    - ディスク領域も使い切ったら The table is full となる

    障害の原因を分析(つづき)

    TempTableストレージエンジンが確保したメモリ・ディスク領域のサイズが上限値を超えてしまった 

    引用元: https://aws.amazon.com/jp/blogs/database/use-the-temptable-storage-engine-on-amazon-rds-for-mysql-and-amazon-aurora-mysql/

    View full-size slide

  9. MIXI, Inc.
    - TempTableストレージエンジンがメモリ・ディスクをどのぐら
    い確保しているかを可視化 

    - prometheus-mysql-exporterを導入してメトリクスを収集
    ・Grafanaで可視化

    - https://github.com/prometheus/mysqld_exporter

    - 実績値を元に temptable_max_ram, temptable_max_mmap を
    十分に引き上げ

    - 初手の応急処置ではリーダーインスタンスの台数を増やす
    ことでエラーを抑止したが、リーダーインスタンスを安全に
    元の台数に戻すこともできた 

    再発防止策


    View full-size slide

  10. MIXI, Inc.
    - Aurora MySQL 3へのアップグレードに伴って私達の環境で発生した障害を振り返りました 

    - アップグレード時に下記のようにケアしていれば、障害を起こすことはなかったはずなので反省 

    - temptable_max_ram, temptable_max_mmap を予め引き上げておく

    - アップグレード後にテンポラリテーブルの使用状況を確認

    - temptable_max_ram, temptable_max_mmap を適正値まで調整

    - 同様の問題に遭遇したエントリーが散見されるので、Aurora MySQL 3系のお使いの場合は参考にしてい
    ただけると幸いです 

    まとめ


    View full-size slide