Gerenciar recuperação acelerada de banco de dadosManage accelerated database recovery

APLICA-SE A: simSQL Server nãoBanco de Dados SQL do Azure nãoAzure Synapse Analytics (SQL DW) nãoParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Habilitar e controlar a ADREnabling and controlling ADR

A ADR está desativada por padrão no SQL Server 2019 (15.x)SQL Server 2019 (15.x) e pode ser controlada usando a sintaxe DDL:ADR is off by default in SQL Server 2019 (15.x)SQL Server 2019 (15.x), and can be controlled using DDL syntax:

ALTER DATABASE [DB] SET ACCELERATED_DATABASE_RECOVERY = {ON | OFF}
[(PERSISTENT_VERSION_STORE_FILEGROUP = { filegroup name }) ];

Use essa sintaxe para controlar se o recurso está ativado ou desativado e atribua um grupo de arquivos específico para os dados do PVS (repositório de versão persistente) .Use this syntax to control whether the feature is on or off, and designate a specific filegroup for the persistent version store (PVS) data. Se nenhum grupo de arquivos for especificado, o PVS será armazenado no grupo de arquivos PRIMARY.If no filegroup is specified, the PVS will be stored in the PRIMARY filegroup.

Gerenciar o grupo de arquivos de repositório de versão persistenteManaging the persistent version store Filegroup

O recurso ADR baseia-se na existência das alterações com controle de versão, com versões diferentes de um elemento de dados mantidas no PVS.The ADR feature is based on having changes versioned, with different versions of a data element kept in the PVS. Há considerações para localizar onde o PVS está localizado e como gerenciar o tamanho dos dados no PVS.There are considerations to locating where the PVS is located and in how to manage the size of the data in the PVS.

Para habilitar a ADR sem especificar um grupo de arquivosTo enable ADR without specifying a filegroup

ALTER DATABASE [MyDatabase] SET ACCELERATED_DATABASE_RECOVERY = ON;
GO

Nesse caso, quando o grupo de arquivos de PVS não é especificado, o grupo de arquivos PRIMARY mantém os dados de PVS.In this case, when the PVS filegroup is not specified, the PRIMARY filegroup holds the PVS data.

Para habilitar a ADR e especificar que o PVS deve ser armazenado no grupo de arquivos [VersionStoreFG]To enable ADR and specify that the PVS should be stored in the [VersionStoreFG] filegroup

Antes de executar esse script, crie o grupo de arquivos.Before running this script, create the filegroup.

ALTER DATABASE [MyDatabase] SET ACCELERATED_DATABASE_RECOVERY = ON
(PERSISTENT_VERSION_STORE_FILEGROUP = [VersionStoreFG])

Para desabilitar o recurso de ADRTo disable the ADR feature

ALTER DATABASE [MyDatabase] SET ACCELERATED_DATABASE_RECOVERY = OFF;
GO

Mesmo depois que o recurso ADR estiver desabilitado, haverá versões armazenadas no repositório de versão persistente que ainda serão necessárias para a reversão lógica do sistema.Even after the ADR feature is disabled, there will be versions stored in the persistent version store that are still needed by the system for logical revert.

Alterar o local do PVS para um grupo de arquivos diferenteChange the location of the PVS to a different filegroup

Talvez seja necessário mover o local do PVS para um grupo de arquivos diferente por vários motivos.You may need to move the location of the PVS to a different filegroup for a variety of reasons. Por exemplo, o PVS pode exigir mais espaço ou um armazenamento mais rápido.For example, PVS may require more space, or faster storage.

Alterar o local do PVS é um processo de três etapas.Changing the location of the PVS is a three-step process.

  1. Desative o recurso de ADR.Turn the ADR feature off.

    ALTER DATABASE [MyDatabase] SET ACCELERATED_DATABASE_RECOVERY = OFF;
    GO
    
  2. Aguarde até que todas as versões armazenadas no PVS possam ser liberadasWait until all of the versions stored in the PVS can be freed

    Para poder ativar a ADR com um novo local para o repositório de versão persistente, você deve primeiro verificar se todas as informações de versão foram limpas do local do PVS anterior.In order to be able to turn on ADR with a new location for the persistent version store, you must first make sure that all of the version information has been purged from the previous PVS location. Para forçar essa limpeza a acontecer, execute o comando:In order to force that cleanup to happen, run the command:

    EXEC sys.sp_persistent_version_store_cleanup [database name]
    

    O procedimento armazenado sys.sp_persistent_version_store_cleanup é síncrono, o que significa que ele não será concluído até que todas as informações de versão sejam limpas do PVS atual.sys.sp_persistent_version_store_cleanup stored procedure is synchronous, meaning that it will not complete until all version information is cleaned up from the current PVS. Após a conclusão, você pode verificar se as informações de versão são realmente removidas consultando o DMV sys.dm_persistent_version_store_stats e examinando o valor de persistent_version_store_size_kb.Once it completes, you can verify that the version information is indeed removed by querying the DMV sys.dm_persistent_version_store_stats and examining the value of persistent_version_store_size_kb.

    SELECT DB_Name(database_id), persistent_version_store_size_kb 
    FROM sys.dm_tran_persistent_version_store_stats where database_id = [MyDatabaseID]
    

    Quando o valor de persistent_version_store_size_kb é 0, você pode reabilitar o recurso de ADR, configurando o PVS para ficar localizado no novo grupo de arquivos.When the value of persistent_version_store_size_kb is 0, you can re-enable the ADR feature, configuring the PVS to be located in the new filegroup.

  3. Ativar a ADR especificando o novo local do PVSTurn on ADR specifying the new location for PVS

    ALTER DATABASE [MyDatabase] SET ACCELERATED_DATABASE_RECOVERY = ON
    (PERSISTENT_VERSION_STORE_FILEGROUP = [VersionStoreFG])
    

Solução de problemasTroubleshooting

Consulte sys.dm_tran_persistent_version_store_stats para verificar os tamanhos de PVS.Query sys.dm_tran_persistent_version_store_stats to check PVS sizes.

Verifique o tamanho de % of DB.Check % of DB size. Observe também a diferença do tamanho típico.Also note the difference from typical size.

O PVS será considerado grande se for significativamente maior do que a linha de base ou se estiver perto de 50% do tamanho do banco de dados.PVS is considered large if it's significantly larger than baseline or if it is close to 50% of the size of the database.

  1. Recupere oldest_active_transaction_id e verifique se essa transação esteve ativa por muito tempo, consultando sys.dm_tran_database_transactions com base na ID da transação.Retrieve oldest_active_transaction_id and check whether this transaction has been active for a really long time by querying sys.dm_tran_database_transactions based on the transaction ID.

    As transações ativas impedem a limpeza do PVS.Active transactions prevent cleaning up PVS.

  2. Se o banco de dados fizer parte de um grupo de disponibilidade, verifique o secondary_low_water_mark.If the database is part of an availability group, check the secondary_low_water_mark. Isso é o mesmo que o low_water_mark_for_ghosts relatado por sys.dm_hadr_database_replica_states.This is the same as the low_water_mark_for_ghosts reported by sys.dm_hadr_database_replica_states. Consulte sys.dm_hadr_database_replica_states para ver se uma das réplicas contém esse valor por trás, pois isso também impedirá a limpeza do PVS.Query sys.dm_hadr_database_replica_states to see whether one of the replicas is holding this value behind, since this will also prevent PVS cleanup.

  3. Verifique min_transaction_timestamp (ou online_index_min_transaction_timestamp se o PVS online está se mantendo) e, com base nisso, verifique sys.dm_tran_active_snapshot_database_transactions para a coluna transaction_sequence_num para localizar a sessão que tem a transação de instantâneo antiga que contém a limpeza do PVS.Check min_transaction_timestamp (or online_index_min_transaction_timestamp if the online PVS is holding up) and based on that check sys.dm_tran_active_snapshot_database_transactions for the column transaction_sequence_num to find the session that has the old snapshot transaction holding up PVS cleanup.

  4. Se nenhuma das alternativas acima se aplica, isso significa que a limpeza está sendo impedida devido a transações anuladas.If none of the above applies, then it means that the cleanup is held by aborted transactions. Verifique pela última vez o aborted_version_cleaner_last_start_time e o aborted_version_cleaner_last_end_time para ver se a limpeza da transação anulada foi concluída.Check the last time the aborted_version_cleaner_last_start_time and aborted_version_cleaner_last_end_time to see if the aborted transaction cleanup has completed. O oldest_aborted_transaction_id deve ser movido para cima depois que a limpeza da transação anulada é concluída.The oldest_aborted_transaction_id should be moving higher after the aborted transaction cleanup completes.

  5. Se a transação anulada não foi concluída com êxito recentemente, verifique o log de erros em busca de mensagens relatando problemas de VersionCleaner.If the aborted transaction hasn’t completed successfully recently, check the error log for messages reporting VersionCleaner issues.