MySQL 5.1 リファレンスマニュアル :: 13 ストレージエンジンとテーブルタイプ :: 13.5 InnoDB ストレージ エンジン :: 13.5.3 InnoDB 設定
« 13.5.2 InnoDB 連絡先情報

13.5.3.1 Per-Table テーブルスペースを利用する »
Section Navigation      [Toggle]
  • 13.5 InnoDB ストレージ エンジン
  • 13.5.1 InnoDB 概要
  • 13.5.2 InnoDB 連絡先情報
  • 13.5.3 InnoDB 設定
    • 13.5.3.1 Per-Table テーブルスペースを利用する
    • 13.5.3.2 共有テーブルスペースに未加工デバイスを利用する
  • 13.5.4 InnoDB 起動オプションとシステム変数
  • 13.5.5 InnoDB テーブルスペースを作成する
  • 13.5.6 InnoDB テーブルの作成と利用
  • 13.5.7 InnoDB データとログ ファイルの追加と削除
  • 13.5.8 InnoDB データベースのバックアップと復旧
  • 13.5.9 InnoDB データベースを別のマシンに移動する
  • 13.5.10 InnoDB トランザクション モデルとロック
  • 13.5.11 InnoDB パフォーマンス チューニング ヒント
  • 13.5.12 マルチバージョンの実装
  • 13.5.13 InnoDB テーブルとインデックス構造
  • 13.5.14 InnoDB ファイル領域の管理とディスク I/O
  • 13.5.15 InnoDB エラー処理
  • 13.5.16 InnoDB テーブル上の制約
  • 13.5.17 InnoDB トラブルシューティング

13.5.3. InnoDB 設定

[+/-]

13.5.3.1. Per-Table テーブルスペースを利用する
13.5.3.2. 共有テーブルスペースに未加工デバイスを利用する

InnoDB ストレージ エンジンはデフォルトにて有効になっています。もし InnoDB テーブルを利用したくなければ、お使いの MySQL オプション ファイルに skip-innodb オプションを追加する事ができます。

注意:InnoDB は MySQL に、コミット、ロールバック、クラッシュ復旧機能を持つトランザクション セーフ(ACID 適合)ストレージ エンジンを提供します。しかし、もし基礎となる OS やハードウェアが広告どおりに機能しなければ、それを行う事はできません。多くの OS やディスク サブ システムが、性能を向上させる為に書き込み操作を遅らせたり再オーダしたりするでしょう。いくつかの OS 上で、ファイルの全ての未書き込みデータがフラッシュされるまで待つ必要があるそのシステムコール、— fsync() — は、実際にデータが安定したストレージにフラッシュされる前に返されます。この為、OS のクラッシュや停電によって最近コミットされたデータが破損したり、さらに最悪の場合、書き込み操作が再オーダされた為にデータベースが破損する事もありますもしデータの整合性が重要であるなら、製造で何かを利用する前に 「pull-the-plug」 テストを行うべきです。Mac OS X 10.3 以降のバージョンでは、InnoDB は特別な fcntl() ファイル フラッシュ法を利用します。Linux 下では、ライト バック キャッシュを無効にする 事をお勧めします。

ATAPI ハードディスク上では、hdparm -W0 /dev/hda のようなコマンドがライト バック キャッシュを無効にする働きをします。いくつかのドライブやディスク コントローラでは、ライト バック キャッシュを無効にできない可能性が有るので注意してください。

InnoDB ストレージ エンジンによって管理されている2つの重要なディスク ベース リソースは、そのテーブルスペース データ ファイルとログ ファイルです。

注意:もし InnoDB 設定オプションを全く指定しなければ、MySQL は MySQL データ ディレクトリ内に、ibdata1 という名前の 10MB の自動延長データ ファイルと、ib_logfile0 と ib_logfile1 という名前の 5MB のログ ファイルを作成します。高性能を得るには、次の例にあるように InnoDB パラメータを明示的に提供する必要があります。当然ながら、お使いのハードウェアとその要求に合うように、設定を編集する必要があります。

MySQL Enterprise.  ご自分専用の環境に適応する設定に関するアドバイスの為に、MySQL ネットワーク モニタリングとアドバイス サービスの購読をお勧めします。追加情報については http://www-jp.mysql.com/products/enterprise/advisors.html を参照してください。

ここに表されている例は代表的な物です。InnoDB に関連した設定パラメータに関する追加情報は、項13.5.4. 「InnoDB 起動オプションとシステム変数」を参照してください。

InnoDB テーブルスペース ファイルを設定する為には、my.cnf オプション ファイルの [mysqld] セクション内の innodb_data_file_path オプションを利用してください。Windows 上では、代わりに my.ini を利用する事ができます。innodb_data_file_path の値は、1つまたは複数のデータ ファイル仕様のリストでなければいけません。複数のデータ ファイルに名前を付けたら、セミコロン文字(‘;’)でそれらを区切ってください:

innodb_data_file_path=datafile_spec1[;datafile_spec2]...

例えば、デフォルトと同じ特徴を持つテーブル スペースを明示的に作成する設定は、次のようになります:

[mysqld]
innodb_data_file_path=ibdata1:10M:autoextend

この設定は、ibdata1 と名づけられた自動延長の単一10MB データ ファイルを構成します。そのファイルの場所は指定されない為、InnoDB がデフォルトでそれを MySQL データ ディレクトリ内に作成します。

MB か GB の単位を指定する為に、M か G のサフィックス文字を利用してサイズが指定されます。

データ ディレクトリ内で、ibdata1 と名づけられた固定サイズ50MB のデータ ファイルと、ibdata2 と名づけられた50MBの自動拡大ファイルを含むテーブル スペースは、次のように設定されます:

[mysqld]
innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend

データ ファイル仕様の完全構文は、ファイル名、そのサイズ、そしていくつかの任意の属性を含んでいます:

file_name:file_size[:autoextend[:max:max_file_size]]

autoextend 属性やそれらに続く物は、innodb_data_file_path ライン内の最後のデータ ファイルにのみ利用できます。

最後のデータ ファイルに autoextend オプションを指定すると、InnoDB はもしテーブルスペースの中に空き領域がなければデータ ファイルを拡大します。デフォルトで、インクリメントは一回に付き8MB となっています。それは innodb_autoextend_increment システム変数を変更する事で修正できます。

もしディスクがいっぱいになると、別のディスク上に別のデータ ファイルを追加したくなるでしょう。項13.5.7. 「InnoDB データとログ ファイルの追加と削除」 に既存のテーブル スペースの再設定に関する説明があります。

InnoDB にはファイル システムの最大サイズが分からないので、それが 2GB のような小さい値の場合は注意してください。自動拡大データ ファイルの最大サイズを指定するには、max 属性を利用してください。次の設定は、ibdata1 が最大500MB まで大きくなる事を許容します:

[mysqld]
innodb_data_file_path=ibdata1:10M:autoextend:max:500M

InnoDB はデフォルトで MySQL データ ディレクトリ内にテーブルスペース ファイルを作成します。場所を明示的に指定するには、innodb_data_home_dir オプションを利用してください。例えば、ibdata1 と ibdata2 と名づけられた2つのファイルを、/ibdata ディレクトリ内で作成して利用するには、InnoDB をこのように設定してください:

[mysqld]
innodb_data_home_dir = /ibdata
innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend

注意:InnoDB はディレクトリを作成しないので、サーバを起動する前に必ず /ibdata ディレクトリが存在する事を確認してください。これは、ご自分が設定する別のログ ファイルにも全て当てはまります。必要なディレクトリを作成する為に、Unix か DOS mkdir コマンドを利用してください。

InnoDB は innodb_data_home_dir の値を原文どおりにデータ ファイル名に連結させ、必要に応じてパス名セパレータ(スラッシュまたはバックスラッシュ)を値の間に追加して、各データ ファイルのディレクトリ パスを形作ります。 もし innodb_data_home_dir オプションについて my.cnf 内で全く触れられなければ、MySQL データ ディレクトリを意味する 「dot」 directory ./ がデフォルト値になります。 (MySQL サーバは、実行を始める時にその時起動しているディレクトリを、それ自体のデータ ディレクトリに変更します。)

もし innodb_data_home_dir を空の文字列として指定すれば、innodb_data_file_path 値内にリストされたデータ ファイルに完全なパスを指定する事ができます。次の例は、前出の物と同等です:

[mysqld]
innodb_data_home_dir =
innodb_data_file_path=/ibdata/ibdata1:50M;/ibdata/ibdata2:50M:autoextend

シンプルなmy.cnf 例。128MB RAM とハードディスクが1つあるコンピュータを持っていると仮定してください。 次の例は、autoextend 属性を含む、InnoDB の為の my.cnf か、 my.ini 内で可能な設定パラメータを表しています。この例は、InnoDB データ ファイルとログ ファイルをいくつかのディスクに分散する事を希望しない、Unix と Windows 両方のほとんどのユーザに適しています。これは、MySQL データ ディレクトリ内に、自動拡大データ ファイル ibdata1 と、2つの InnoDB ログ ファイル ib_logfile0 と ib_logfile1 を作成します。

[mysqld]
# You can write your other MySQL server options here
# ...
# Data files must be able to hold your data and indexes.
# Make sure that you have enough free disk space.
innodb_data_file_path = ibdata1:10M:autoextend
#
# Set buffer pool size to 50-80% of your computer's memory
innodb_buffer_pool_size=70M
innodb_additional_mem_pool_size=10M
#
# Set the log file size to about 25% of the buffer pool size
innodb_log_file_size=20M
innodb_log_buffer_size=8M
#
innodb_flush_log_at_trx_commit=1

MySQL サーバがデータ ディレクトリ内にファイルを作成する為の正当なアクセス権を持っている事を確認してください。さらに一般的には、サーバはデータ ファイルとログ ファイルを作成しなければいけないディレクトリ内にアクセス権を持っている必要があります。

データ ファイルはいくつかのファイル システム内で 2GB 以下でなければいけない事に注意してください。結合したログ ファイルのサイズは 4GB 以下でなければいけません。結合したデータ ファイルのサイズは最低 10MB でなければいけません。

InnoDB テーブルスペースを初めて作成する時は、MySQL サーバをコマンド プロンプトから起動するのが一番良い方法です。その時 InnoDB はデータベース作成に関する情報をスクリーンにプリントする事ができる為、何が起こっているかを知る事ができるのです。例えば、もし Windows 上で mysqld が C:\Program Files\MySQL\MySQL Server 5.1\bin 内にあったら、次ように起動する事ができます:

C:\> "C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqld" --console

もしスクリーンにサーバ アウトプットを送らないなら、InnoDB がスタートアップ作業の最中に何をプリントするのかを確認する為にサーバのエラー ログを確認してください。

InnoDB によって表示される情報の例については、項13.5.5. 「InnoDB テーブルスペースを作成する」 を参照してください。

サーバが起動した時に読み込むオプション ファイルの [mysqld] グループ内にある InnoDB オプションをおく事ができます。オプション ファイルの場所に関しては、項3.3.2. 「オプションファイルの使用」 で紹介されています。

もし MySQL をインストールと設定ウィザードを利用して Windows 上にインストールしたら、そのオプション ファイルはお使いの MySQL インストール ディレクトリ内の my.ini ファイルになります。詳しくは 項2.3.4.14. 「my.ini ファイルのロケーション」 を参照してください。

もしお使いの PC が、C: ドライブがブート ドライブではないブート ローダを利用していたら、残されたオプションは Windows ディレクトリ(通常 C:\WINDOWS か C:\WINNT)内の my.ini ファイルを利用する事だけです。WINDIR の値をプリントするには、コンソール ウィンドウ内のコマンド プロンプトで SET コマンドを利用する事ができます:

C:\> SET WINDIR
windir=C:\WINDOWS

mysqld が特定のファイルからだけオプションを読み込むようにしたいのであれば、サーバを起動する時 --defaults-file オプションをコマンド ラインの最初のオプションとして利用する事ができます:

mysqld --defaults-file=your_path_to_my_cnf

進歩した my.cnf 例。ディレクトリ パス /、/dr2 そして /dr3 に 2GB RAM と3つの 60GB ハード ディスクを持つ Linux コンピュータを持っていると仮定してください。 次の例は、InnoDB の my.cnf 内で可能な設定パラメータを表しています。

[mysqld]
# You can write your other MySQL server options here
# ...
innodb_data_home_dir =
#
# Data files must be able to hold your data and indexes
innodb_data_file_path = /db/ibdata1:2000M;/dr2/db/ibdata2:2000M:autoextend
#
# Set buffer pool size to 50-80% of your computer's memory,
# but make sure on Linux x86 total memory usage is < 2GB
innodb_buffer_pool_size=1G
innodb_additional_mem_pool_size=20M
innodb_log_group_home_dir = /dr3/iblogs
#
innodb_log_files_in_group = 2
#
# Set the log file size to about 25% of the buffer pool size
innodb_log_file_size=250M
innodb_log_buffer_size=8M
#
innodb_flush_log_at_trx_commit=1
innodb_lock_wait_timeout=50
#
# Uncomment the next lines if you want to use them
#innodb_thread_concurrency=5

場合によっては、もし全てのデータが同じディスク上に置かれていなければ、データベース性能が向上します。 ログ ファイルをデータとは別のディスク上に置く事で、性能が向上する事が多いです。どのようにするかを例で説明しています。.これは、2つのデータ ファイルを別々のディスクに、そしてログ ファイルを3つ目のディスクにおきます。InnoDB は最初のデータ ファイルを先に利用してテーブル スペースを埋めていきます。InnoDB データ ファイルとして、未加工ディスク パーティション(未加工デバイス)を利用する事ができ、そのおかげで I/O のスピードが向上します。項13.5.3.2. 「共有テーブルスペースに未加工デバイスを利用する」 を参照してください。

警告: 32-bit GNU/Linux x86 上では、メモリ使用を高く設定しすぎないように注意してください。glibc はプロセス ヒープがスレッド スタックよりも大きくなる事を許容する可能性があり、その為サーバがクラッシュしてしまうかもしれません。もし次の式の値が2GB に近い、またはそれを上回っていたら危険です:

innodb_buffer_pool_size
+ key_buffer_size
+ max_connections*(sort_buffer_size+read_buffer_size+binlog_cache_size)
+ max_connections*2MB

各スレッドはスタック(通常2MB ですが、MySQL AB バイナリ内ではたったの256KB)を利用し、そして最悪の場合、sort_buffer_size + read_buffer_size 追加メモリも利用します。

MySQL をご自分でコンパイルする事により、32ビット Windows 内で最高 64GB の物理メモリを利用する事ができます。項13.5.4. 「InnoDB 起動オプションとシステム変数」 内の innodb_buffer_pool_awe_mem_mb に関する説明を参照してください。

別の mysqld サーバ パラメータはどのように調整するのでしょう?次の値は典型的な物であり、ほとんどのユーザに適応しています:

[mysqld]
skip-external-locking
max_connections=200
read_buffer_size=1M
sort_buffer_size=1M
#
# Set key_buffer to 5 - 50% of your RAM depending on how much
# you use MyISAM tables, but keep key_buffer_size + InnoDB
# buffer pool size < 80% of your RAM
key_buffer_size=value
Copyright © 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates