Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

MIXI, Inc. 自己紹介
 株式会社MIXI Vantageスタジオ 
 みてねプロダクト開発部 基盤開発グループ SREチーム 
 伊東 宏起
 
 https://hekki.info


Slide 3

Slide 3 text

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


Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

MIXI, Inc. 本日お話する内容
 - 障害発生時のタイムライン 
 - 障害の原因を分析
 - 再発防止策
 - まとめ


Slide 6

Slide 6 text

MIXI, Inc. 障害発生時のタイムライン
 - ある日のピークタイム、APIサーバーの全面に配置されているALBのHTTPCode_Target_5XX_Countが急 激に増加しアラートが発報 
 - アプリケーションログを確認したところ The table is full というエラーが頻発していることが判明 
 - Aurora MySQLクラスターのライターインスタンス・リーダーインスタンスそれぞれクエリを投げてみると、 リーダーインスタンスのみで同様のエラーが出ていることに気づく 
 - そこで新しいリーダーインスタンスを追加してみたところエラーが出ない 
 - インスタンス固有の問題と勘違いし、既存のリーダーインスタンスを削除したところ、新しいリーダーインス タンスでも同様のエラーが発生 
 - ピークタイムの終わりに伴って負荷が下がった結果、自然とエラーが解消 


Slide 7

Slide 7 text

MIXI, Inc. - TempTableストレージエンジンとは? 
 - MySQL8.0で登場した、テンポラリテーブルのためのストレージエンジン
 - 基本的にインメモリで動作しつつ、データが大きすぎる場合にディスク領域も確保する
 - TempTableストレージエンジンがテンポラリテーブルに割り当てることができるメモリ・ディスク領域の上限 はそれぞれtemptable_max_ram, temptable_max_mmap で定義されている
 - どちらもデフォルト値は1GB
 障害の原因を分析
 TempTableストレージエンジンが確保 したメモリ・ディスク領域のサイズが上限値を超えてしまった 


Slide 8

Slide 8 text

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/

Slide 9

Slide 9 text

MIXI, Inc. - TempTableストレージエンジンがメモリ・ディスクをどのぐら い確保しているかを可視化 
 - prometheus-mysql-exporterを導入してメトリクスを収集 ・Grafanaで可視化
 - https://github.com/prometheus/mysqld_exporter
 - 実績値を元に temptable_max_ram, temptable_max_mmap を 十分に引き上げ
 - 初手の応急処置ではリーダーインスタンスの台数を増やす ことでエラーを抑止したが、リーダーインスタンスを安全に 元の台数に戻すこともできた 
 再発防止策


Slide 10

Slide 10 text

MIXI, Inc. - Aurora MySQL 3へのアップグレードに伴って私達の環境で発生した障害を振り返りました 
 - アップグレード時に下記のようにケアしていれば、障害を起こすことはなかったはずなので反省 
 - temptable_max_ram, temptable_max_mmap を予め引き上げておく
 - アップグレード後にテンポラリテーブルの使用状況を確認
 - temptable_max_ram, temptable_max_mmap を適正値まで調整
 - 同様の問題に遭遇したエントリーが散見されるので、Aurora MySQL 3系のお使いの場合は参考にしてい ただけると幸いです 
 まとめ


Slide 11

Slide 11 text

MIXI, Inc.