共有ロック (キョウユウロック) とは | 意味や読み方など丁寧でわかりやすい用語解説

作成日: 更新日:

共有ロック (キョウユウロック) の読み方

日本語表記

共有ロック (キョウユウロック)

英語表記

Shared lock (シェアードロック)

共有ロック (キョウユウロック) の意味や用語解説

共有ロックは、データベース管理システム(DBMS)においてデータの整合性を保ちながら、複数のトランザクションが同時にデータを読み取れるようにするためのロック機構の一つである。リードロックやシェアードロックとも呼ばれるこのロックの主な目的は、データ参照の並行性を高めつつ、同時に行われるデータ更新による不整合を防ぐことにある。 具体的に、あるトランザクションがデータベース内の特定のデータ(例えば、テーブルの特定の行、ページ、あるいはテーブル全体など)に対して共有ロックを取得すると、他のトランザクションも同じデータに対して共有ロックを取得することができる。これにより、複数のユーザーやアプリケーションが同時に同じデータを参照しても、それぞれの読み取り処理がブロックされることなく、スムーズに進行する。これは、読み取り処理がデータの内容を変更しないため、同時に行ってもデータの状態に悪影響を与えないという前提に基づいている。たとえば、あるECサイトで多数の顧客が同時に特定の商品情報を閲覧する場合、それぞれが共有ロックを取得することで、互いの処理を邪魔することなく情報にアクセスできる。 しかし、共有ロックが取得されているデータに対して、別のトランザクションがデータを更新したり、削除したりするための排他ロック(ライトロック、イクスクルーシブロック)を取得しようとすると、その排他ロックの取得は、共有ロックがすべて解放されるまで待機させられる。つまり、共有ロック中のデータは書き換えができない状態となる。この仕組みにより、データの読み取り中に他のトランザクションがデータを変更してしまうことで、読み取り結果が誤ったものになる(ダーティリードや反復不可能読み取りといった不整合)のを防ぐことができる。例えば、銀行口座の残高照会中に、他の送金処理が残高を更新してしまい、誤った残高が表示されるような事態を共有ロックが防ぐ役割を果たす。 共有ロックの必要性は、データベースシステムが複数のユーザーから同時にアクセスされる環境において非常に重要となる。もし、読み取り処理に対しても常に排他ロックをかけるような設計にした場合、あるデータが読み取り処理中に排他ロックされると、他の読み取り処理も書き込み処理もすべて待機させられることになり、システム全体の並行性が著しく低下し、パフォーマンスが悪化する。特に、データの読み取り要求が書き込み要求よりも圧倒的に多いシステムでは、この性能問題は深刻となる。共有ロックは、このような状況において、読み取り処理の並行性を最大限に高めながら、書き込みによるデータの不整合から読み取り処理を保護するための、効率的な解決策を提供する。 データベース管理システム(DBMS)は通常、トランザクション分離レベルの設定に基づいて、共有ロックを自動的に適用する。例えば、多くのDBMSで採用されている「READ COMMITTED」や「REPEATABLE READ」といった標準的な分離レベルでは、参照するデータに対して一時的に共有ロックを取得し、その読み取り処理が完了するとロックを解放するといった動作を行う。このロックの粒度、つまりロックをかける対象の大きさは、行レベル、ページレベル、テーブルレベルなど様々であり、粒度が細かいほど並行性は高まるが、ロック管理のオーバーヘッドは増加する傾向にある。 共有ロックは、排他ロックと組み合わせて使用されることで、デッドロックという問題を引き起こす可能性もある。デッドロックとは、複数のトランザクションが互いに相手がロックしている資源の解放を待ち、永久に処理が進まなくなる状態を指す。例えば、トランザクションAがデータXに共有ロックをかけ、データYに排他ロックを要求し、同時にトランザクションBがデータYに共有ロックをかけ、データXに排他ロックを要求した場合、互いに相手のロック解放を待つ状態に陥る。DBMSはこのようなデッドロックを自動的に検知し、いずれかのトランザクションを強制的に終了(ロールバック)させることで解消を図る機構を持っている。 トランザクションが正常に終了(コミット)されるか、あるいは異常終了(ロールバック)されると、そのトランザクションが取得していた共有ロックは自動的に解放され、他の待機中のトランザクションが処理を続行できるようになる。このように、共有ロックはデータベースの性能と整合性の両立を図る上で不可欠な技術であり、システムエンジニアがデータベースシステムを設計・運用する上で理解しておくべき重要な概念である。

共有ロック (キョウユウロック) とは | 意味や読み方など丁寧でわかりやすい用語解説