【问题标题】:Several cursors at once一次有几个游标
【发布时间】:2014-06-20 06:29:18
【问题描述】:

有一个表#Costs (id,tree_id,date,value) 保存调用sp exec sp @tree_id,@date,@value output 的信息,以便计算由tree_id 标识的复杂服务例程。为了把@value cursor 使用。
如何使多个游标与同一个#Costs 表一起工作? Costs -> 带有 sp 的游标中的许多行运行时间很长。我无法转向内联函数或简化具有许多内部 sp 调用、临时插入/更新等的 sp 逻辑。
并行游标的方法是什么?我可以避免使用代理作业或服务代理吗?

【问题讨论】:

    标签: sql-server multithreading stored-procedures sql-server-2008-r2 cursor


    【解决方案1】:

    由于您给出的问题没有(IMO)足够详细的信息,因此我将给出一个我过去曾用于类似问题的通用解决方案。 基本上,我将工作负载分成“桶”,然后调用几个存储过程来针对给定的桶运行工作负载。在我的情况下,我使用单独的 powershell 实例来执行 SP,因为我正在移动大量日志文件,但代理作业也可以完成这项工作。当然,只要确保每个“桶”都可以独立处理。

    性能确实提高了,但请注意锁定和闩锁活动以及其他瓶颈,在我的情况下,我发现收益递减点,每个存储桶大约 1 个核心似乎对我有用。

    如果您愿意使用 .NET,如果您不想在代理中设置作业,这是另一种选择:SqlCommand.BeginExecuteNonQuery http://msdn.microsoft.com/en-us/library/7b6f9k7k%28v=vs.110%29.aspx

    【讨论】:

    • 你从哪里调用 powershell 实例。请问您有解决方法吗?
    • 我打开了几个 shell 并从那里运行(通过窗口监视输出)。但是,对于自动化和计划的事情,我认为代理工作将是要走的路。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 2015-01-19
    • 1970-01-01
    相关资源
    最近更新 更多