2011-02-02 4 views
2

私は、休止状態とinnodbとmysqlを使用しています。私は、非常に長い休止状態のトランザクションの始めに取得された悲観的なロックを(特定のテーブル行に)持っています。場合によっては、このトランザクションを開始し、スタンドアロンアプリケーションモードでEclipseで実行しているアプリケーションを強制終了して(スレッドデッドを強制する)プログラムを実行すると、次のような状況になります。mysqlトランザクションのペシミスティックロックが壊れています

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

MySQLデーモンを停止して再起動すると悲観的なロックが得られます。

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

他にもこの問題が発生しましたか?スレッドデートを含まないTomcatを止めるきれいな方法はありますか?悲観的なロックを取得したトランザクションの途中で、MySQLがスレッドデッドに影響されないようにすべきです(アップデートを選択します)?

私は

アンディ

+0

これを把握しましたか?問題の行を特定して手動でロックを解除する方法はありますか? (私たちも同様の問題を抱えていると思う) – chrishomer

+0

いいえ、テストで3回見ました。それはまだ分かっていない。要因:(1)私は同じプロセスでLuceneを使用しています。この場合、Luceneも致命的な破損したmutexを取得します。 (2)アプリケーションが動作している間に別のプロセスでmysqlクライアントを使用してデータベースにクエリを実行しているときに発生するようです。 –

+0

これは古い質問ですが、これはまだわかりましたか?私は似たような問題があり、それを解決できないと思います。 – xycf7

答えて

0

MySQLはトランザクションが中止されたことを認識していません$ CATALINA_HOME/binに/ shutdown.shとTomcatを停止しています。

私はあなたがトランザクションのタイムアウトを引き起こすのに十分待っていないと言いたいと思います。任意のデータベース(とMySQL、特定の場合)では、トランザクションがタイムアウトしたときにトランザクションがロールバックされるように指定することができます。

関連する問題