skillup

技術ブログ

Database

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

投稿日:

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

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

ロックのメカニズム

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

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

trasactionロックの確認と特定

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

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

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

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

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

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

-Database
-

執筆者:


comment

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

関連記事

no image

オブジェクト指向 データベース層

本日も引き続き「現場で役立つシステム設計の原則」を読み進めてます。 本日は主にデータベース層の考え方について。 Contents1 データべース層1.1 要点1.1.1 典型的なダメテーブル設計1.1 …

no image

MySQLのマイグレーション(workbench使用)

以前cakePHPにてマイグレーションの手法を紹介したのですが、当然PHP以外をつかっていたり、PHPでもcakeを使っていなければこの方法は通用しません。 何か、汎用的にデータベースの構造の差分がチ …

no image

cakePHPでの直SQL

今回はCakePHPにて直のSQLを書く方法を。 cakePHPにて大概の処理はもともと備わっているコマンドでなんとかなりますが、まれに直SQLを書いたほうがらくなこともあります。 書き方その1 [c …

no image

アンチパターン 連鎖倒産+エラー監視+データのバックアップ

本日は主にインフラの設計的なことに関して。 Contents1 連鎖倒産1.1 デメリット1.2 対策2 エラー監視2.1 デメリット2.2 対策3 データのバックアップ体制3.1 デメリット3.2 …

no image

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

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