sys.sp_xtp_bind_db_resource_pool (Transact-SQL)

适用范围:SQL Server

将指定的内存中 OLTP 数据库绑定到指定的资源池。 在执行 sys.sp_xtp_bind_db_resource_pool 之前,该数据库和资源池必须都存在。

此系统过程在由 @resource_pool_name 标识的资源调控器池与由@database_name标识的数据库之间创建绑定。 在绑定时,数据库不需要具有任何内存优化对象。 如果缺少内存优化对象,则不会从资源池中提取内存。 资源调控器将使用此绑定来管理内存中 OLTP 分配器分配的内存。

如果给定数据库已存在绑定,该过程将返回错误。 数据库不能有多个活动绑定。

Transact-SQL 语法约定

语法

sys.sp_xtp_bind_db_resource_pool
    [ @database_name = ] 'database_name'
    , [ @resource_pool_name = ] 'resource_pool_name'
[ ; ]

参数

[ @database_name = ] 'database_name'

已启用内存中 OLTP 的现有数据库的名称。 @database_namesysname

[ @resource_pool_name = ] 'resource_pool_name'

现有资源池的名称。 @resource_pool_namesysname

消息

发生错误时,sp_xtp_bind_db_resource_pool 返回以下消息之一。

数据库不存在

@database_name 必须引用现有数据库。 如果没有具有指定 ID 的数据库,则返回以下消息:

数据库 ID %d 不存在。 请对此绑定使用有效的数据库 ID。

Msg 911, Level 16, State 18, Procedure sp_xtp_bind_db_resource_pool_internal, Line 51
Database 'Hekaton_DB213' does not exist. Make sure that the name is entered correctly.

数据库是系统数据库

内存中 OLTP 表无法在系统数据库中创建。 因此,为此类数据库创建内存中 OLTP 内存的绑定无效。 返回以下错误:

Database_name %s 引用系统数据库。 资源池只能绑定到用户数据库。

Msg 41371, Level 16, State 1, Procedure sp_xtp_bind_db_resource_pool_internal, Line 51
Binding to a resource pool is not supported for system database 'master'. This operation can only be performed on a user database.

资源池不存在

执行之前sp_xtp_bind_db_resource_pool,必须存在由@resource_pool_name标识的资源池。 如果没有具有指定 ID 的池,则返回以下错误:

资源池 %s 不存在。 请输入有效的资源池名称。

Msg 41370, Level 16, State 1, Procedure sp_xtp_bind_db_resource_pool_internal, Line 51
Resource pool 'Pool_Hekaton' does not exist or resource governor has not been reconfigured.

Pool_name引用保留的系统池

池名称“INTERNAL”和“DEFAULT”是为系统池保留的。 显式将数据库绑定到其中任一数据库无效。 如果输入了系统池名称,则返回以下错误:

资源池 %s 是系统资源池。 系统资源池可能无法使用此过程显式绑定到数据库。

Msg 41373, Level 16, State 1, Procedure sp_xtp_bind_db_resource_pool_internal, Line 51
Database 'Hekaton_DB' cannot be explicitly bound to the resource pool 'internal'. A database can only be bound only to a user resource pool.

数据库已绑定到另一个资源池

在任何时候,数据库都只能绑定至一个资源池。 必须显式删除与资源池的数据库绑定,才能将数据库绑定至其他池。 请参阅 sys.sp_xtp_unbind_db_resource_pool

数据库 %s 已绑定到资源池 %s。 必须先取消绑定,然后才能创建新绑定。

Msg 41372, Level 16, State 1, Procedure sp_xtp_bind_db_resource_pool_internal, Line 54
Database 'Hekaton_DB' is currently bound to a resource pool. A database must be unbound before creating a new binding.

若成功,则 sp_xtp_bind_db_resource_pool 返回以下消息。

成功绑定

成功后,该函数将返回 SQL Server 错误日志中记录的以下成功消息。

已成功在 ID 为 %d 的数据库与 ID 为 %d 的资源池之间创建资源绑定。

示例

A. 下面的代码示例将数据库 Hekaton_DB 绑定到资源池 Pool_Hekaton

sys.sp_xtp_bind_db_resource_pool N'Hekaton_DB', N'Pool_Hekaton';

下次该数据库联机时,此绑定生效。

B. 上一示例的此扩展版本包括一些额外的检查。 在 SQL Server Management Studio 中执行以下 Transact-SQL:

DECLARE @resourcePool SYSNAME = N'Pool_Hekaton';
DECLARE @database SYSNAME = N'Hekaton_DB';

-- Check whether resource pool exists
IF NOT EXISTS (
        SELECT *
        FROM sys.resource_governor_resource_pools
        WHERE name = @resourcePool
        )
BEGIN
    SELECT N'Resource pool "' + @resourcePool + N'" does not exist or resource governor has not been reconfigured.';
END
-- Check whether database is already bound to a resource pool
ELSE IF EXISTS (
        SELECT p.name
        FROM sys.databases d
        INNER JOIN sys.resource_governor_resource_pools p
            ON d.resource_pool_id = p.pool_id
        WHERE d.name = @database
        )
BEGIN
    SELECT N'Database "' + @database + N'" is currently bound to resource pool "' + @resourcePool + N'". A database must be unbound before creating a new binding.';
END
-- Bind resource pool to database.
ELSE
BEGIN
    EXEC sp_xtp_bind_db_resource_pool @database,
        @resourcePool;
END

要求

@database_name 指定的数据库和资源池 在绑定@resource_pool_name 之前必须存在。

需要 CONTROL SERVER 权限。