キムラデービーブログ

オープンソースデータベースを加速する「キムラデービー」のブログです。カレー日記を兼ねてます。なお著者は2010-06-01より日本オラクルに在籍していますが、本サイト(ブログ、またはウェブサイト)において示されている見解は、私自身の見解であって、オラクルの見解を必ずしも反映したものではありません。
<< 上等カレー渋谷本店 | main | [勝手に補足]DBアタマアカデミー第1回記憶装置のトレードオフとバッファの考え方 + Firebird >>
[勝手に補足]DBアタマアカデミー第1回記憶装置のトレードオフとバッファの考え方
0
    さてみなさん、ご無沙汰の木村です。

    私は以前からデータベース各種連載を[勝手に補足]してきたのですが、どうやらミックさんの連載については
    第1回を補足していなかったみたいなので、四年たってからやっとの補足です。。。。

    幸い元記事はWEB+DB PRESSの総集編でも読めますし、以下のWeb版も読めますので、是非チェックしてみてください!

    DBアタマアカデミー

    さて、勝手に補足の時間です(Web版を元にしてます)♪雑誌記事一回分を2〜3回に分割してWeb版になってます。(今回は(1)〜(3)で(2)へのツッコミ)

    第1回 記憶装置のトレードオフとバッファの考え方―すべてをとることができないとき(1)

    特に補足ありません。。。。



    第1回 記憶装置のトレードオフとバッファの考え方―すべてをとることができないとき(2)

    # MySQL 5.5->5.6はデフォルト値が大きく変わりましたが、この比較表にでている部分については特に変更無く同じとなってます。詳しくはこちらをどうぞ。

    (1) 後だしじゃんけんですが(笑) PostgreSQL 8.5は9.0としてリリースされました。

    PostgreSQL 8.5 は 9.0 としてリリース(Let's Postgres)

    (2) MySQLにはロールフォワードリカバリ用のバイナリログがある

    OracleではREDOログはクラッシュリカバリとロールフォワードリカバリの両方で利用されますが、
    MySQL(InnoDB)のInnoDBログはクラッシュリカバリにしか利用されません。
    ロールフォワードリカバリにはInnoDBに限らず、MySQLシステム全体の仕組みとしてのバイナリログが利用されます。

    バイナリログのバッファサイズは32KB(デフォルト)です。
    MySQL 5.5以降トランザクション用のbinlog_cache_sizeと非トランザクション用のbinlog_stmt_cache_sizeで指定します。
    MySQL 5.1以前はbinlog_cache_sizeだけでした。

    MySQLではバイナリログをロールフォワードリカバリ以外に、レプリケーションでも利用します。ちと内容は古いですが、以下の記事は参考になります。

    現場指向のレプリケーション詳説

    (3) PostgreSQLでは「ログをとらない」指定がテーブル単位でできる。

    これもPostgreSQL 9.1以降なので後だしじゃんけんというか、アップデートですがUNLOGGEDテーブルというのが追加されました。

    RDS for PostgreSQL で UNLOGGED テーブルを試してみる

    (4) 本文注3)のPostgreSQLの非同期コミットと同様な指定(まったく同じではないですが)がMySQLにもある。

    MySQLではACIDを担保するために、バイナリログ用にsync_binlog, InnoDBログ用にinnodb_flush_log_at_trx_commitの指定があります。それぞれの指定により同期を緩めることが可能です。そのときのデメリットは本文注3)と同じです。

    バイナリログでACIDを担保するにはsync_binlog=1に設定する必要があります。(デフォルトは歴史的経緯から0)
    これはMySQL 5.5までは大きくパフォーマンスに影響していましたが、MySQL 5.6からは大きく改善されています。
    (実はこれだけでもMySQL 5.6にアップグレードする価値はあると思うのですが)詳しくは以下のSH2さんやDimitriKのエントリをどうぞ。

    2012-07-17 MySQL 5.6におけるsync_binlog=1の改善について&勉強会のお知らせ

    MySQL Performance: Binlog Group Commit in 5.6

    SH2さんも言及されていまが、PostgreSQLも9.2から高負荷時にグループコミットが効果的に動作するよう改善されています。

    PostgreSQL 9.2 に関する技術情報(SRA OSS)

    [2014-08-16 追記] 以下(5),(6),(7)追記いたします。あらためて見直しました。

    (5) ログ、ログバッファの説明が間違ってます。(ディスクへの更新は、あとでゆっくりやるわけではありません。。。)
     「ログバッファは更新処理(INSERT,DELETE,UPDATE)の実行に関係します。実はDBMSは,こうした更新SQLをユーザから受け取ったとき,すぐにディスク上のデータを変更しているわけではありません。一度このログバッファ上に変更情報を溜めて,ユーザに処理終了を通知してしまいます。ディスクへの更新は,あとでゆっくりとやっています(ゆっくりといっても,通常は数秒間隔ですが)。」
     この説明は(6)でも説明しますが、ログとDB本体とかごちゃまぜになっています。直すならこんな感じ?

    「ログバッファは更新処理(INSERT,DELETE,UPDATE)の実行に関係します。実はDBMSは,こうした更新SQLをユーザから受け取ったとき,すぐにディスク上のデータを変更しているわけではありません。一度このログバッファやデータキャッシュ上に変更情報を溜めて,ユーザに処理終了を通知しています。ログファイルへのディスク反映はcommit時に同期して行い,データファイルへのディスク反映はあとでゆっくりと非同期にやっています(ゆっくりといっても,通常は数秒間隔ですが)。」

    (6) メモリ→ディスクへのフラッシュ説明が、ログとDB本体とであいまいになっています。。。
    「単純にSQL実行時点でディスクを更新してしまえば簡単なのに,DBMSがそうせず,わざわざディスクの更新タイミングをずらしている理由は,これも結局パフォーマンスを良くしたいからです。」とありますが、ここではログバッファ→ログへのディスクフラッシュ、と、データキャッシュ→データのディスクフラッシュの話が混在してしまっているような印象を受けます。

     基本的にログへの反映はcommit時に必ず行われる「同期」処理がACIDを担保するためには必須です。この処理はデータファイルにランダムのread/writeを行うのに対して、ログファイルにシーケンシャルにwriteするだけですので、比較的高速に行うことができます。
     これに対して、データファイルへの反映は「非同期」処理です。非同期ですが適当なタイミングでデータキャッシュとデータファイルの同期がとられます。これをチェックポイント処理と呼びます。クラッシュした後にはチェックポイント時のデータファイルと、チェックポイント時以降のログファイルがあれば、復旧できる、という仕組みです。MySQL(Cluster含む)の説明は奥野さんの以下のブログエントリが参考になります。

    オトコのぷちトリビア - WAL

    PostgreSQLについては、鈴木さんの以下のスライドシェアが良い資料です。

    PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)

    (7) 注2)の説明がヘン
    「ログバッファを持たず,SQL実行時,ダイレクトにディスクを更新にいく方法を採用しているDBMSも,少数ですがあります。たとえば,MySQLでInnoDBエンジンを使用した場合がそうです。表1のMySQLの備考欄で「InnoDBエンジン使用時のみ有効」と限定しているのはそのためです。」とありますが、たとえば、の後はMyISAMじゃないのかなぁ。また、ここでもちょっとログとデータファイルの関係があいまいです。つまり「WAL(Write Ahead Log:ログ先行書き込み)や独自のデータキャッシュの仕組みを持たず,SQL実行時,ダイレクトにディスクを更新にいく方法を採用しているDBMSも,少数ですがあります。たとえば,MySQLでMyISAMエンジンを使用した場合がそうです。表1のMySQLの備考欄で「InnoDBエンジン使用時のみ有効」と限定しているのはそのためです。」でどうでしょう。

    第1回 記憶装置のトレードオフとバッファの考え方―すべてをとることができないとき(3)

    このパートも特に補足ありません。。。

    では、よいお盆を!!

    JUGEMテーマ:コンピュータ


    | meijik | クロスデータベース | 07:45 | comments(0) | trackbacks(0) | - | - |









    トラックバック機能は終了しました。
       1234
    567891011
    12131415161718
    19202122232425
    2627282930  
    << April 2020 >>
    + RECOMMEND
    100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊
    100人のプロが選んだソフトウェア開発の名著 君のために選んだ1冊 (JUGEMレビュー »)

    100人のうちの一人としてミックさんの本を推薦しています。
    + RECOMMEND
    MySQL 5.1 Plugin Development
    MySQL 5.1 Plugin Development (JUGEMレビュー »)
    Andrew Hutchings,Sergei Golubchik
    MySQL 5.1 のプラグインを作るならこれ!
    + RECOMMEND
    AWKを256倍使うための本 (Ascii 256倍)
    AWKを256倍使うための本 (Ascii 256倍) (JUGEMレビュー »)
    志村 拓,鷲北 賢,西村 克信
    ここにきてまさかの復刊。15〜16年前の本ですが、いまでも十分役立ちますよ!!
    + RECOMMEND
    Linux-DB システム構築/運用入門 (DB Magazine SELECTION)
    Linux-DB システム構築/運用入門 (DB Magazine SELECTION) (JUGEMレビュー »)
    松信 嘉範
    Linux-DB システム構築の新スタンダード。DB Magazine人気連載、待望の書籍化です!!
    + RECOMMEND
    + RECOMMEND
    超・極める!MySQL
    超・極める!MySQL (JUGEMレビュー »)
    坂井 恵,志村 和彦,ひろせ まさあき,松信 嘉範
    内容は少々古くなりましたが、内部説明があり、いろいろ面白いです。
    + RECOMMEND
    The Root of .NET Framework
    The Root of .NET Framework (JUGEMレビュー »)
    荒井 省三
    .NETの根っこをつかむ、か?
    + RECOMMEND
    エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド
    エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド (JUGEMレビュー »)
    奥野 幹也
    これまでにない構築、そして構築後のMySQLのための本。
    + RECOMMEND
    Database Management Systems
    Database Management Systems (JUGEMレビュー »)
    Raghu Ramakrishnan,Johannes Gehrke
    ミックさん連載の参考書籍です。
    + RECOMMEND
    Advanced Programming in the UNIX Environment: Paperback Edition (2nd Edition) (Addison-Wesley Professional Computing Series)
    Advanced Programming in the UNIX Environment: Paperback Edition (2nd Edition) (Addison-Wesley Professional Computing Series) (JUGEMレビュー »)
    W. Richard Stevens,Stephen A. Rago
    必読! といいつつ私が読んだのは初版の日本語訳です。差分はチェックしないといけませんね。
    + RECOMMEND
    + RECOMMEND
    + RECOMMEND
    Western Digital Scorpio Blue 2.5inch 5400rpm 320GB 8MB PATA WD3200BEVE
    Western Digital Scorpio Blue 2.5inch 5400rpm 320GB 8MB PATA WD3200BEVE (JUGEMレビュー »)

    DELL SX260の換装用に購入。今はコチラのほうが安いですね。
    + RECOMMEND
    情熱プログラマー ソフトウェア開発者の幸せな生き方
    情熱プログラマー ソフトウェア開発者の幸せな生き方 (JUGEMレビュー »)
    Chad Fowler
    OSC2010神戸に出展されたジュンク堂で買いました。
    + RECOMMEND
    Software Design 総集編 【2000~2009】(DVD付)
    Software Design 総集編 【2000~2009】(DVD付) (JUGEMレビュー »)

    メガトン級の過去記事。売り切れる前にお店に急げ!
    + RECOMMEND
    + RECOMMEND
    玄人志向 2.5型HDDケース SATA対応USB2.0接続 GW2.5AI-SU2
    玄人志向 2.5型HDDケース SATA対応USB2.0接続 GW2.5AI-SU2 (JUGEMレビュー »)

    Aspire 1410 HDD換装後、昔のHDDはこれにいれます。
    + RECOMMEND
    + RECOMMEND
    acer Aspire Timeline AS1410 11.6型ノートPC Windows7搭載 250GB ブラック AS1410-KK22
    acer Aspire Timeline AS1410 11.6型ノートPC Windows7搭載 250GB ブラック AS1410-KK22 (JUGEMレビュー »)

    色違い黒(他に青と白があります): メモリは最大4GBとあるが、がんばれば8GBいけるらしい。
    + RECOMMEND
    Firebird 徹底入門
    Firebird 徹底入門 (JUGEMレビュー »)
    木村 明治,はやし つとむ,坂井 恵
    Firebird日本ユーザ会のはやしさん、そしてMyNAから拝借(?) してきた坂井さんとともに書きました。まだ誰も知らないFirebird 2.5や、いままでドキュメントのなかったツール類についてもソースを確認してとりあげた本です。是非ご活用ください。
    + SELECTED ENTRIES
    + RECENT COMMENTS
    • たまたま「プリントヘッドの種類が違います」エラーから復活@MG6230
      meijik (11/20)
    • [ミュージシャンに聴かせたい・弾かせたい!] (4) 山田元気様
      meijik (07/27)
    • 毎月日経SYSTEMSが届くたびに?が増え続ける: 日経SYSTEMSのコラム「ITアーキテクチャーの真髄」と「第7正規化」
      meijik (03/03)
    • 2019年の木村明治
      田中尚 (01/08)
    • 使い慣れたSQLに潜む実装依存: Firebirdの場合(6) 文字列との結合演算子
      noname (12/10)
    • 毎月日経SYSTEMSが届くたびに?が増え続ける: 日経SYSTEMSのコラム「ITアーキテクチャーの真髄」と「第7正規化」
      Moriaki_ (01/05)
    • 毎月日経SYSTEMSが届くたびに?が増え続ける: 日経SYSTEMSのコラム「ITアーキテクチャーの真髄」と「第7正規化」
      Moriaki_ (01/05)
    • 2015年版 InterBaseの歩み
      nakagami (12/06)
    • 毎月日経SYSTEMSが届くたびに?が増え続ける: 日経SYSTEMSのコラム「ITアーキテクチャーの真髄」と「第7正規化」
      meijik (11/22)
    • 分散DB本読書会第46回メモ「STOP AFTER 10」
      masudahidehiko (09/01)
    + RECENT TRACKBACK
    + CATEGORIES
    + ARCHIVES
    + MOBILE
    qrcode
    + LINKS
    + PROFILE