Поделиться через


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 с поддержкой OLTP в памяти. @database_name — sysname.

[ @resource_pool_name = ] 'resource_pool_name'

Имя существующего пула ресурсов. @resource_pool_name — sysname.

Сообщения

При возникновении ошибки sp_xtp_bind_db_resource_pool возвращает одно из этих сообщений.

База данных не существует

@database_name должна ссылаться на существующую базу данных. Если база данных с указанным идентификатором отсутствует, возвращается следующее сообщение:

Идентификатор базы данных %d не существует. Используйте допустимый идентификатор базы данных для этой привязки.

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. Если пул с указанным идентификатором отсутствует, возвращается следующая ошибка:

Пул ресурсов %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.

Привязка ресурсов успешно создана между базой данных с идентификатором %d и пулом ресурсов с идентификатором %d.

Примеры

А. В следующем примере кода база данных Hekaton_DB привязывается к пулу Pool_Hekatonресурсов.

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

Привязка вступит в силу при следующем переводе базы данных в режим «в сети».

B. Эта расширенная версия предыдущего примера включает некоторые дополнительные проверки. Выполните следующую команду Transact-SQL в SQL Server Management Studio:

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.