2011-09-13 4 views
2

これは非常にあいまいな質問です。私は何を求めているのかわからないが、ガイダンスを探しています。多くの秒がロックされたクエリのレポート

基本的には、システムは数週間後にライブになりました。 DBAはスクリーンショットを送ってきました。これはパフォーマンスを監視する「フォグライト」と呼ばれるアプリケーションによって作成されたものです。これは、格納されているほとんどのプロクシがロックされている時間が約1000秒であることを示しています。しかし、73,000秒を報告するものがあります。

私にとってその数字だけではあまり意味がありません。たぶんprocは頻繁に使用されていますか?残りと比較して?しかし、それを実行すると、実動データを実行するのに4秒かかります。それが何をしているかを考慮して、それほど悪くない。彼らのDBAは、それは容認できるものだと言いますが、ロックされている期間の長さに関係しています。

これはどういう意味ですか?そして私はどこで問題を探し始めるだろうか? procは5つのUNIONを行い、結果セットを#tempテーブルに選択します。次に#Tempで単純なフィルタを実行し、結果を返します。

申し訳ありません私はまだ情報を持っていません - 私はどこから探し始めるべきかわかりません - それも問題ですか?

+0

私はFogLightを使用していません - おそらくこれはロックを待っているのをブロックした時間ですか?どの場合にもあなたにブロッカーが表示されますか? –

+0

いいえ、私が見せたのは、トップ1(問題の1つ)が1時間73,000のプロクシのリストでした。それで、それは過去1時間に73,000秒間ロックされた(別のプロセスによって、またはロッカーだった)ことを意味します。 – Craig

+1

は、このレポートがブロッカーまたはブロック対象であるかどうかを調べるのに適しています。接続している分離レベルも確認してください。 –

答えて

0

まず、問題のあるストアドプロシージャの先頭に次の行を追加します。

SETトランザクション分離レベルREAD UNCOMMITTED

isolation levels上のMSDNのページかかわらず取捨選択するようにしてください。

一般に、他のトランザクションが完了するまで待つ必要はありません。 しかし、ここでは、READ UNCOMMITTEDのハイライト

ある文が他のトランザクションによって変更ではなく、まだコミットされた行を読み取ることができるように指定します。

READ UNCOMMITTEDレベルで実行されているトランザクションは、他のトランザクションが現在のトランザクションによって読み取られたデータを変更できないように共有ロックを発行しません。 READ UNCOMMITTEDトランザクションは、排他ロックによってブロックされず、現在のトランザクションが変更されたが他のトランザクションによってコミットされていない行を読み取ることができなくなります。このオプションが設定されていると、コミットされていない変更を読み取ることができます。これはダーティリードと呼ばれます。トランザクションの終了前にデータ内の値を変更したり、データセット内の行を表示または非表示にすることができます。このオプションは、トランザクション内のすべてのSELECTステートメントのすべてのテーブルでNOLOCKを設定するのと同じ効果があります。これは分離レベルの中で最も制限の少ないものです。

また、「SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED」と言えば、あなたはGENIUSだと思うでしょう。

関連する問題