1

私は優れた VB プログラマーではありませんが、Sybase ASE をバックエンドとして使用する VB6 デスクトップ アプリケーションの保守/強化を任されています。このアプリには約 500 人のユーザーがいます。

最近、このアプリケーションに機能を追加しました。この機能は、データベース内の単一の行に対して追加の挿入/更新を実行します。キー フィールドはトランザクション番号であり、フィールドはインデックス化されています。トランザクションが完了するとレコードが削除されるため、更新されるテーブルには通常約 6000 のレコードが含まれます。展開後、ユーザーがパフォーマンスの低下を報告する前に、アプリは 1 日半正常に動作しました。

最終的に、パフォーマンスの問題はデータベース内のテーブル ロックにあることが判明し、以前のバージョンのアプリにロールバックする必要がありました。使用初日は月曜日で、通常システムの使用が非常に多い日なので、なぜその日に問題が発生しなかったのか混乱しています。

配置されたコードには、Sybase トランザクションを開始するための呼び出しがあります。BeginTrans と CommitTrans の間のブロック内で、データベースを更新する DLL ファイルへの呼び出しがあります。新しいコードを DLL のクラス モジュールに配置しました。

特にシステムは変更前に問題なく動作していたので、単一の行への単一の挿入/更新がなぜこのような問題を引き起こすのかについて私は混乱しています。ここでより大きな問題を明らかにした可能性はありますか? それとも、自分のアプローチを再考する必要があるだけですか?

同じような境遇の方、アドバイスいただける方よろしくお願いします。

4

3 に答える 3

0

あなたが使用している SQL コードがなければ、全体像を理解することはできません。

また、単一の挿入または更新の場合、なぜトランザクションを使用するのですか? 多くのユーザーが同じ行を更新しようとする可能性はありますか?

于 2009-03-15T21:41:20.453 に答える
0

VB コードと SQL の両方を (可能であればクエリ プランと共に) 投稿していただけると助かります。ただし、私たちが持っている情報では。update statistics table_name テーブルに対して実行して、クエリ プランが最新であることを確認します。

コードをトランザクション内で実行する必要があることが確実な場合は、既存のトランザクション ブロックを使用するのではなく、SQL を含む独自のトランザクション ブロックを追加してみましたか?

于 2009-03-16T09:59:36.340 に答える