Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
RDS/Auroraパフォーマンスインサイトを使ってみる(ちょっとだけAPI編)
Search
hmatsu47
PRO
April 30, 2021
Technology
0
220
RDS/Auroraパフォーマンスインサイトを使ってみる(ちょっとだけAPI編)
JAWS-UG 浜松 AWS 勉強会 2021#4 2021/04/30
hmatsu47
PRO
April 30, 2021
Tweet
Share
More Decks by hmatsu47
See All by hmatsu47
Cloudflare Workes からMySQL 系 DB への接続事情(2024/4 現在)
hmatsu47
PRO
0
12
BuriKaigi2024 にボランティアスタッフとして参加した話
hmatsu47
PRO
0
56
Aurora MySQL と Redshift の zero-ETL 統合のフィルター機能を試してみた
hmatsu47
PRO
0
29
Aurora MySQL 3.06 の ML 機能で Bedrock アクセスを試してみた
hmatsu47
PRO
0
46
RDS Data API と Aurora zero-ETL 統合と BuriKaigi2024 の話
hmatsu47
PRO
0
18
RDS Data API のその後と Aurora zero-ETL 統合のデータ転送処理の話
hmatsu47
PRO
0
53
RDS_Aurora 関連アップデート 2023 版
hmatsu47
PRO
0
73
人工無能たいたん
hmatsu47
PRO
0
65
20 世紀末の地方税理士事務所で IT 導入の 1 → 10 を頑張った話
hmatsu47
PRO
0
40
Other Decks in Technology
See All in Technology
Real World Type Puzzle and Code Generation
yukukotani
4
640
Databricksの生成AI戦略
taka_aki
1
370
【リラン】AIの光と闇?失敗しないために知っておきたいAIリスクとその対応 ①政府の動き編
tkhresk
0
140
LINEヤフーのウェブアクセシビリティ
lycorptech_jp
PRO
2
170
PhpStorm超絶技巧40分集中講義 #phpconkagawa
yusuke
4
760
汎用ポリシー言語Rego + OPAと認可・検証事例の紹介 / Introduction Rego & OPA for authorization and validation
mizutani
1
150
Dungeons and Dragons and Rails
joelq
0
230
PHP 9 に備えよ - 動的プロパティ、どうすればいぃ?
taisukearase
0
300
QAエンジニアが伝えたい品質保証の羅針盤 / Compass for Quality Assurance
mii3king
1
330
Google Cloud Next '24 Recap in ZOZO AIにより変わる開発 運用/Development and operation changed by AI
gachimuchiengineer
0
190
本当のガバクラ基礎
toru_kubota
0
320
iThome2024 Wailing Wall of Enterprise Security
notsurprised
0
290
Featured
See All Featured
Web Components: a chance to create the future
zenorocha
306
41k
Agile that works and the tools we love
rasmusluckow
325
20k
The Cult of Friendly URLs
andyhume
74
5.7k
Visualization
eitanlees
137
14k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
20
1.8k
Making Projects Easy
brettharned
109
5.5k
The MySQL Ecosystem @ GitHub 2015
samlambert
244
12k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
34
6.1k
VelocityConf: Rendering Performance Case Studies
addyosmani
321
23k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
323
20k
Build your cross-platform service in a week with App Engine
jlugia
226
17k
Art, The Web, and Tiny UX
lynnandtonic
290
19k
Transcript
RDS / Aurora パフォーマンスインサイトを 使ってみる(ちょっとだけ API 編) JAWS-UG 浜松 AWS 勉強会
2021#4 2021/04/30 まつひさ(hmatsu47)
自己紹介 松久裕保(@hmatsu47) https://qiita.com/hmatsu47 名古屋で Web インフラのお守り係をしています MySQL 8.0 の薄い本を作って配っていました ◦
Qiita の記事: https://qiita.com/hmatsu47/items/ceb75caf46e3c761095d ◦ GitHub リポジトリの他、印刷版を BOOTH で配布していました ◦ 5 月発行予定の 8.0.24 対応版を最後に更新停止する予定です https://note.com/hmatsu47/n/n3ad586c31dce 2
今日の内容 • パフォーマンスインサイトとは • 管理コンソールで見てみる ◦ Aurora MySQL 5.7 互換版(2.09.2)
▪ mysqlslap & sysbench の結果をグラフ化 • API 経由で使ってみる ▪ Lambda(Python)で S3 へ ▪ S3 → Glue → Athena → QuickSight(グラフを比較) 3
パフォーマンスインサイトとは • RDS / Aurora の負荷とその内訳を示すもの ◦ https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/USER_ PerfInsights.Overview.html •
カウンターメトリクス ◦ 性能に関係するカウンター値を個別にグラフ表示 • データベースのロード ◦ 負荷の高さと内訳をグラフ表示 4
カウンターメトリクス ※ここからしばらく過去発表の再利用 5
データベースのロード 6
データベースのロード • 合計:単位時間あたり平均コネクション数 • 内訳:待機イベント毎の所要時間 ◦ 上位 9 個(※)+ CPU
時間(緑)で計 10 個 (※)「上位 9 個」は選択期間内における上位 9 個 ◦ 正規化した SQL(文)上位 10 個の待機イベント内訳も表示可能 ▪ SQL(文)正規化 ≠ DB(テーブル)正規化 ▪ 空白・クォート等を揃え、 パラメータを「?」に置き換え • トークン化 7
待機イベント 8
待機イベント 9 時間が掛かる処理 • ログの書き出し ◦ MySQL の場合バイナリログもある • なんらかのロック・mutex(排他制御の待ち時間)
• データの書き出し • データの読み取り(ストレージから>メモリから) • クライアントの接続
補足:RDBMS で SQL(文)を処理する流れ • パーサ・アナライザが構文解析 • オプティマイザ・プランナが実行計画を決定 ◦ 構文解析結果・実行計画をキャッシュする RDBMS
もある • エグゼキュータが実行 ◦ MySQL ではハンドラを介してデータを読み書き 10 構文解析 パーサ・アナライザ リライタなど 実行計画 オプティマイザ (プランナ) 実行 エグゼキュータ など
補足:RDBMS のデータ更新処理の流れ • トランザクション COMMIT →最初にログを書き出す ◦ WAL・Redo ログなど •
データページの更新箇所はまとめて書き出す ◦ チェックポイント処理 ▪ チェックポイントまでの間はメモリ上に変更点を保持 • Aurora の場合はチェックポイント処理を行わない ◦ ストレージノードがデータページの書き込み処理を行う 11
待機イベント [1] Aurora 独自のもの • MySQL 互換版(代表例) ◦ https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide /AuroraMySQL.Reference.html#AuroraMySQL.Reference.Waitevents
• PostgreSQL 互換版(代表例) ◦ https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide /AuroraPostgreSQL.Reference.html#AuroraPostgreSQL.Reference.Waite vents 12
待機イベント [2] MySQL • Performance Schema の Wait Event Summary
Tables ◦ 5.7 系(英語マニュアル) ▪ https://dev.mysql.com/doc/refman/5.7/en/wait-summary-tables.html ▪ https://dev.mysql.com/doc/refman/5.7/en/performance-schema-wait-tables.html ◦ 5.6 系(日本語マニュアル) ▪ https://dev.mysql.com/doc/refman/5.6/ja/wait-summary-tables.html ▪ https://dev.mysql.com/doc/refman/5.6/ja/performance-schema-wait-tables.html 13
待機イベント [3] PostgreSQL • pg_stat_activity ビューの wait_event ◦ pg_stat_activity ビュー
▪ https://www.postgresql.jp/document/12/html/monitoring-stats.html#MONITORING-STAT S-VIEWS-TABLE ◦ wait_event_type / wait_event 列 ▪ https://www.postgresql.jp/document/12/html/monitoring-stats.html#WAIT-EVENT-TABLE 14
管理コンソールで見てみる • Aurora MySQL 5.7 互換版 ◦ カウンターメトリクスを変えてみる ◦ データベースのロードのスライスを切り替えてみる
▪ 待機別のスライスから SQL 別のスライスへ ◦ トップ SQL を確認する ▪ 上位の SQL(文)からチューニングしていく • 上位 10 個まで 15
16
17
18
注意点など • 選択期間内の上位 10 個 ≠ 対象時間の上位 10 個の場合 (※)待機イベントの場合は
CPU を含めて 10 個 ◦ 一部の待機イベント・SQL(文)が漏れる ◦ 合計値が本来より低くなる ▪ 一般的なワークロードでは SQL(文)が数十種類以上になるはず • 待機別よりも SQL 別のスライスのほうが実際の合計値から乖離しやすい • 待機イベントを見てもチューニングは難しい ◦ 処理時間が掛かる SQL(文)から順にチューニングするのが王道 19
API 経由で使ってみる • API で値を取得する方法 ◦ https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/USER_PerfInsights. API.html • 今回は
Lambda Python で Boto3 低レベルクライアント (PI)を使って S3 に(正規化した)SQL(文)を転送 ◦ https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/pi.html ◦ S3 に転送したデータを Glue 経由で Athena から参照 ▪ さらに QuickSight でグラフ化 20
21 https://github.com/hmatsu47/performance_insights_to_s3 https://qiita.com/hmatsu47/items/b689db489e75836b0d7d
22
23
24
25
26
27
28
まとめ • ある程度直感的に見ることができる • 値の取り扱いには注意が必要 ◦ 待機イベントの個々の意味を知っておく必要がある ◦ 画面に表示されていない待機イベント・SQL(文)がある ▪
画面上の合計値が実際とズレている可能性がある • 特に SQL 別のスライス ◦ 待機イベントを見てもチューニングは難しい ▪ 処理時間が掛かる SQL(文)から順にチューニングするのが王道 • API をうまく活用すると良い 29