2009-07-22 5 views
1

を実行している間、私は直接クエリを実行しています、それは自然の中で簡単です:データセットがタイムアウトクエリはすぐに

SELECT * FROM [dbo].[vwUnloadedJobDetailsWithData] WHERE JobId = 36963 

私は、クエリが偶数秒を取らない経営のスタジオからこれを実行すると。私がテーブルアダプタの中からそれを実行すると、タイムアウトします。私はこれを複数回修正しましたが、修正は馬鹿です。 xsdファイルからテーブルアダプタを削除して再作成すると、管理スタジオのクエリ時間と約2日間一致しますが、asinineを再デプロイする必要があります。

これを引き起こしている可能性のあることについての洞察は非常に高く評価されます。私はこれについてもう一つの質問を見たことがあるが、クエリの前にset arithabortを含む解決策は私にとっては効果がなかった。

編集:クエリを呼び出すコードを表示するように求められました。私は私のXSDファイルに入ると全く同じようにプレビューデータを行うときに今、これは起こるが、明確化のために、ここにある:

using (TEAMSConnection connection = new TEAMSConnection()) 
{ 
    connection.OpenConnection(); 

    _JobDetailsDAO jobDetailDao= new _JobDetailsDAO(connection); 
    return jobDetailDao.GetUnloadedJobDetailsByJobId(jobId); 

} 

は、接続の処分にデータベース接続が閉じられます。

if (_DBConnection != null && _DBConnection.State == ConnectionState.Open) 
    _DBConnection.Close();  

EDIT2:このコード行を使用して、私はここにトレースを実行したとしている セットが セットに セットANSI_WARNINGSをオフにNUMERIC_ROUNDABORTオフARITHABORT セットに

セットQUOTED_IDENTIFIERを設定されている設定オプションを セット言語us_englishのオフ セットIMPLICIT_TRANSACTIONSをオフCURSOR_CLOSE_ON_COMMIT セットに セットCONCAT_NULL_YIELDS_NULLに セットANSI_NULLSにANSI_PADDING

を犯し7 セットのトランザクション分離レベルの読み取りDATEFIRST 0セットDATEFORMAT MDY セット私が行って、その私が管理スタジオで生成され、それはまだ1秒未満で走ったクエリに追加。私はトレースと同じように正確にクエリをコピーしました。

exec sp_executesql N'SELECT * FROM [dbo].[vwUnloadedJobDetailsWithData] WHERE JobID = @JobId',N'@JobId int',@JobId=36963 

これはまだ2番目の戻り時間です。私はとても混乱しています。

おかげで、 ジョシュこれが起こっされるだろう、なぜ

+0

DB接続を終了していないようですが、C#コードを共有していないために何が起こっているのかを知ることは難しいです。 –

+0

申し訳ありませんが、接続を閉じるまで、共有するコードはあまりありません。間違いなく閉じています。もし私がそれが助けになると思うなら、私はその質問の回りに私の質問と接続処理を掲示します。 – joshlrogers

答えて

0

最も可能性が高いscenarionはSSMSとado.net間のSETオプションの差です。その違いが、最適ではない可能性のある実行計画の(再)構築を引き起こします。

+0

私は設定オプションを追加しました。あなたはどんなアイデアを引き起こす何かを見ますか? – joshlrogers

0

まあ、私はデータセットを使用できるソリューションを見つけることができませんでしたので、自動生成されたTableAdaptersを使用するのではなく、コードでSqlDataAdapterを使用するようにしました。

トレースによると、これは全く同じクエリを実行しますが、これまでのところ動作します。それは2日ではないかもしれませんが、今のところそれはうまくいくようです。

0

大声で考えようとしている: 別のプロセス/人によるロックがある可能性がありますか?同じ行を同時に更新する人はいますか? Management StudioまたはQuery Analyzerでテーブルを開いて、テーブルを開いてフィルターを再生する人はいますか? sp_who2

0

にいくつかの考えを使用してロックを探してみてください。

私はストアドプロシージャのためのスニッフィングパラメータを呼びたい何。 OPTION (RECOMPILE)ヒントを試してみてくださいので、あなた送られたSQLは、次のようになります

exec sp_executesql 
    N'SELECT * 
     FROM [dbo].[vwUnloadedJobDetailsWithData] 
     WHERE JobID = @JobId 
     OPTION (RECOMPILE)', 
    N'@JobId int', 
    @JobId=36963 

説明:クエリプランが生成され、キャッシュされた場合、それは悪い、非定型値であってもよいです。ジョブIDは通常非常に選択的ですが、その1つの実行ではありません。次のプランのクエリを実行すると、キャッシュされた計画は次の選択的なJobIdに対して間違っています。プランはさまざまな理由で再コンパイルされますが、再コンパイルの価値は重要です。

それ以外の場合、Jobidの正確なデータ型は何ですか? smallintの場合、列はパラメータ化されたクエリでintに変換されます。定数を使用する場合、それは小さくありません。型が正しく定義されていることを確認してください。これはSQLコードで重要です。

関連する問題