- - PR -
SQL Server コミット後のタイムラグについて
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-06-02 16:27
Visual Basic 6.0 SP3にてバッチ処理、aspにてwebシステム開発を行いました。
本番稼動開始より、本日まで2年半ほど経過しております。 昨日、下記の現象が発生しました。 DBサーバの環境 OS :Windows 2000 Advanced Server SP3 DB :SQL Server 2000 HDD:RAID5 <現象> Aというアプリケーション(vb.exe)にて、 管理テーブルにレコードをINSERTしているのですが、その内容が Bというアプリケーション(asp)から参照できるまでにタイムラグが発生しています。 Aアプリケーションではトランザクション処理を行っており、 全件処理が正常に行われるまでコミットは行いません。 ログにて確認すると、このアプリケーションは、 開始/終了とも 2004/05/31 17:01:49であり、正常終了しています。 即ち 2004/05/31 17:01:49の時点でコミットされています。 INSERTされたレコードには、Aアプリケーションの開始時刻が登録されているのですが、 確かに2004/05/31 17:01:49となっています。 がしかし、2004/05/31 17:44の時点でBアプリケーションより、 管理テーブルを参照すると、INSERTされたレコードが抽出されません。 同条件で、2004/06/01 09:55の時点では、抽出されています。 Bアプリケーションでの抽出条件は、 レコードがINSERTされていればヒットするものであり、 時刻には関係ないものです。 プログラムにてコミットしたデータが、 実際にDBに反映され、参照できるまでにタイムラグが発生する、 というようなことは起こりうるのでしょうか。 過去に、トランザクションログの切捨てを行っておらず、 ログファイルの容量が膨大になってしまい、いろいろ不可解な現象が 起こっているサーバですので上記のようなことも起こりうるのかな、と・・・。 大変拙い説明で申し訳ないのですが、何卒ご教授のほど、宜しくお願い致します。 | ||||||||||||
|
投稿日時: 2004-06-02 17:10
ターゲットテーブルは同じテーブルですよね?
Aから一時テーブルへINSERTして、 夜間バッチで一気に本番テーブルへINSERTしていることはないですよね? 同じテーブルであれば、 commit後、必ず確定されると思いますよ。 | ||||||||||||
|
投稿日時: 2004-06-02 17:39
raystarさんご返答有難うございます。
ターゲットテーブルはもちろん同じテーブルです。
確定されるはずなのですが、commitしたプログラムとは 別のプログラムから内容が参照できませんでした。 ちなみに、本日は再現しなかったそうです。 (先ほど、客先より報告ありました) | ||||||||||||
|
投稿日時: 2004-06-03 00:50
お話を聴く限りちょっと原因究明は困難かと思います。
現時点で確認できることは・・ @SQLエラーログを見て「2004/05/31 17:01:49」前後でエラーが発生していないか確認する ログパンクエラー、DB破損エラーがあるかもしれません。 Aその時間帯のシステム使用状況の確認 もしかして他のユーザーがデータを更新していたり何気にバッチが失敗&リトライしていた。。なんてことは?。 BVBバッチの起動方法は?。あとバッチ実行のログの出力結果とかはないのか。 次回再現時には以下の方法を試すこともできます(ASPからデータが見れない場合の直後)。 1.SQLプロファイラを起動しASPからのSQLをキャプチャします。これをクエリアナライザなど から実行しデータが検索できるか確認します。同様にバッチのINSERT結果もクエリアナライザから確認します。 2.sp_who、sp_lockなどを確認し同時実行ユーザーの有無を確認 3.SQLエラーログの採取 とりあえず思いつくのはこんな感じですね。タイムラグの話はちょっとわかんないです。。 | ||||||||||||
|
投稿日時: 2004-06-03 09:41
tahakodaさんご返答有難うございます。
やはり、困難ですか。。。
この現象は客先にて発生しており、現在正常稼動しているため、 見ることは不可能です。不具合が再発すれば、見ることはできますが。。
ありません。
ホストのJCLにて起動しております。 バッチ実行ログの出力はあり、正常終了しております。 更新は失敗しているのではなく、正常に終了していて 次の日には見えるようになっております。 この様な現象でも、上記@Aは当てはまるのでしょうか。 | ||||||||||||
|
投稿日時: 2004-06-03 13:17
まず問題を切り分けます。
1.DB側に問題 現時点ではエラーログを見るほかありません。 採取手順をメールし顧客にファイルを採取するなどをお願いしてみては?。 2.アプリ側に問題 トランザクションがCOMMITされていればデータは他アプリから参照できるはずです。 COMMITされていなければ当然見ることはできません。 推測の話でしたら考えられるのはたとえば。。ターゲットテーブルが別アプリにロックされていてバッチのINSERT自体がWAITしていた、などが考えられます。 いずれにしてもこういう事象の調査には必要資料の採取/調査などがなければ先に進みません。。まずは問題の切り分けかと思います。 |
1