ikemonn's blog

技術ネタをちょこちょこと

A Top-Down Approach to Achieving Performance Predictability in Database Systems を読んだ

A Top-Down Approach to Achieving Performance Predictability in Database Systemsを読んだ時のメモ。

どんなもの?

  • DBのlatencyのバラ付きの主要な原因を特定するためにTprofiler(解析ツール)を作成しバラ付きを少なくした
    • MySQL, Postgres, VoltDBのバラ付きの原因を調べた
      • Tprofilerを使えば複雑なコードベースでも解析できる
      • 各DBでパフォーマンスとlatencyのばらつきが少なくなった

先行研究とくらべて何がすごい?

技術や手法の肝は?

  • Tprofiler
    • Dtrace等の既存のツールはトランザクションシステムのパフォーマンスのバラ付きの根本原因の特定には向いていない
      • 原因は子の関数よりも親の関数側にあることが多いが、原因を特定するための情報が少ない
  • Overview
    • Tprofilerはパフォーマンスのバラ付きが大きい関数をランキング形式で教えてくれる
    • 下記の2つがある
      • online trace collection
      • offline variance analysis
    • トランザクションの開始終了をコード側でAPIを叩いて指定する
  • Characterizing Execution Variance

    • トランザクション内での特定の関数のdulationを比較する
    • variance treeというlantecyのバラ付きの関係を表してたtreeを作る
      • 特定の関数のcall hierachyを表す f:id:ikemonn:20170730215151p:plain
  • Latency Variance in MySQL

    • os_event_wait()というlockに関する関数がlatencyのバラ付きの原因になっていた f:id:ikemonn:20170730215212p:plain
  • Latency Variance in Postgres

f:id:ikemonn:20170730215223p:plain

  • Variance-aware trancaction scheduling
    • Tprofilerによるとlocak wait timeがlantecyのバラ付きの原因
    • lock scheduling algorithmを変更する
    • Problem setting
      • 一般的なDBはconcurrency controlのための2-PLが原因でlatencyのバラ付きが起こる
      • 一般的なトランザクションスケジューリングはFCFS
        • 一番早いトランザクションがlockを獲得する
          • current queueに一番長くいるものからlockを獲得していく
          • これがlantecyの平均値を最小化しないだけでなく、latencyのバラ付きの原因になっている
      • トランザクションがどれくらいキューにいるかを考慮せずにtransaction scheduleをおこなう
        • トランザクションがキューにつまれたときに、そのageのみを考慮して、いつ終了するかやlockを開放するかについては知らない
  • Additional Strategies
    • LLU
      • MySQLはLRUの際に、LRU listの並び替えに時間がかかっていた
      • Lasy LRU Updateによってロックの時間を短くした
        • mutexをやめて、wait timeを管理することにした
    • Parallel Logging
      • Postgresはredo logをflushする処理に時間がかかっていたので、parallelに書き込むようにした

どうやって有効と検証した?

  • 下記を検証した
    • どれくらい効率的になったか
    • latencyやスループットの平均値を犠牲にして、latencyのバラ付きを無くすことに価値はあるのか
    • Tprofilerが既存のプロファイラに比べてどのくらい効率的で効果的に解析を行えるか
  • 結果
    • VATSはスループットを犠牲にすること無く、ばらつきを少なくし、更に速くなった
    • LLUはMySQLを下記のように改善
      • ばらつきは1.2倍改善
      • latencyは1.4倍改善
    • Parallel LoggingはPostgresを下記のように改善
      • ばらつきは1.3倍改善
      • latencyは1.8倍改善
    • TprofilerはDtraceにくらべて解析のオーバーヘッドが少なかった  

f:id:ikemonn:20170730215246p:plain