我的SSIS包因上述错误而失败。
数据库的查询调控器限制为300
我在数据流任务执行语句之前尝试将“执行SQL”任务添加到我的包中:
SET QUERY_GOVERNOR_COST_LIMIT 0
这显示在程序包执行期间成功,但我的数据流任务仍然失败,并将限制报告为300.
来源:“Microsoft SQL Server Native Client 10.0”Hresult: 0x80004005描述:“查询已被取消,因为 此查询的估计成本(336)超过配置的阈值 300.联系系统管理员。“。结束错误
如何在数据流任务中覆盖此设置?
答案 0 :(得分:4)
除非你在包装上设置了“保留相同的连接”属性,这不是我对它的价值的偏好,你所遇到的是documentation所说的。
Using SET QUERY_GOVERNOR_COST_LIMIT applies to the current connection only
and lasts the duration of the current connection
在包中,为Execute SQL Task打开一个连接,发出查询调控器语句并终止该任务。然后,在数据流任务中使用新的/不同的连接作为OLE DB源(或ADO.NET源)的一部分。这种联系并没有改变州长的成本,因此它受制于QG。
要解决此问题,您需要在数据流中修改源代码。假设您刚刚选择了所需的表,则需要将单选按钮从表源切换到查询源(名称近似)。作为此查询的源,您将使用类似
的内容SET QUERY_GOVERNOR_COST_LIMIT 0;
SELECT
MT.*
FROM
dbo.MyTable AS MT;
鉴于目标表正在推动QG限制,快速而肮脏的方法是修改Destination的Connection Manager以将RetainSameConnection属性设置为True。这将确保目标转换中的相同连接已经修改了成本。有一个屏幕截图,你在这个问题的答案中设置了这个
SSIS: Default Logging OnError don't work with RetainSameConnection
可能有效的其他方法是修改数据加载以减少查询(插入)成本。
答案 1 :(得分:4)
有一种方法可以为整个服务器更改它,在SSMS中使用GUI选项
1.在“服务器属性”对话框中,转到“连接”页面
2.选择“使用查询调控器防止长时间运行查询”选项
3.在该选项下方的框中,键入最大查询成本限制。有效范围是0到2,147,483,647。值为0将禁用查询调控器;任何其他值设置最大查询成本限制
4.单击“确定”。
来源:Technet Article: Use the Query Governor to Control Excessive Query Execution