skillup

技術ブログ

Database

transactionが切れた場合のロックの復旧方法

投稿日:

transactionをスタートしたまま、commitせずにプログラムを途中で止めた場合の処理について。

不用意にプログラムを止めないようにしましょう。

ロックのメカニズム

ロック待ちでハマる前に知りたかったMySQL InnoDBの行ロックとテーブルロックの挙動

復旧しないと特定行の更新ができない(場合によってはテーブル全体のロックができない)状態になります。

trasactionロックの確認と特定

まずは下記コマンドでロックが本当に発生しているかどうかを確認しましょう。

そのあとスレッド発見→killをすることになります。(リンク参照)

ちなみにMySQLにログインしていないときに以下のコマンドでMySQLの結果を出力できます。(出力結果が長い時は結構使えそう)

\Gつけないと改行されません。

参考リンク
transactionの途中でトランザクションが切れてしまった時にそのトランザクションを殺す方法

MySQLでロックを特定し、強制終了する

-Database
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

ユニークキーの設定

MySQLでのユニークキーの設定に関して。 ユニークキーの設定は下記の通り。

ユニークキーを作成した後に確認するのは下記コマンドで。 …

no image

アンチパターン 参照渡しと値渡し+キー情報の設定+同一値を複数テーブルに配置+正規化が不十分+集計表+不適切なステータス値

本日は自分がデータベースの設計をしていて気を付かないといけないなーと思った点などを。 注意点としては設計のミスは実装で取り返しにくいことが多いので極力気を付けましょう。あといろいろなテーブルのパターン …

no image

NOT EXISTSの利用2

今回もNOT EXISTSの利用です。 前回の問題にプラスアルファし、列が一緒でないと連続でも意味ない仕様にします。 例えば下記のようなテーブルがあるとします。 seat | row_id | sta …

no image

JPAでのリレーション(アノテーション使用)

JPAでリレーションを管理するとき、最初はアノテーションでやろうとしたんですが、結局やり方がわからずコンストラクタ式をかいて対処してました。 JPAでのリレーションに関して 外部キー制約があるやり方は …

no image

SQL基礎 複雑なSQLの組み方

SQLの本を見ますとかなり複雑なSQLが書かれていることが多いです。 これは頑張っても無理では・・・と思っていましたが、ポイントしては 原則として必ず図に書く まずは問題を細かく分割する 細部から切り …

アーカイブ