環境
DB サーバー (DWH 製品 & 開発 + SSRS 製品)
- ウィン XP SP3
- SQL Server 2008 エントリ
- 社内LAN
- DWH のリモート クエリ タイムアウトの制限はありません。
0
600
SSRS DB サーバーに設定されたリモート クエリ タイムアウトの秒数- 同時接続に制限はありません。つまり、それらはに設定されています
0
KeepAlive
SQL Server のTCP/IPプロパティ =30000
開発ボックス
- ウィン XP SP3
- 入札 2008
共有データ ソース (.rdl で使用)
- サーバーのマシン名を使用し、エイリアスは使用しません
- 権限はすべて問題ありません
問題
レポートの [プレビュー] タブを見ると BIDS によって返されるエラーは、約 1 分後にこれが表示されます (SSMS でクエリに約 1 分 10 秒かかります -編集: 2012-10-16 SSRS 自体でエラーが複製されました)レポートを Report Manager に展開し、レポートを実行しようとする:以下に例外スタック トレースを追加):
ローカル レポートの処理中にエラーが発生しました。
レポートの処理中にエラーが発生しました。
データセット 'MainData' のクエリの実行に失敗しました。
サーバーから結果を受信中にトランスポート レベルのエラーが発生しました。(プロバイダー: TCP プロバイダー、エラー: 0 - 指定されたネットワーク名は使用できなくなりました。)
- クエリは、アクセス許可を持つエンドユーザー アカウントを使用して
db_datareader
、prod と dev db サーバーの両方に対してテストされており、SSMS で正常に動作します。 - このアカウントは、エンドユーザーが実行時に .rdl を実行するために使用されます。
- クエリが構文的に正しいことを確認するために SSMS が使用され、エラーや警告なしで完全な結果セットが返されました。
クエリ構造 (簡潔にするためにそのようにリストされています)
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SET NOCOUNT ON
SET ANSI_WARNINGS OFF
/**********************************************************
CTE to be used to clean strings
***********************************************************/
;WITH
CTE_1 AS ( SELECT SomeData )
,CTE_2 AS ( SELECT SomeData )
,Recursive_CTE AS ( SELECT SomeData ) -- String cleaning performed here
,CTE_3 AS ( SELECT SomeData )
/**************************
Data set returned here
***************************/
SELECT
Column_1
,Column_2
,Column_3
.
.
.
,Column_n
FROM
Fact
INNER JOIN Dimension_1 AS 1 ON Fact.Key_1 = 1.Key_1
INNER JOIN Dimension_2 AS 2 ON Fact.Key_2 = 2.Key_2
INNER JOIN Dimension_3 AS 3 ON Fact.Key_4 = 3.Key_3
INNER JOIN Dimension_5 AS 4 ON Fact.Key_4 = 4.Key_4
LEFT JOIN CTE_3 AS clean ON 4.Key_4 = clean.Key_4 -- Clean names returned in query and used in GROUP BY clause
WHERE
Condition_1 = Test_1
AND Condition_2 = Test_2
AND Condition_3 = Test_3
.
.
.
AND Condition_n = Test_n
GROUP BY
Group_1
,Group_2
,Group_3
.
.
.
,Group_n
ORDER BY
Group_1
,Group_2
,Group_3
.
.
.
,Group_n
注(これが役立つかどうかはわかりません):
- 再帰 CTE は 24 回の再帰しか実行しません。
- すべてのキーは
PRIMARY KEY CLUSTERED INDEXES
質問
- 問題が実際に何であるかの診断を開始するには、どこを参照すればよいですか?
- 問題が特定されたら、どのように修正しますか?
今までやってきたこと…
2012-10-15
- Google マシンで狩りをしても役に立たなかった。
- これが発生したことを確認した他のチーム メンバーに話を聞いたところ、パフォーマンスに関連している可能性があると考えられています。つまり、クエリの実行に時間がかかりすぎているか、SSRS またはコネクタによって実行される SQL コードの検証/構文チェックがより厳密である可能性があると考えています。それは使用しています。
2012-10-16
ERROR: Throwing Microsoft.ReportingServices.ReportProcessing.ReportProcessingException: Query execution failed for dataset 'DataSet1'., ;
Info: Microsoft.ReportingServices.ReportProcessing.ReportProcessingException: Query execution failed for dataset 'DataSet1'. ---> System.Data.SqlClient.SqlException: A transport-level error has occurred when receiving results from the server. (provider: TCP Provider, error: 0 - The specified network name is no longer available.)
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error)
at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()
at System.Data.SqlClient.TdsParserStateObject.ReadBuffer()
at System.Data.SqlClient.TdsParserStateObject.ReadByte()
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
at Microsoft.ReportingServices.DataExtensions.SqlCommandWrapperExtension.ExecuteReader(CommandBehavior behavior)
at Microsoft.ReportingServices.OnDemandProcessing.RuntimeDataSet.RunDataSetQuery()
--- End of inner exception stack trace ---
- 上記の例外は、同じデータセットのログで複数回発生します -> 考えられる原因は、CTE での再帰でしょうか??
- DWH DB サーバーおよび SSRS DB サーバー レベルで TCP/IP 設定を確認しました。両方とも
KeepAlive
プロパティが に設定されています30000
。つまり、30 秒 -> 接続が切断された可能性がありますか? - 同様の問題解決 (スタック トレースに基づく) が、Visual Studio 2005 に対するクエリについてここ
Tools > Options > Database Tools > Query and View Designers > Cancel long running query
で見つかりました。選択を解除しました(30 秒に設定されていました)。変更はありません (また、このクライアント設定は、SSRS サーバーに展開されたレポートには影響しませんが、試してみると思います) - SSRSがクエリを DWH サーバーに送信するときに (ODBC 接続を作成していなくても)、再帰的CTE によってこのようなオーバーロードが発生する可能性がありますか??
OBDC connection attempt when server is not ready to process a new local connection, possibly due to overload
- SSRSが仮想テーブルを好まないことを示すこれを見つけました(理由は言及されておらず、参照も提供されていません)->クエリの書き換えが必要な可能性がありますか?
- コメントへの返信: ネットワーク診断