BDB
ストレージエンジンは、トランザクションをロールバックできるようにログファイルを保持している。パフォーマンスを最大限に高めるには、--bdb-logdir
オプションを使ってこれらのログファイルをデータベースとは別のディスクに配置する必要がある。
MySQL は、新しい BDB
ログファイルが開始されるたびにチェックポイントを実行し、現在のトランザクションに不要なログファイルを削除する。FLUSH
LOGS
を任意の時点で実行して、Berkeley
DB
テーブルをチェックポイントすることもできる。
障害リカバリには、テーブルバックアップおよび MySQL のバイナリログを使用する必要がある。 See 項4.5.1. 「データベースのバックアップ」。
警告:
使用中の古いログファイルを削除すると、問題が発生した場合に
BDB
がリカバリを実行できなくなり、データが失われるおそれがある。
MySQL
は、前に読み取られたレコードを参照できるように、各
BDB
テーブルに主キー
を必要とする。ユーザがこのキーを作成しない場合は、MySQL
によって隠し主キー
が作成され、管理される。この隠しキーは長さが
5
バイトで、挿入が試行されるたびにインクリメントされる。
BDB
テーブルでアクセスするすべてのカラムが、同じインデックスの一部または主キーの一部であれば、MySQL
は実際のレコードにアクセスすることなくクエリを実行できる。MyISAM
テーブルでは、カラムが同じインデックスの一部である場合のみこれが当てはまる。
主キー
は、ローデータと共に格納されるため、他のどのキーよりも速く処理される。他のキーはキーデータ
+
主キー
として格納されるため、主キー
はできるだけ短くしてディスクを節約し、処理速度を高めることが重要である。
LOCK TABLES
は、他のテーブルと同様に BDB
テーブルでも動作する。LOCK
TABLE
を使用しない場合は、MySQL
によってテーブルに対する内部的な複数書き込みのロックが発行され、別のスレッドがテーブルロックを発行した場合にテーブルが適切にロックされるようになる。
BDB
テーブルでの内部ロックは、ページレベルで行われる。
BDB
テーブルではテーブル内のレコード数のカウントが管理されないため、SELECT
COUNT(*) FROM table_name
に時間がかかる。
BDB
テーブルのデータは、独立したデータファイルではなく
B
ツリーに格納されるため、順次スキャンには
MyISAM
テーブルよりも時間がかかる。
アプリケーションでは、BDB
テーブルの変更で発生する自動ロールバックおよびデッドロックエラーを伴う読み取りの失敗にいつでも対処できるようにしておく必要がある。
MyISAM
テーブルのキーとは異なり、キーのプリフィックスまたはサフィックスは圧縮されない。つまり、BDB
テーブルでは MyISAM
テーブルに比べてキー情報の領域が若干大きい。
BDB
テーブルには、多くの場合、キーツリーの途中で新たなレコードを挿入できるようにすき間が空いている。このため、BDB
テーブルは MyISAM
テーブルよりも若干大きくなる。
オプティマイザには、テーブル内のおおよそのレコード数を通知する必要がある。MySQL
は、挿入の回数をカウントし、その数値を
BDB
テーブル内の独立したセグメントで管理することで、これに対応している。DELETE
または ROLLBACK
ステートメントを大量に発行しない限り、この数値は
MySQL
オプティマイザにとって十分に正確であるが、MySQL
はクローズ時までこの数値を格納しないため、MySQL
が突然中断されると数値が不正確になる場合がある。この数値が
100%
正確でなくても、致命的な問題にはならない。レコードの数は、ANALYZE
TABLE
または OPTIMIZE TABLE
を実行することで更新できる。 See
項4.6.2. 「ANALYZE TABLE
構文」。 See
項4.6.1. 「OPTIMIZE TABLE
構文」。
BDB
テーブルでディスクがいっぱいになると、エラー(おそらくエラー
28)が発生し、トランザクションがロールバックされる。これとは対照的に、MyISAM
テーブルと ISAM
テーブルでは、十分な空きディスクが確保されるのを待って、mysqld
が処理を続行する。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.