データベース構造劣化による OLTP性能低下に関する 一考察 [20070228-hoshino] DEWS2007 E2-7 データベース構造劣化によるOLTP性能低下に関する一考察 データベース構造劣化による OLTP性能低下に関する 一考察 東京大学 星野 喬、合田 和生、喜連川 優 2007年2月28日
概要 背景と目的 MySQLにおけるTPC-Cベンチマーク構造劣化分析 アクセスパタンに適応的な構造劣化抑制戦略の検討 まとめ [20070228-hoshino] DEWS2007 E2-7 データベース構造劣化によるOLTP性能低下に関する一考察 概要 背景と目的 MySQLにおけるTPC-Cベンチマーク構造劣化分析 アクセスパタンに適応的な構造劣化抑制戦略の検討 まとめ
背景と目的 背景 構造劣化に対する2つの補完的なアプローチ 目的 OLTPは基幹系業務で不可欠な処理方式 [20070228-hoshino] DEWS2007 E2-7 データベース構造劣化によるOLTP性能低下に関する一考察 背景と目的 背景 OLTPは基幹系業務で不可欠な処理方式 データベースシステムの常時運用ニーズの高まり データベース更新データベース構造劣化 アクセス性能低下 B+Tree構造においては 充填率低下、クラスタ化度低下、木の高さ増大、など 構造劣化に対する2つの補完的なアプローチ (従来): 再編成によって性能を回復させるアプローチ (提案): 構造劣化の進行を抑制することで性能低下を遅らせるアプローチ 目的 OLTP性能を低下させる構造劣化の分析 構造劣化の進行を抑制するデータ更新戦略の検討
TPC-Cベンチマーク TPC によるOLTPベンチマークのデファクトスタンダード 卸売会社におけるオンライントランザクションをシミュレート [20070228-hoshino] DEWS2007 E2-7 データベース構造劣化によるOLTP性能低下に関する一考察 TPC-Cベンチマーク TPC によるOLTPベンチマークのデファクトスタンダード 卸売会社におけるオンライントランザクションをシミュレート New-order(注文) Payment(支払) Delivery(配達) Order-status(注文確認) Stock-level(在庫確認) Entity-Relationshipダイアグラム
TPC-Cトランザクションの表アクセス一覧 [20070228-hoshino] DEWS2007 E2-7 データベース構造劣化によるOLTP性能低下に関する一考察 TPC-Cトランザクションの表アクセス一覧 Table Trn Ware- house District Custo- mer Order Order- line New- order Item Stock History New- Order Select Select Select Select Select Insert Insert Insert Update Update Payment Select Select Select Insert Update Update Update Order- status Select Select Select Delivery Select Select Select Delete Update Update Update Stock- level Select Select Select
実験設定 使用ソフトウェア設定 データベースシステム TPC-Cデータ OLTP負荷 トランザクション実行比率 [20070228-hoshino] DEWS2007 E2-7 データベース構造劣化によるOLTP性能低下に関する一考察 実験設定 使用ソフトウェア設定 MySQL ver. 5.0.22-mon Database Engine InnoDB Buffer cache size 16MB OS ver. Redhat Linux WS3.0 Kernel ver. 2.4.21-40.EL.smp Benchmark TPC-C rev.5.6 データベースシステム MySQL InnoDB v5.0 クラスタ表(B+Tree)を用いて表を作成 TPC-Cデータ 4GBの表空間をrawデバイス上に確保 TPC-Cウェアハウス数16 初期ロード後使用空間約1.6GB OLTP負荷 アクティブウェアハウス数16 ウェアハウス辺り5スレッドにて並列実行 各スレッドは確率的に トランザクションを選択 10万トランザクション実行 トランザクション実行比率
実験環境 Fibre Channel Switch (1Gbps) 1 3 2 4 Xeon 3.2GHz x2 2GB Memory [20070228-hoshino] DEWS2007 E2-7 データベース構造劣化によるOLTP性能低下に関する一考察 実験環境 Xeon 3.2GHz x2 2GB Memory Fibre Channel Switch (1Gbps) 1 3 Emulex LP8000 (1GbpsFC) x2 via two PCI-X 133MHz bus Firmware version: 3.93a0 Driver version: 7.3.6 2 4 Seagate Cheetah Model: ST318203FC Spec: 18GB 10000rpm SoftwareRAID0: 4disks, 64kb chunk
トランザクション応答時間分析 New-order Payment Order-status Delivery Stock-level [20070228-hoshino] DEWS2007 E2-7 データベース構造劣化によるOLTP性能低下に関する一考察 トランザクション応答時間分析 warehouse, district warehouse, district New-order Payment Order-status 先に実行されるSQL(群) が棒グラフの下 (Deliveryに関しては ループ内の結果を合計) Order表アクセス性能 低下を確認 (Buffer cache 16MB) Delivery Stock-level
充填率低下による性能低下 Order表に対するアクセス 充填率低下によるIO数増加 New-Orderがinsert [20070228-hoshino] DEWS2007 E2-7 データベース構造劣化によるOLTP性能低下に関する一考察 充填率低下による性能低下 Order表に対するアクセス New-Orderがinsert order id順 Deliveryがselect, update new_order表に存在している分だけNew-Orderよりも遅れて実施 充填率低下によるIO数増加 初期ロード時のOrder表の充填率はほぼ1 New-Orderによるinsertデータは充填率が低下(page splitにより約1/2) 一連のDeliveryはクラスタ鍵順にOrder表にアクセスするため、トランザクションあたりに読み込まなければならないページ数が増大 IOPS増大 Order表のデータページ データ量は同じ、ページ数は倍
Order表の充填率 連番アクセスでIO数2倍 (w_id,d_id)=(1,1) (1,2) … [20070228-hoshino] DEWS2007 E2-7 データベース構造劣化によるOLTP性能低下に関する一考察 Order表の充填率 連番アクセスでIO数2倍 (w_id,d_id)=(1,1) (1,2) … Order表のクラスタ鍵(w_id, d_id, o_id) 表空間は実験1のloop5直前のもの
実験設定 使用ソフトウェア設定 表、索引毎にIOPSを取得するように MySQLを修正 トランザクション実行比率 データ トランザクション [20070228-hoshino] DEWS2007 E2-7 データベース構造劣化によるOLTP性能低下に関する一考察 実験設定 使用ソフトウェア設定 MySQL ver. 5.0.22-mon Database Engine InnoDB Buffer cache size 4MB~96MB OS ver. Redhat Linux WS3.0 Kernel ver. 2.4.21-40.EL.smp Benchmark TPC-C rev.5.6 データ 4GBの表空間をrawデバイス上に確保 TPC-Cウェアハウス数16 初期ロード後使用空間約1.6GB トランザクション アクティブウェアハウス数16 ウェアハウス辺り5スレッドにて並列実行 各スレッドは確率的に トランザクションを選択 計10万トランザクション実行 パラメータ データ更新するトランザクションのみ選択 バッファサイズを変化させてIOPSを測定 表、索引毎にIOPSを取得するように MySQLを修正 トランザクション実行比率 実験ID: RES.clst.wi.W16.B*M.trn6.auto4
各表、索引におけるIOPS order表の変化が顕著 :充填率低下によるIO増加 Buffer cache 4MB 8MB 16MB [20070228-hoshino] DEWS2007 E2-7 データベース構造劣化によるOLTP性能低下に関する一考察 各表、索引におけるIOPS order表の変化が顕著 :充填率低下によるIO増加 Buffer cache 4MB 8MB 16MB 32MB 64MB 96MB
考察 充填率低下によるOrder表アクセスのIOPS増加を確認 構造劣化によるOLTP性能低下 [20070228-hoshino] DEWS2007 E2-7 データベース構造劣化によるOLTP性能低下に関する一考察 考察 充填率低下によるOrder表アクセスのIOPS増加を確認 バッファキャッシュが小さいときのみIOPS増加を観測 バッファキャッシュが十分大きいときは、New-OrderでinsertされたデータがDeliveryでアクセスされるまでキャッシュから追い出されないため、IOが増えないと思われる 鍵値に対してシーケンシャルアクセス 一連のトランザクションがクラスタ鍵順にデータを挿入、参照、更新 構造劣化によるOLTP性能低下 1トランザクションだけ見ていてもアクセスするデータが少ないケースがほとんどであるため、構造劣化とは関係ないように当初は思われた クラスタ化度低下は起きているが、OLTP性能低下への影響は観測されず 一連のトランザクションがデータ配置と特定の相関を持つとき、構造劣化に起因する性能低下がトランザクション処理においても観測される 特定領域の充填率低下 特定領域にトランザクションが集中 バッファキャッシュが少ない場合、IO増加によりトランザクションあたりのレスポンスタイム増加
B+TreeのPage split における 充填率調整 [20070228-hoshino] DEWS2007 E2-7 データベース構造劣化によるOLTP性能低下に関する一考察 B+TreeのPage split における 充填率調整 従来(InnoDB)の戦略 検知: ページ内で最大鍵値レコードが連続して起きている場合、シーケンシャルインサートだと判断 戦略: split時にシーケンシャルインサートと見なせるときは15/16:1/16で分割 データロード時に有効 問題点 複合鍵のクラスタ表においては、B+Treeの途中においてもシーケンシャルインサートが起き得る 現在のMySQL InnoDBではそれを検知できずに、通常の1/2:1/2分割を実行してしまう insert 目標充填率94% 目標充填率50%
B+TreeのPage split における 充填率調整 –cont. [20070228-hoshino] DEWS2007 E2-7 データベース構造劣化によるOLTP性能低下に関する一考察 B+TreeのPage split における 充填率調整 –cont. シーケンシャルインサート中のレコードよりも大きい鍵値を持つレコード集合 シーケンシャルインサート中のレコードよりも小さい鍵値を持つレコード集合 insert 対処法 検知: ページに対して、最後に挿入された鍵値を保持し、次の挿入がページ内で連続した鍵値のレコードだったら、シーケンシャルアクセスであると判断 戦略: split時にシーケンシャルアクセスを検知した場合、挿入行よりも鍵値が大きいレコードは新ページに分配し、そのようなレコードがない場合は任意の充填率で分配 利点 目標充填率をアクセスパタンによって変更することで充填率低下を抑制可能 expected next insert insert
今後の予定 アクセスパタンと構造変化との定量的な関係を評価 アクセスパタンのモデル化と、その観測手法の確立 [20070228-hoshino] DEWS2007 E2-7 データベース構造劣化によるOLTP性能低下に関する一考察 今後の予定 アクセスパタンと構造変化との定量的な関係を評価 シーケンシャルアクセス比率と構造変化量の関係 データ増加量と構造変化量の関係 アクセスパタンのモデル化と、その観測手法の確立 充填率調整手法におけるトレードオフの考察、評価 データ更新(insert, delete, update)時のオーバーヘッド 構造劣化の抑制効果 再編成戦略も含めてどのような戦略が良いかを検討