10bet网址
MySQL 5.6リファレンスマニュアル
下载本手册
PDF(美国高级主任)- 26.8 mb
PDF (A4)- 26.8 mb


8.10.5外部ロック

外部ロックは,複数のプロセスによるMyISAMデタベステブルの競合を管理するためのファルシステムロックの使用です。外部ロックは、MySQL サーバーなどの単一のプロセスが、テーブルへのアクセスを必要とする唯一のプロセスであると想定できない状況で使用されます。次にいくつかの例を示します。

  • 同じデータベースディレクトリを使用する複数のサーバーを実行する場合(推奨されません),各サーバーで外部ロックが有効になっている必要があります。

  • myisamchkを使用してMyISAMテーブルに対して保守操作を実行する場合,サーバーが実行中でないことを確認するか,サーバーが必要に応じてテーブルファイルをロックし,テーブルへのアクセスをmyisamchkによって調整するように,サ,バ,で外部ロックが有効になっていることを確認する必要があります。同じことが,MyISAMテ,ブルをパックするためにmyisampackを使用する場合にも当てはまります。

    外部ロックを有効にしてサーバーを実行する場合,テーブルのチェックなどの読み取り操作のために,いつでもmyisamchkを使用できます。この場合に,サ,バ,がmyisamchkで使用しているテ,ブルを更新しようとする場合,サ,バ,はmyisamchkが終了するまで待ってから,続行します。

    テ,ブルの修復や最適化などの書き込み操作のためにmyisamchkを使用する場合,またはmyisampackを使用してテ,ブルをパックする場合は,mysqldサ,バ,がそのテ,ブルを使用していないことを常に確認する必要がありますmysqldを停止しない場合,myisamchkを実行する前に,少なくともmysqladmin刷新表を実行してください。サ,バ,とmyisamchkが同時にテ,ブルにアクセスすると,テ,ブルが破損する可能性があります

外部ロックが有効になっていると,テーブルへのアクセスを必要とする各プロセスは,テーブルへのアクセスに進む前にテーブルファイルに対するファイルシステムロックを獲得します。必要なすべてのロックを獲得できない場合,(現在ロックを保持しているプロセスがそれらを解放したあとに)ロックを取得できるまで,プロセスはテーブルへのアクセスをブロックされます。

サーバーは場合によってテーブルにアクセスできるまでほかのプロセスを待機する必要があるため,外部ロックはサーバーのパフォーマンスに影響します。

単一のサーバーを実行して特定のデータディレクトリにアクセスする場合(これは通常のケースです)およびサーバーの実行中にmyisamchkなどのほかのプログラムでテ,ブルを変更する必要がない場合,外部ロックは不要です。ほかのプログラムでテ,ブルを読み取るだけである場合,外部ロックは不要ですが,myisamchkがテ,ブルを読み取っている間にサ,バ,がテ,ブルを変更すると,myisamchkが警告をレポ,トすることがあります。

外部ロックが無効になっていて,myisamchkを使用するには,myisamchkの実行中にサ,バ,を停止するか,myisamchkを実行する前にテ,ブルをロックし,フラッシュする必要があります。(セクション8.11.1 "システム要素およびスタ,トアップパラメ,タのチュ,ニング"を参照してください.)この要件を回避するには,检查表および修理表ステ,トメントを使用して,MyISAMテ,ブルをチェックし,修復します。

mysqldの場合,外部ロックはskip_external_lockingシステム変数の値で制御されます。この変数が有効にされている場合,外部ロックは無効になり,その逆も同じです。MySQL 4.0以降,外部ロックはデフォルトで無効にされます。

外部ロックの使用は,サ,バ,の起動時に——外部锁または——skip-external-lockingオプションを使用して制御できます。

多数のMySQLプロセスからMyISAMテーブルを更新できるようにするために外部ロックオプションを使用する場合,次の条件を満たしていることを確認する必要があります。

  • 別のプロセスによって更新されるテーブルを使用するクエリーには,クエリーキャッシュを使用しないでください。

  • サ,バ,を——delay-key-write =オプションで起動したり,共有テ,ブルに対してDELAY_KEY_WRITE = 1テ,ブルオプションを使用したりしないでください。そうでないと,电子邮件ンデックスが破損する可能性があります。

これらの条件をもっとも簡単に満たす方法は,常に——外部锁——delay-key-write =了および——query-cache-size = 0と一緒に使用することです。(これは,多くのセットアップで,前述のオプションを組み合わせることが有用であるため,デフォルトで実行されません)。