0
600
秒0
KeepAlive
属性= 30000
BIDS在查看报告的“预览”选项卡时返回的错误在大约1分钟后出现(SSMS中的查询需要大约1分10秒 - 编辑:2012-10-16现在已经在SSRS中复制了错误通过将报告部署到Report Manager并尝试运行报告:下面添加了异常堆栈跟踪):
本地报告处理期间发生错误。
报告处理期间发生错误。
数据集“MainData”的查询执行失败。
从服务器接收结果时发生传输级错误。 (提供程序:TCP提供程序,错误:0 - 指定的网络名称不再可用。)
db_datareader
权限)进行了测试,并且在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
PRIMARY KEY CLUSTERED INDEXES
2012-10-15
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 ---
KeepAlive
属性设置为30000
,即30秒 - >可能导致连接断开?Tools > Options > Database Tools > Query and View Designers > Cancel long running query
(设置为30秒)。没有变化(这个客户端设置也不会影响报告一旦部署到SSRS服务器我相信,但我想我会试一试)OBDC connection attempt when server is not ready to process a new local connection, possibly due to overload
- >当SSRS将查询提交给DWH服务器时,可能递归CTE导致这样的重载(即使我没有进行ODBC连接)?首先,您必须找到问题所在。
您可以查看运行Profiler打开报表时发生的情况吗?使用事件启动跟踪审核登录,审核注销,异常,SQL:Stmt:正在启动/已完成。在您尝试打开报告后,请检查结果并告知我们。
建议:当查询变得复杂并且SSRS开始抱怨时,将查询包装到数据库内的视图或存储过程中,在SSMS中测试新的(更简单的)查询,然后查看相同的简单查询是否在SSRS中有效。
在所有情况下,使用SQL Server Profiler和其他诊断工具来查看数据库实际执行的操作。
看起来像超时问题...但请尝试以下方法:
如果要确保不使用相同的执行计划,请尝试选项(重新编译)以使用其他计划。
这可能/可能不会导致解决问题,但至少您将缩小范围并检索您在SSMS中执行的数据。
尝试从写入数据库中读取时遇到此错误。
SQLEXCEPTION: Transaction was deadlocked on lock resources with another process and has been chosen as the deadlock victim.
这将导致您描述的SSRS行为,并在日志中显示此线索:
---> 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.)
如果这是您的问题,请尝试以下方法:
一个新的答案促使我写这个答案来解决这个问题,虽然这还没有完全验证,但据我所知,在更高版本的SQL Server工具中不会出现这个问题(即现在跨工具的相同结果)发生)。
原因(来自内存)是SSMS与SSRS使用不同的客户端连接,在2008版本中我认为SSRS使用ADO.Net连接器而SSMS使用的是不同的东西(不记得它现在是什么)。
在研究这个问题(5 - 6年前)时我遇到了一篇旧文章,它基本上在SQL Server堆栈工具之间布置了不同的客户端连接类型(我现在尝试再次搜索30分钟才找到它,但是鉴于这些工具现在已有10年历史,我找不到它是不成功的。我还记得在2012年或2014年发布时,微软发表了一篇文章,称客户类型将在所有工具中标准化。
因此,除非您使用的是2008工具(或更低版本),否则您将无法遇到SSMS中工作但SSRS失败的问题,它可能在两者中都失败,或者在两者中都有效。
如果您仍在使用SSMS 2008,我相信您可以设置高级查询执行选项,请尝试在以下位置查找连接客户端类型选项:
Tools > Options... > Query Execution > SQL Server > General
Tools > Options... > Query Execution > SQL Server > Advanced