2010-11-24 15 views
1

J2EE WebアプリケーションはInformix 9.40に対して実行されます。Informixテーブルがロックされています

あるテーブルがロックされ、このテーブルにアクセスするSQLコードを持つJSPがエラーを返すことがあります。私は現在のロックを表示するにはonstat -kを使用する方法を知っているが、私はそこに何かを追跡する方法があることを知りたい すべてのロックは、歴史と関連セッションで起こったテーブルロックを引き起こしたSQLステートメント?

同じエラーが次に何が起こるとき、私は知らないので...

答えて

2

まず、あなたは、IBMは、Informix Dynamic Server(IDS)、バージョン9.40は、もはやIBMによってサポートされていることに注意する必要があります。どちらも後継バージョンではなく、10.00です。おそらく11.70に、おそらく11.50にアップグレードする予定です。

包括的にロックを追跡する方法はありません。この理由の1つは、そのような追跡がシステムにかなりの減速をかけることである - 非常にかなりの減速。ロックは、通常、(データページを含むバッファプールの後ろの)共有メモリの第2番目のコンポーネントであるため、それらの多くがあり、頻繁に非常にアクティブであり、しばしばロックが頻繁に保持されます(秒、または1ミリ秒の数分の1)である。そのようなロギングから生成されるデータの量は非常に大きく、選別することは非常に困難です。

DB-CronとAdmin APIのサポートにはいくつかのオプションがありますが(それは確かではありませんが、その可能性は高くなります)、9.40ではオプションがかなり厳しく制限されています。

私が考えることができる最も近いアプローチは、onstat -k -u -r 1でのスナップショットです。 -kは、あなたが既に知っているように、ロックテーブルを報告します。ユーザー(セッション)に関する-uのレポートと、-r 1は毎秒コマンドを繰り返します。必要に応じて他のデータリクエストを追加することができます。 -g sesはセッションに関するより詳細なレポートを提供します(あなたがDBSAの場合、通常はコマンドを実行するときにinformixというユーザ)。しかし、これは1秒のサンプリングです...唯一の良いニュースは、ロックがテーブルに置かれると、しばらくの間(その問題に気が付いたので)ぶら下がる可能性があるので、-g sesまたは-u出力があなたに伝えます誰がロックを適用するのか。しかし、暫定的なデータ量は大きくなるでしょう。

システムを囲んでいるSQLをすべて確認して、テーブルをロックしているものを探してください。タイミングに一貫性はありますか?たとえば、cronジョブによってUPDATE STATISTICSが実行されている可能性がありますか?それはテーブルロックを一瞬で獲得すると私は信じている。あなたのバージョンのIDS以降のリリースでも改善されているものです。

+2

あなたはinformixの専門家でなければなりません!大変ありがとう。私はたくさんのことを学んだ。 – idiotgenius

関連する問題