2012-01-16 16 views
7

投稿時にSQLエラーが発生したと思ったのですが... here ...(エラーメッセージ:タイムアウトがタイムアウトしました。私はVisual Studioのデータベースツールを使ってこれを実行しようとしています...管理スタジオではなく、クライアントコード/ ADO(まだ)ではありません。私はかなり書き直しましたいくつかのカスタム関数を使用する単純なクエリ...関数とクエリの部分はテストされており、すべて正常に実行されていますが、以下のクエリはタイムアウトします。これはManagement Studioで入力したとおりに正確に実行されます他の記事で述べたように、この投稿ごとに、[ツール]> [オプション]> [デザイナー]> [接続文字列のタイムアウト値を上書き]の設定を120秒に変更しましたが、 30秒。追加この最新バージョンのISNULLを管理スタジオで実行している変更点です。SQlサーバーで「タイムアウトがタイムアウトしました。タイムアウト時間が経過しました」というエラーメッセージが表示される

SELECT Symbol, LatestDate 
FROM (SELECT Symbol, ISNULL(dbo.LatestDateInDailyPricingVolBySymbol(Symbol), '1/1/1900') AS LatestDate FROM tblSymbolsMain) AS T2 
WHERE (LatestDate < dbo.RecentTradingDateByNumber(3)) 

一般的な考え方は、少なくとも3日間、私の毎日の価格表内の対応するデータ・ポイントを持っていない銘柄記号のサブセットを取り戻すことです。何かお手数ですか?皆さんありがとう。

答えて

10

あなたのタイムアウトに関係なく;

クエリを実行するのにSQL管理コンソールを使用していますか?その場合、データベースに接続するときにタイムアウトを設定できるオプションボタンがあります。また

Connection Options

、クエリウィンドウで、右クリックして[クエリオプションを選択した場合....

0は、無制限を意味し、私はこれらをチェックします。 4分は長い時間ですが、クエリがリファクタリングされてより速く実行される可能性があります。

enter image description here

あなたがC#の経由でのVisual Studioのこの内部を実行している場合は、デフォルトのコマンドタイムアウトは30秒です。コマンドのタイムアウトを設定して変更します。

SqlCommand comm= new SqlCommand(); 
comm.CommandTimeout = 300; 
+0

Visual Studio 2010のSQLツールを使用して実行しようとしています。 – StatsViaCsh

+0

@StatsViaCsh - SQL Server管理コンソールと同様のVS2010内の設定でなければなりません。生成されたコードがある場合は、コードで調整することができますが、クエリ画面やオプションを右クリックしてもかまいません。申し訳ありませんが、SQL Server管理コンソールだけでクエリを実行するためにVS2010を使用していないので、私はこれらの画面に精通していません。 –

+0

@StatsViaCsh - VS2010を少し見て、接続タイムアウトを設定できますが、コマンドタイムアウトを見つけることができません。私はツールを使用する代わりにコードで試してみると、簡単に変更できないデフォルトを使用しているようです。 –

1

あなたのルーチンは4分で始まります。これは、関数が自分のやるべきことをしていると仮定して、かなり簡単なクエリのように思えます。

は、このクエリの実行プランを見てきました:行の数が多い、とも傷つけるsargabilityとセットに繰り返し呼び出されたときに

SELECT Symbol, MAX(TradeDate) 
FROM tblSymbolsMain 
GROUP BY Symbol 
HAVING MAX(TradeDate) < dbo.RecentTradingDateByNumber(3) 

スカラー関数は、パフォーマンスの問題することができます。

+0

感謝を参照してください検討についての詳細をお知りになりたい場合は

「クエリ/クライアントの統計情報を含めます」。それは実際には非常に長いようです!私は私の実行計画を見ていない...私はどのようによく分からない。私は、これを関数の値を設定できるストアドプロシージャにする考えを持っていました:dbo.RecentTradingDateByNumber(3)を1回だけ行いましたが、微妙な変更によってその行が一致しないことはわかりません。あなたがさらにナッジを持っているなら、私はすべて耳です。 – StatsViaCsh

+0

@StatsViaCsh Management Studioには、実行計画を表示するためのメニューオプションがあります。悪い実行計画がどのように見えるかを理解する方法を説明する無料の電子ブックがあります。http://www.simple-talk.com/books/sql-books/sql-server-execution-plans/ –

2

クエリに時間がかかると、問題が発生している可能性があります。 RecentTradingDateByNumberを格納する変数を宣言します。管理スタジオでの実行は、「クエリは/実際の実行プランを含める」に進んでくださいを参照するには

DECLARE @RecentTrandingDateByNumber DATETIME 
SET @RecentTrandingDateByNumber=dbo.RecentTradingDateByNumber(3) 

SELECT 
    tblSymbolsMain.Symbol, 
    MAX(tblSymbolsMain.TradeDate) 
FROM 
    tblSymbolsMain 
GROUP BY 
    Symbol 
HAVING 
    MAX(TradeDate) < @RecentTrandingDateByNumber 

:だから、このようになります。 また、クエリのトラフィックにselectなどの数値を表示したい場合は、クライアントの統計情報を含めることもできます。あなたは、クエリの実行が応答のための here

+1

ありがとう、それは私が今日それにするつもりです。 – StatsViaCsh

関連する問題