Estou apenas começando a aprender sobre o uso de memória no SQL Server. Ao usar a consulta na resposta à pergunta SQL Server 2008 R2 "Ghost Memory"? , Descobri que um único banco de dados está ocupando a maior parte do espaço no buffer pool. Olhando além, usando sys.allocation_units
e sys.indexes
, confirmei que isso provavelmente é causado pelo uso intenso de índices no banco de dados. A maioria dos índices está agrupada.
Outro desenvolvedor de banco de dados acredita que estamos com problemas de memória no servidor - que as consultas estão começando a demorar muito, porque não há memória disponível.
Minha pergunta aqui é - o uso desses índices e sua existência no buffer pool retira a memória disponível para outros processos?
"Another database developer believes we are having memory issues on the server"
-- Com base no que? Quanta RAM o servidor possui, quais são as configurações de memória da instância e quanta memória está sendo consumida pelo cache do procedimento?Respostas:
Sim, as páginas de dados de um índice usado que são armazenadas em cache no buffer pool ocuparão espaço no cache de dados . Mas não deixe que isso o desvie do uso de índices (primeiro, um índice agrupado é os dados reais da tabela, lembre-se disso também). O uso de índices (adequadamente projetados e implementados, é claro) é uma coisa boa.
É provável que seus problemas de memória não tenham índices em suas tabelas . Mergulhe nos problemas de memória, quais são exatamente os problemas? Você está com uma baixa expectativa de vida da página ? Como sua memória está configurada no servidor? A memória máxima do servidor está baixa restringindo o tamanho do buffer pool?
Para obter uma análise detalhada das páginas de índice no cache de dados, você pode executar a consulta abaixo:
Para obter essas estatísticas por banco de dados:
fonte
Os índices consomem espaço no buffer pool, sim. Esse é mais um motivo pelo qual você deve tomar cuidado com sua estratégia de indexação e minimizar duplicatas.
Lembre-se de que um índice clusterizado é a tabela . A única sobrecarga que existe para um índice clusterizado além daquele para um heap (o que geralmente é indesejável) é para as páginas de índice que não são folhas e a inclusão da chave de cluster em todos os índices não agrupados para essa tabela. É por isso que as chaves de cluster estreitas são preferidas.
Os artigos de Kimberley Tripp sobre as principais opções agrupadas são uma excelente referência para isso.
fonte