IT用語集 › データベース › テーブルロック

テーブルロック

データベース Svenska → 更新: 2026-10-23

個々の行ではなくテーブル全体にかけるロック。PostgreSQLには8段階(AccessShare、RowShare、RowExclusive、ShareUpdateExclusive、Share、ShareRowExclusive、Exclusive、AccessExclusive)があり、主にDDL操作で取得される。

AccessShareはSELECTが取るロックで、AccessExclusive以外とは両立する。AccessExclusiveはSELECTを含むすべてを止め、ALTER TABLE、DROP TABLE、REINDEXが取得する。典型的なアンチパターンは、1億行のテーブルにデフォルト値付きでALTER TABLE ADD COLUMNを実行することだ。テーブル全体の書き換えとロックが数分続き、アプリがダウンする。現代のPG(11以降)では、NULL許容かつ不変のデフォルト値なら書き換えが発生しない。オンラインDDLツールにはpt-online-schema-change(Percona)、gh-ost(GitHub)、pgroll(Xata)がある。MySQLのInnoDBオンラインDDLは多くの操作をロックなしで処理できる。

← 用語集に戻る