In-Memory DB–Recovering_Pending (XTP_CheckPoint)

Posted on abril 9, 2014

2


Esse Artigo se aplica a – Realização de um Restore de uma Base de Dados In-Memory assim como o espaço destinado ao Hekaton no Servidor de Banco de Dados

Verificando as bases de dados, vi que uma das mesmas constavam como Recovering_Pending, como primeira solução, verifiquei o Log_Reuse_Wait_Desc e me deparei com o seguinte alerta no log – XTP_CheckPoint.

Para soluções de Recovering_Pending e como aprender a utilizar o Log_Reuse_Wait_Desc veja esse excelente post do Paul Randal – http://www.sqlskills.com/blogs/paul/search-engine-qa-4-using-emergency-mode-to-access-a-recovery-pending-or-suspect-database/

 

Porém para Banco de Dados In-Memory o comportamento é um pouco diferente, até porque temos novos tipos de Log_Reuse_Wait_Desc vejamos quais são os passos para lidar com esse problema.

BlogPost - XTP_Checkpoint

(Figura 1 – Base de Dados – DB_Atendimentos em Recovery Pending, Visualização do Log_Reuse_Wait_Desc.)

 

Passo 1 – Colocar a Base de Dados em Emergency

ALTER DATABASE [DB_Atendimentos] SET EMERGENCY

 

BlogPost - ii - Emergency

(Figura 2 – Base de Dados – DB_Atendimentos em Emergency.)

 

Colocando a Base de Dados em Emergency o próximo passo e tentar colocar a Base de Dados ONLINE

Passo 2 – Colocar a Base de Dados ONLINE

ALTER DATABASE [DB_Atendimentos] SET ONLINE

O erro recebido foi….

Msg 5181, Level 16, State 5, Line 13

Could not restart database "DB_Atendimentos". Reverting to the previous status.

Msg 5069, Level 16, State 1, Line 13

ALTER DATABASE statement failed.

Msg 701, Level 17, State 9, Line 11

There is insufficient system memory in resource pool ‘internal’ to run this query.

 

O erro gerado é referente ao Internal Resource Pool. Esse erro está ligado a quantidade de memória disponível no servidor para a Bases de Dados In-Memory, isso quer dizer que não há memória disponível, por isso e por outros motivos que é sempre importante realizar a configuração do Resource Pool para a utilização do Hekaton no SQL Server – https://luanmorenodba.wordpress.com/2014/03/20/controlando-tabelas-in-memory-oltp-hekaton-com-o-resource-governor/

Esses erros são relatador como erro de OOM – Out of Memory – http://msdn.microsoft.com/en-us/library/dn465874(v=sql.120).aspx

20140405 01:11:20.58 spid43s     [ERROR] Database ID: [7]. Log redo failed with ‘0x83000000’ for operation 3. (e:\sql12_main_t\sql\ntdbms\hekaton\engine\hadr\recmgr.cpp : 1319 ‘HkRedoMgr::RedoLogRecords’)

20140405 01:11:20.58 spid43s     Error: 701, Severity: 17, State: 9.

20140405 01:11:20.58 spid43s     There is insufficient system memory in resource pool ‘internal’ to run this query.

20140405 01:11:20.58 spid43s     [ERROR] Database ID: [7] ‘DB_Atendimentos’. Failed to redo log record at LSN 00000191:000A0667:0001. Error code: 0x83000000. (e:\sql12_main_t\sql\ntdbms\hekaton\sqlhost\sqlmin\hkhostdb.cpp : 1996 ‘RecoverHkDatabaseApplyTailOfTheLog’)

 

Para que você consiga fazer com que sua Base de Dados fique acessiva novamente, você precisa adicionar mais memória no servidor, ou configurar o Internal Resource Pool para que seja alocado mais do que 80% da memória total da configuração do Max Server Memory.

Essa configuração irá aumentar sua memória, mas mesmo assim pode não ser suficiente para o Restore, se não for, irá ser necessário mais memória no Servidor de Banco de Dados

 

Screen Shot 2014-04-06 at 3.33.02 PM

(Figura 3 – Resource Governor – Internal Pool)

 

Screen Shot 2014-04-06 at 3.33.18 PM

(Figura 4 – Alterando a Configuração do Internal Pool de 80% para 100%)

 

 

Referências

http://technet.microsoft.com/en-us/library/bb933866.aspx

http://msdn.microsoft.com/en-us/library/dn465874(v=sql.120).aspx