2011-06-17 6 views
0

一般に、本番環境で発生しているDBタイムアウトの問題をローカル開発環境に再現するにはどうすればよいですか?運用環境でのDBタイムアウトの問題

私のフロントエンドC#アプリケーションは、プロダクションでDBタイムアウトを取得するストアドプロシージャを呼び出します。これらのDBタイムアウトの問題は非常に断続的です。私はBegin Transactionでテーブルをロックしようとしましたが、SQLステートメントがテーブル名の隣に "nolock"を持っているため動作しません。

答えて

1

dev環境でエラーを再作成しようとする前に、少しの調査を行い、パフォーマンスの問題がprodで最も発生しやすい場所を特定する必要があります。

prodで問題が発生したことに気付くと、SQL Server内のアクティビティモニタを使用して、どのプロセスがブロックされ、どのプロセスがブロックされているかを知ることができます。私は過去にこれを使って問題のあるクエリを追跡しました。

0

それが正確なミラーでない限り、あなたはおそらく、ハード私が推薦する何を(などユーザー数、トラフィック量、データ量、)

お近くのdevの環境でそれを再現するために押されるだろうがにありますプロファイラをオンにし、プロダクト環境でタイムアウトの問題が発生したときに何が起きているのかを確認できるかどうかを確認します。あなたが原因が何であるかに応じて、開発環境で再現できる可能性があることを確認しました。あなたはプロファイラを始めるために

何か:

http://msdn.microsoft.com/en-us/library/ms187929.aspx

+0

トレースは良好ですが、非常に忙しいプロダクションサーバーでは、細心の注意を払って使用する必要があります。サーバー側のトレースは、クライアント側のトレースよりパフォーマンスの問題が少なくなりますが、設定にはさらに多くの作業が必要です。どちらの場合でも、良いフィルタを使用してイベントの最小セットをトレースする必要があります。 – ErikE

0

おそらく、あなたの開発環境には、同じタイムアウトを取得するにはかなり難しいだろう。 実働サーバーと同じ種類のhwと同じ負荷を使用する必要があります。

タイムアウト最も可能性によって引き起こされる: 1)死者ロック 2)不足しているインデックス 3)悪いクエリプラン

あなたはパラメータ(その値)にして送信される内容を正確に把握した場合ストアドプロシージャを使用すると、SQL ManagemntスタジオまたはSimularツールを使用してクエリプランを調べることができます。 実行中のSQL 2008の場合、クエリアナライザは、インデックスが見つからないかどうかを通知します。

パラメータが多岐にわたる場合は、ストアドプロシージャにのを追加して、毎回新しいaueryプランを作成するようSQLサーバーに強制するとよい場合があります。

クエリプランがよく見える場合は、サーバーにトレースを追加し、ストアドプロシージャに関係するテーブルのロックを探す必要があります。