Log Cache
O Log Manager é responsável por todas as rotinas relacionadas com a escrita/leitura das informações no log. As informações são gravadas fisicamente em um arquivo de log. Um servidor SQL apresenta um Log Manager por banco de dados e pode ser monitorado através dos contadores do Performance Monitor:
SQLServer:Databases
- Log Bytes Flushed/sec - Quantidade de bytes gravados em disco
- Log Flush Wait Time - Tempo de espera para a gravação em disco
- Log Flushes/sec - Número de gravações (flushes) no arquivo de log
As gravações em disco são feitas usando blocos de memória denominados Log Cache - também chamado de LogTable, que é uma estrutura em memória utilizada para armazenar os registros instantes antes de serem escritos em discos. Durante o processo de gravação de registros, as threads realizam a escrita de registros no Log Cache e o Log Manager realiza a gravação efetiva em disco.
O processo de gravação em log é realizado em duas etapas:
- As threads utilizam uma rotina de gravação no Log Cache, que fica em memória, e espera pela gravação. Múltiplas threads podem inserir novos registros no arquivo de log simultaneamente, entretanto, o acesso ao Log Cache é serializado. Após gravar as informações no cache, a thread aguarda no wait stats = WRITELOG.
- No instante seguinte, o processo de Log Manager correspondente do banco de dados processa o Log Cache ativo e realiza a gravação em disco. Quando os registros de log são gravados efetivamente em disco, o Log Manager sinaliza todas as threads que esperavam por WRITELOG.
No caso do TempDB, o Log Manager utiliza escritas assíncronas para evitar que as threads fiquem esperando pelo arquivo de log, uma vez que não existe processo de recovery do TempDB. Esse comportamento agiliza muito a performance das tabelas temporárias e, por isso, dificilmente observamos esperas por WRITELOG no TempDb.
Comments
- Anonymous
January 20, 2014
The comment has been removed