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 アロケーターによって割り当てられたメモリを管理するために、リソース ガバナーによって使用されます。
特定のデータベースのバインドが既に存在する場合、プロシージャはエラーを返します。 1 つのデータベースに複数のアクティブなバインドを設定することはできません。
構文
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 です。
Messages (メッセージ)
エラーが発生すると、 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.
リソース プールが存在しない
@resource_pool_nameによって識別されるリソース プールは、sp_xtp_bind_db_resource_pool
を実行する前に存在する必要があります。 指定した 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.
データベースが既に別のリソース プールにバインドされている
データベースにバインドできるのは、1 度に 1 つのリソース プールだけです。 データベースを別のリソース プールにバインドする前に、リソース プールに対するデータベースのバインドを明示的に削除する必要があります。 「 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 権限が必要です。