服务器配置:光标阈值

适用范围:SQL Server

本文介绍如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 中配置 cursor threshold 服务器配置选项。 cursor threshold 选项指定光标集中的行数,超过此行数,将异步生成光标键集。 当光标为结果集生成键集时,查询优化器会估算将为该结果集返回的行数。 如果查询优化器估算出的返回行数大于此阈值,则将异步生成游标,使用户能够在继续填充游标的同时从该游标中提取行。 否则,同步生成游标,查询将一直等待到返回所有行。

限制

SQL Server 不支持异步生成由键集驱动的或静态的 Transact-SQL 光标。 Transact-SQL 光标操作(如 OPENFETCH)均为批处理,所以无需异步生成 Transact-SQL 光标。 由于每个光标操作都需要进行客户端往返,因此 SQL Server 继续支持异步的由键集驱动的或静态的应用程序编程接口 (API) 服务器光标,对于这些光标,OPEN 实现低滞后时间很重要。

查询优化器估计键集中行数的准确性取决于游标中每个表统计信息的当前值。

建议

此选项是一个高级选项,应仅由经验丰富的数据库专业人员更改。

如果将 cursor threshold 设置为 -1,则所有键集都会同步生成,这对小光标集有益。 如果将 cursor threshold 设置为 0,则将异步生成所有光标键集。 如果设置为其他值,则查询优化器将比较光标集中的预期行数,并在该行数超过 cursor threshold 中设置的数量时异步生成键集。 不要将 cursor threshold 设置得过低,因为最好以同步方式创建小结果集。

权限

默认情况下,所有用户都具备不带参数或仅带第一个参数的 sp_configure 的执行权限。 若要使用两个参数执行 sp_configure 来更改配置选项或运行 RECONFIGURE 语句,用户必须拥有 ALTER SETTINGS 服务器级别权限。 ALTER SETTINGS 权限由 sysadmin 和 serveradmin 固定服务器角色隐式拥有。

使用 SQL Server Management Studio

  1. 在对象资源管理器中,右键单击服务器并选择 “属性”

  2. 选择“高级”节点。

  3. 在“其他”下,将 cursor threshold 选项更改为所需的值。

使用 Transact-SQL

  1. 连接到 数据库引擎。

  2. 在标准栏上,选择“新建查询”。

  3. 将以下示例复制并粘贴到查询窗口中,然后选择“执行”。 此示例说明如何使用 sp_configurecursor threshold 选项设置为 0 ,以便异步生成游标键集。

    USE master;
    GO
    
    EXECUTE sp_configure 'show advanced options', 1;
    GO
    
    RECONFIGURE;
    GO
    
    EXECUTE sp_configure 'cursor threshold', 0;
    GO
    
    RECONFIGURE;
    GO
    
    EXECUTE sp_configure 'show advanced options', 0;
    GO
    
    RECONFIGURE;
    GO
    

有关详细信息,请参阅服务器配置选项

跟进:在配置 cursor threshold 选项之后

该设置将立即生效,无需重新启动服务器。