2

私は休止状態、innodb、および mysql を使用しています。非常に長い休止状態トランザクションの開始時に (特定のテーブル行で) 悲観的ロックを取得しています。時折、このトランザクションを開始するプログラムを実行し、スタンドアロン アプリケーション モードで Eclipse を実行し、アプリケーションを強制的に停止すると (強制的にスレッドが死にます)、次のシナリオが発生します。

MySQL は、トランザクションが中止されたことを認識していません。次にアプリケーションを実行すると、MySQL はその行がロック解除されていることを認識する必要がありますが、(その長いトランザクションの開始時に) 悲観的ロックを取得する関数がブロックされます。

再び動作させる唯一の方法は、MySQL デーモンを停止して再起動することです。その後、ペシミスティック ロックが取得されます。

これは本当に気になります。これは、例外またはクリーン シャットダウン以外の方法で VM を終了すると、MySQL が壊れた状態のままになり、MySQL デーモンの再起動が必要になる可能性があることを意味します。たとえば、実行中のアプリケーションを中止するためにEclipseを使用するのと同じように、Tomcatをシャットダウンして再起動する通常の方法を使用しています。

他の人がこの問題に遭遇しましたか? threaddeath を伴わない tomcat を停止するクリーンな方法はありますか? 悲観的ロック (更新を選択) を取得したトランザクションの途中で、MySQL が threaddeath の影響を受けないようにすべきではありませんか?

$CATALINA_HOME/bin/shutdown.sh で tomcat を停止しています

アンディ

4

1 に答える 1

0

MySQL は、トランザクションが中止されたことを認識していません。

トランザクションのタイムアウトをトリガーするのに十分な時間を待っていなかったと思います。任意のデータベース (および特定の MySQL) では、トランザクションがコミットされていない場合にトランザクションをロールバックするトランザクション タイムアウトを指定できます。

于 2011-02-03T07:29:00.043 に答える