Os índices consomem memória?

10

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_unitse 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?

JHFB
fonte
2
"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?
21912 Jon Jones-
Com base nos tempos de consulta estendidos e no Gerenciador de Tarefas - que minha pesquisa indicou ser uma "mentirosa suja e imunda" (obrigado Brent Ozar - brentozar.com/archive/2011/09/… ). Talvez eu descubra que não há problema de memória - estou seguindo todas as sugestões fornecidas nesses comentários e respostas!
JHFB
2
Desde que nós estamos rolando a bola 8 aqui, eu acho que as consultas correr devagar porque eles foram escritos por esse 'outro' desenvolvedor de banco de dados ...
Remus Rusanu

Respostas:

12

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:

select
    count(*) as total_page_count,
    count(*) * 8 as total_consumption_kb,
    sum(row_count) as total_row_count
from sys.dm_os_buffer_descriptors
where page_type = 'INDEX_PAGE'
group by page_type

Para obter essas estatísticas por banco de dados:

select
    db_name(database_id) as database_name,
    count(*) as total_page_count,
    count(*) * 8 as total_consumption_kb,
    sum(row_count) as total_row_count
from sys.dm_os_buffer_descriptors
where page_type = 'INDEX_PAGE'
group by database_id
order by total_consumption_kb desc
Thomas Stringer
fonte
Expectativa de vida da página decente (?) - 4234. Preciso pesquisar a taxa de acertos do cache do buffer e examinar as outras partes.
JHFB
Esse PLE não está mostrando pressão de memória. Qualquer coisa acima de 1000 como regra geral (é claro, sempre há "depende") é aceitável.
9786 Thomas Stringer
A taxa de acertos do cache do buffer pode ser muito enganadora ou inútil. Veja Ótimos debates sobre o SQL Server: taxa de acertos do cache de buffer por @JonathanKehayias.
Mark-Storey-Smith
@ MarkStorey-Smith Notado, obrigado pelo ponteiro!
Thomas Stringer
@JHFB Vamos dar um passo atrás. O que faz você pensar que está com pressão de memória?
Thomas Stringer
7

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.

Confirmei que isso provavelmente é causado pelo uso intenso de índices no banco de dados. A maioria dos índices está agrupada.

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.

Mark Storey-Smith
fonte
+1 que os artigos da Sra Tripp são EPIC em chaves de cluster ...
Fabricio Araujo