SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

直近開催のイベントはこちら!

EnterpriseZine編集部ではイベントを随時開催しております

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けの講座「EnterpriseZine Academy」や、すべてのITパーソンに向けた「新エバンジェリスト養成講座」などの講座を企画しています。EnterpriseZine編集部ならではの切り口・企画・講師セレクトで、明日を担うIT人材の育成をミッションに展開しております。

お申し込み受付中!

MySQLチューニング虎の巻

MySQL InnoDBストレージエンジンのチューニング(前編)

004


本連載では、3回にわたってチューニングの要であるオプティマイザについて説明してきた。オプティマイザは論理的な表現であるクエリを物理的にどう処理するかということを決めるRDBMSの心臓部であると言える。しかしながら、人体が心臓だけで機能しないのと同じように、RDBMSもオプティマイザだけで成り立つわけではない。実際に手足となりデータを操作するのはストレージエンジンだ。今回は、MySQLの代表的な(実質的にはデファクトスタンダードの)ストレージエンジンであるInnoDBの基本的なチューニングについて解説しようと思う。クエリのチューニングとは全くストラテジーが異なるので、これまで連載を読んで頂いている方は、ここで頭を切り替えて欲しい。

InnoDBを使おう!

 もし本稿を読まれている方で、特に明確な意味もなくまだMyISAMストレージエンジンを使ってらっしゃるという方には、全力でInnoDBをオススメしたい。InnoDBには、MyISAMにはない様々な利点があるからだ。

トランザクション対応

 InnoDBはACID準拠のトランザクションに対応している。トランザクションの利点は改めて語るまでもないが、DBAの負担を減らしてくれることは間違いない。トランザクションに対応していないストレージエンジンは、集計用の一時的な領域などには良いかも知れないが、文字通りトランザクションを処理するには無理がある。原子性がないということは、処理が失敗したらたちまちデータに不整合が生じるということだし、永続性がないということはOSやマシンのクラッシュ時にはデータが破損する可能性があるということだ。やってできなくはないが、わざわざリスクを抱えてデータベースを運用することはないだろう。(MyISAMと比べて、InnoDBを用いるとデッドロックなどでトランザクションが失敗したときのエラー処理を記述する必要が出てくる。MyISAMではエラー処理を記述しないで利用できるので一見すると楽に思えるが、実際には単に開発の負担を運用に押し付けているだけであるといえる。)

 InnoDBでは、トランザクションにおいて次のような機能を利用可能だ。

  • XAトランザクション
  • セーブポイント
  • 4つの分離レベル
    • READ-UNCOMMITTED
    • READ-COMMITTED
    • REPEATABLE-READ
    • SERIALIZABLE

高い並列性

 InnoDBはMyISAMと比べて処理の並列性が格段に高い。何故ならロックの粒度が、MyISAMではテーブル単位なのに対し、InnoDBでは行単位だからだ。しかも、MVCC(マルチ・バージョン・コンカレンシ・コントロール)により、更新と参照が競合することがない。同時実行されている他のトランザクションが行を更新した場合でも、その行への参照がブロックされることがない。

 最近ではひとつのCPUパッケージに多数のCPUコアが搭載されるようになった。InnoDBでは、コア数の多いシステムでもCPUリソースを活用できるというわけだ。

外部キー制約

 外部キー制約を用いれば、テーブルの更新処理の設計が格段に楽になる。その結果、開発の負担がかなり減るだろう。また、外部キーを使えば実行するべきクエリの回数が減るので、更新性能にも好影響が出る可能性がある。

デッドロック検出

 InnoDBにはデッドロック検出機能があるのも大きな特徴だ。そのため、2つのトランザクションがロックを取り合った結果デッドロックを起こしてしまった場合、即座にひとつのトランザクションをロールバックすることができる。デッドロック検出機能がない場合、ロックの獲得にタイムアウトを設けてデッドロックを回避することになり、その場合にはタイムアウトまで待つことになるので時間のロスが大きいのだが、InnoDBではそのような時間のロスは発生しない。厳密には完全にデッドロックを検出することが出来るわけではないのでタイムアウトを待つケースもごく稀にあるのだが、ほとんどのケースではロック待ちに陥るトランザクションを救済できる。

大きなリソースを扱える

 最近はメモリサイズの進歩にも著しいものがあり、数十GB~数百GBレベルのメモリを搭載したサーバーマシンも珍しくなくなってきた。InnoDBは、処理の並列性も高いが、メモリを有効活用するという点でも優れている。大きなデータを扱う場合には大きなバッファを割り当てて性能の向上をさせたいと思われるだろう。InnoDBならば可能だ。

圧縮

 InnoDBはテーブル内のデータ圧縮にも対応している。当然圧縮・解凍を行う分CPU消費は上昇するが、データサイズを抑えたい場合、I/Oを減らしたい場合には有効だ。

オンラインバックアップ

 バックアップはDBAにとって最大の課題のひとつだ。バックアップ中は負荷が増大になるし、MyISAMなどでは整合性のあるバックアップを採取するためにはバックアップ中は更新処理を停止しなければならない。InnoDBはmysqldumpでも--single-transactionオプションを使えばMVCC機能により、更新を妨げることなくバックアップを採取できる上、規模が大きくなればMySQL Enterprise Backupなどのツールを用いて高速にバックアップを取ることが可能だ。

次のページ
InnoDBのアーキテクチャおさらい

この記事は参考になりましたか?

  • Facebook
  • Twitter
  • Pocket
  • note
MySQLチューニング虎の巻連載記事一覧

もっと読む

この記事の著者

奥野 幹也 (オクノ ミキヤ)

日本オラクル株式会社
MySQL Global Business Unitテクニカルアナリスト

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

EnterpriseZine(エンタープライズジン)
https://enterprisezine.jp/article/detail/3820 2012/07/26 13:42

Job Board

AD

おすすめ

アクセスランキング

アクセスランキング

イベント

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング