BLOG

Melhores práticas no TEMPDB

TEMPDB um assunto recorrente no dia a dia do Database Administrator (DBA), como aplicar as melhores práticas? como minimizar o ponto de falha? Como evitar pontos de gargalos, entre outro.

TEMPDB é um banco de sistema, os chamados System Databases e é considerado um recurso global a nível de instancia do Microsoft SQL Server. Ele é recriado toda vez que iniciamos o serviço e sem ele o SQL não inicia, como assim? Isso mesmo, se por algum motivo o SQL não conseguir recriar o Tempdb durante o processo de start, o SQL não finalizar com sucesso o processo de start do serviço. Por isso e mais um pouco podemos considerar como um ponto de atenção e monitoramento importante.

(Exemplo) ErrorLog SQL Server: Perdendo o Tempdb no Start.

 Clearing tempdb database.
Error: 5123, Severity: 16, State: 1.
CREATE FILE encountered operating system error 3(O sistema não pode encontrar o caminho especificado.) while attempting to open or create the physical file
Error: 17204, Severity: 16, State: 1.
FCB::Open failed: Could not open file C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\Tempdb\tempdb.mdf for file number 1.
Error: 5120, Severity: 16, State: 101.
Unable to open the physical file “C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\Tempdb\tempdb.mdf”. Operating system error 3.
Error: 1802, Severity: 16, State: 4.
CREATE DATABASE failed. Some file names listed could not be created. Check related errors.
Could not create tempdb. You may not have enough disk space available. Free additional disk space by deleting other files on the tempdb drive and then restart SQL Server.
SQL Server shutdown has been initiated
SQL Trace was stopped due to server shutdown. Trace ID = ‘1’. This is an informational message only; no user action is required.

As funções deste banco foram aumentando durante cada ciclo de atualização da Engine e agregando mais importância dentro da instancia, dentre suas funções segue as quais acredito ser mais importantes:

  • Manter objetos temporários como, Tempory Table locais (#) e globais (##).

  • Armazenamento de variáveis do tipo tabela @Table.

  • Controle de Cursores durante execução.

  • Utilizado na Criação/Rebuild de índices quando especificado a clausula (SORT_IN_TEMPDB).

  • Objetos e processamentos internos da Engine como, Sorting, Works Tables, Controle de Versionamento de linhas e objetos, Multiple Active Result Sets (MARS), After Trigger.

  • DBCC CheckDB utiliza as tabelas de trabalho do Tempdb para manter os resultados intermediários e para operações de Sorting.

  • Service Broker.

E entre outras features que possam se apoderar dos poderes do Tempdb. Outro exemplo interessante é referente a “estimativa errada” de memória alocada para execução de uma query. A grosso modo quando o QE (Query Execution) estima a quantidade “errada” de memória, ocorre o processo de Query Memory Spill e o SQL passa a utilizar o Tempdb como “extensão” da RAM para concluir a execução da Query. Mais detalhes (http://www.sqlpassion.at/archive/2011/10/19/query-memory-spills/).

 

Contato

  • (11) ​96922-5992
  • (11) 3090-8421
  • faleconosco@henki.com.br

Onde Estamos

  • R. Barão de Jundiaí, 523
  • Lapa, São Paulo - SP
  • CEP: 05073-010