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 分配器分配的内存。
如果给定数据库已存在绑定,该过程将返回错误。 数据库不能有多个活动绑定。
语法
sys.sp_xtp_bind_db_resource_pool
[ @database_name = ] 'database_name'
, [ @resource_pool_name = ] 'resource_pool_name'
[ ; ]
参数
[ @database_name = ] 'database_name'
已启用内存中 OLTP 的现有数据库的名称。 @database_name 为 sysname。
[ @resource_pool_name = ] 'resource_pool_name'
现有资源池的名称。 @resource_pool_name 为 sysname。
消息
发生错误时,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 权限。