Artigo no estilo Mentoring
As informações que serão fornecidas podem ser utilizadas para verificar se um determinado ambiente está bem configurado, ou simplesmente para instalar um novo SQL Server seguindo as melhores práticas e recomendações da Microsoft, evitando dessa maneira problemas futuros.
Em seu dia a dia, o DBA pode se deparar com a necessidade de avaliar novos ambientes que não foram instalados e nem configurados por ele. Essa verificação de diversos pontos, com objetivo de garantir que o SQL Server está bem configurado, pode beneficiar bancos de dados que estejam passando, por exemplo, por problemas de performance, pois configurações incorretas muitas vezes são as causas de instabilidade e lentidão. Essa avaliação geral é também conhecida como Health Check.
O foco da análise descrita neste artigo estará na infraestrutura, especificamente nas configurações do SQL Server e na organização do ambiente. As partes avaliadas serão divididas nas seguintes categorias: memória, CPU, I/O, bancos de dados, tempdb, índices e estatísticas e integridade de dados.
Memória
É um recurso de extrema importância, pois todas as manipulações de dados são feitas em memória. Quando um select é efetuado, o SQL Server busca esses dados em disco e os carrega em memória para, posteriormente, retorná-los à aplicação. Se um dado é inserido, apagado ou alterado, isso também é feito em memória, para depois ser efetivado em disco nos log files e data files.
A principal área de memória do SQL Server é o buffer pool, no qual o espaço é dividido entre os diversos mecanismos do banco de dados. A maior e mais importante parte do buffer pool é o data cache, onde as páginas de dados de tabelas e índices são armazenadas para serem alteradas ou lidas. No buffer pool, também temos caches reservados para armazenar locks, planos de execução de queries e procedures entre outros.
Nos próximos subtópicos, serão mostradas algumas configurações importantes para um uso eficiente da memória pelo SQL Server.
Policy Lock Pages in Memory
Caso tenha permissão nessa policy do Windows, o SQL Server irá evitar que o sistema operacional faça paginação dos dados da memória do data cache para disco. Se isso ocorrer, o banco de dados pode sofrer problemas de performance, pois terá que acessar o disco para carregar os dados necessários novamente para a memória.
A ocorrência dessa paginação pode ser verificada no error log do SQL Server. Mensagens similares a esta serão mostradas: “A significant part of sql server process memory has been paged out. This may result in a performance degradation. Duration: 0 seconds. Working set (KB): 2007640, committed (KB): 4594040, memory utilization: 43%.”.
Para ativar essa funcionalidade, basta conceder permissão na policy do Windows Lock Pages in Memory ao usuário que sobe os serviços do SQL Server. É necessário um restart do serviço do SQL para que a mudança seja efetivada.
A Figura 1 mostra a mensagem que é visualizada no log de erros do SQL quando o Lock Pages in Memory está ativado.
Figura 1. Mensagem no Log que confirma Lock Pages in Memory ativado.
Max Server Memory
Este parâmetro da instância do SQL Server controla qual o máximo de memória disponível que pode ser alocada pelo o SQL Server, especificamente para buffer pool. O valor padrão da instalação é 2147483647 MB, ou seja, o SQL poderá utilizar toda memória disponível do servidor (a não ser que haja um ambiente com mais de dois petabytes de memória RAM).
Deixá-lo no padrão não é uma boa prática, pois isso pode fazer com que pouca memória fique disponível para o sistema operacional caso o banco de dados aloque tudo o que puder. Se isso ocorrer, o Windows causará uma pressão de memória no SQL Server e ele terá que liberar este recurso. Neste caso, o banco de dados sofrerá problemas de performance.
O Max Server Memory dever ser configurado de forma que no mínimo 1 GB fique disponível para o ambiente. Para verificar quanta memória está disponível para o Windows, basta ver o contador Memory: Available MegaBytes no Performance Monitor.
Para verificar como está configurado o parâmetro Max Server Memory, basta executar a procedure sp_configure, conforme o comando a seguir:
sp_configure 'max server memory'
Ele também pode ser verificado através do SQL Server Management Studio, como mostra a Figura 2, nas propriedades da instância. A alteração é feita online e não ca ...