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


sys.sp_persistent_version_cleanup (Transact-SQL)

Применимо к: SQL Server 2019 (15.x) и более поздних версий базы данных SQLAzure Для Управляемого экземпляраSQL Azure в Microsoft Fabric

Вручную запускает процесс очистки хранилища постоянных версий (PVS), ключевой элемент ускоренного восстановления базы данных (ADR). Это средство также удаляет незафиксированные данные в PVS из прерванных транзакций.

Обычно не требуется запускать процесс очистки PVS вручную sys.sp_persistent_version_cleanup. Однако в некоторых сценариях может потребоваться инициировать процесс очистки PVS вручную в течение известного периода отдыха или восстановления после занятого действия OLTP.

Дополнительные сведения об ADR см. в ускоренного восстановления базы данных.

Соглашения о синтаксисе Transact-SQL

Синтаксис

sp_persistent_version_cleanup
    [ [ @dbname = ] N'dbname' ]
    [ , [ @scanallpages = ] scanallpages ]
    [ , [ @clean_option = ] clean_option ]
[ ; ]

Аргументы

[ @dbname = ] N'dbname'

Необязательно. Имя базы данных для очистки. Если он не указан, использует текущий контекст базы данных. @dbname — sysname с значением по умолчаниюNULL.

[ @scanallpages = ] scanallpages

Необязательно. @scanallpages бит с значением по умолчанию0. Если задано значение 1, этот параметр принудительно очищает все страницы базы данных, даже если версия не установлена.

[ @clean_option = ] clean_option

Необязательно. Возможные параметры определяют, следует ли отказаться от страницы PVS вне строки. @clean_option имеет значение int с значением по умолчанию0. Эта ссылка обычно не требуется, поэтому рекомендуется использовать значение 0 по умолчанию.

значение Описание
0 По умолчанию параметр не указан
1 Хранилище версий вне строки без проверки содержимого страницы PVS
2 Хранилище версий вне строки с каждой страницей PVS
3 Только хранилище версий в строке
4 только внутреннее использование

Значения кода возврата

0 (успешно) или 1 (сбой).

Результирующий набор

Нет.

Разрешения

Требуется разрешение ALTER для базы данных.

Замечания

Хранимая sys.sp_persistent_version_cleanup процедура синхронна, что означает, что она не завершается до очистки всех сведений о версии из текущего PVS.

В SQL Server 2019 (15.x) процесс очистки PVS выполняется только для одной базы данных одновременно. В База данных SQL Azure и Управляемый экземпляр SQL Azure и начиная с SQL Server 2022 (16.x), процесс очистки PVS может выполняться параллельно с несколькими базами данных в одном экземпляре.

Если процесс очистки PVS уже запущен в требуемой базе данных, эта хранимая процедура блокируется перед началом другого процесса очистки PVS. Активные длительные транзакции в любой базе данных в одном экземпляре ядра СУБД с включенным ADR также могут блокировать очистку PVS.

Вы можете отслеживать задачу очистки версии, выполнив поиск процесса с помощью следующего примера запроса:

SELECT *
FROM sys.dm_exec_requests
WHERE command LIKE '%PERSISTED_VERSION_CLEANER%';

Активная транзакция может предотвратить запуск процесса очистки PVS. В этом случае сеанс, на котором выполняется хранимая процедура sys.sp_persistent_version_cleanup, ожидается с типом ожидания PVS_CLEANUP_LOCK. Вы можете дождаться завершения транзакции или по возможности рассмотреть возможность убийства сеанса блокировщика с активной транзакцией.

Если ADR отключен, выполните очистку sys.sp_persistent_version_cleanup предыдущих версий по-прежнему в PVS.

Примеры

Чтобы активировать процесс очистки PVS вручную между рабочими нагрузками или во время обслуживания, используйте следующий пример сценария:

EXECUTE sys.sp_persistent_version_cleanup [database_name];

Например:

EXECUTE sys.sp_persistent_version_cleanup [WideWorldImporters];

Или предположить текущий контекст базы данных:

USE [WideWorldImporters];
GO

EXECUTE sys.sp_persistent_version_cleanup;