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