Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


19.6.4 パーティショニングとロック

MySQL 5.6.5 以前では、DML または DDL ステートメントを実行するときにテーブルレベルロックを実際に実行する MyISAM などのストレージエンジンの場合、パーティション化されたテーブルに影響するそのようなステートメントがテーブルに全体としてロックを適用していました。つまり、ステートメントが完了するまですべてのパーティションがロックされました。MySQL 5.6.6 はパーティションロックプルーニングを実装し、これによって多くの場合に不必要なロックが排除されます。MySQL 5.6.6 以降では、パーティション化された MyISAM テーブルに対して読み取りまたは更新を行うほとんどのステートメントで、影響を受けるパーティションのみがロックされます。たとえば、MySQL 5.6.6 より前は、パーティション化 MyISAM テーブルからの SELECT でテーブル全体がロックされました。MySQL 5.6.6 以降は、SELECT ステートメントの WHERE 条件を満たす行を実際に含むパーティションのみがロックされます。これには、パーティション化された MyISAM テーブルに対する同時操作の速度および効率を向上させる効果があります。この改善は、多く (32 以上) のパーティションを持つ MyISAM テーブルを操作するときに特に顕著になります。

この動作の変更は、行レベルロックを使用し、パーティションプルーニングの前にロックを実際に実行しない (または実行する必要がない)、InnoDB などのストレージエンジンを使用するパーティション化されたテーブルに影響するステートメントには影響しません。

次のいくつかの段落では、テーブルレベルロックを使用するストレージエンジンを使用するテーブルに対する、さまざまな MySQL ステートメントへのパーティションロックプルーニングの影響について説明します。

DML ステートメントへの影響

SELECT ステートメント (union または join を含むものを含む) が、実際に読み取る必要があるパーティションのみをロックするようになります。これは SELECT ... PARTITION にも適用されます。

UPDATE は、パーティショニングカラムが更新されないテーブルにのみロックをプルーニングします。

REPLACE および INSERT は、挿入または交換される行を持つパーティションのみをロックするようになります。ただし、AUTO_INCREMENT 値がパーティショニングカラム用に生成される場合は、すべてのパーティションがロックされます。

INSERT ... ON DUPLICATE KEY UPDATE は、パーティショニングカラムが更新されないかぎりプルーニングされます。

INSERT ... SELECT は、読み取る必要があるソーステーブル内のパーティションのみをロックするようになります (ターゲットテーブル内のすべてのパーティションはロックされます)。

注記

INSERT DELAYED はパーティション化されたテーブルではサポートされません。

LOAD DATA ステートメントによってパーティション化されたテーブルに適用されるロックはプルーニングできません。

パーティション化されたテーブルのパーティショニングカラムを使用する BEFORE INSERT または BEFORE UPDATE トリガーが存在する場合は、このテーブルを更新する INSERT および UPDATE ステートメントでのロックをプルーニングできないことを意味します (トリガーがその値を変更する可能性があるため)。テーブルのパーティショニングカラムに対する BEFORE INSERT トリガーが存在する場合は、INSERT または REPLACE によって設定されるロックをプルーニングできないことを意味します (BEFORE INSERT トリガーが、行が挿入される前に行のパーティショニングカラムを変更し、それによって行が本来のものとは異なるパーティションに強制的に挿入される可能性があるため)。パーティショニングカラムでの BEFORE UPDATE トリガーは、UPDATE または INSERT ... ON DUPLICATE KEY UPDATE によって適用されるロックをプルーニングできないことを意味します。

影響を受ける DDL ステートメント

CREATE VIEW でロックが行われなくなります。

ALTER TABLE ... EXCHANGE PARTITION がロックをプルーニングするようになります。交換されるテーブルおよび交換されるパーティションのみがロックされます。

ALTER TABLE ... TRUNCATE PARTITION がロックがプルーニングするようになります。空にされるパーティションのみがロックされます。

ALTER TABLE ステートメントは引き続きテーブルレベルでメタデータロックを行います。

その他のステートメント

LOCK TABLES はパーティションロックをプルーニングできません。

CALL stored_procedure(expr) はロックプルーニングをサポートしますが、expr を評価する際はしません。

DO および SET ステートメントはパーティショニングロックプルーニングをサポートしません。


User Comments
Sign Up Login You must be logged in to post a comment.