7

環境


DB サーバー (DWH 製品 & 開発 + SSRS 製品)

  • ウィン XP SP3
  • SQL Server 2008 エントリ
  • 社内LAN
  • DWH のリモート クエリ タイムアウトの制限はありません。0
  • 600SSRS DB サーバーに設定されたリモート クエリ タイムアウトの秒数
  • 同時接続に制限はありません。つまり、それらはに設定されています0
  • KeepAliveSQL 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


質問


  1. 問題が実際に何であるかの診断を開始するには、どこを参照すればよいですか?
  2. 問題が特定されたら、どのように修正しますか?


今までやってきたこと…


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が仮想テーブルを好まないことを示すこれを見つけました(理由は言及されておらず、参照も提供されていません)->クエリの書き換えが必要な可能性がありますか?
  • コメントへの返信: ネットワーク診断
4

5 に答える 5

0

まず、問題を見つけなければなりません。

Profiler を実行してレポートを開くと、何が起こっているかを確認できますか? イベント監査ログイン、監査ログアウト、例外、SQL:Stmt:Starting/Completed でトレースを開始します。レポートを開こうとした後、結果を確認してお知らせください。

于 2013-04-05T13:05:22.023 に答える