Carregar tabelas de banco de dados somente leitura na memória
-
09-06-2019 - |
Pergunta
Em um dos meus aplicativos, tenho uma tabela de banco de dados de 1 GB usada para dados de referência.Ele tem uma grande quantidade de leituras saindo daquela mesa, mas nunca há gravações.Eu queria saber se há alguma maneira de os dados serem carregados na RAM para que não precisem ser acessados a partir do disco?
Estou usando o SQL Server 2005
Solução
Se você tiver RAM suficiente, o SQL fará um excelente trabalho determinando o que carregar na RAM e o que procurar no disco.
Esta pergunta é muito feita e me lembra de pessoas que tentam definir manualmente em qual "núcleo" seu processo será executado - deixe o sistema operacional (ou, neste caso, o banco de dados) fazer o que foi projetado.
Se quiser verificar se o SQL está de fato lendo seus dados de pesquisa fora do cache, você pode iniciar um teste de carga e usar Sysinternals ArquivoMon, Explorador de processos e Monitor de Processo para verificar se a tabela de 1 GB não está sendo lida.Por esse motivo, às vezes colocamos nossos dados de "pesquisa" em um grupo de arquivos separado para que seja muito fácil monitorar quando eles estão sendo acessados no disco.
Espero que isto ajude.
Outras dicas
Você vai querer dar uma olhada no memcached.É o que muitos sites enormes (e bem dimensionados) usavam para lidar com problemas como esse.Se você tiver alguns servidores sobressalentes, poderá configurá-los facilmente para manter a maior parte dos seus dados na memória.
http://en.wikipedia.org/wiki/Memcached
Apenas para esclarecer o problema do sql2005 e superior:
Essa funcionalidade foi introduzida para desempenho no SQL Server versão 6.5.O DBCC Pintable possui efeitos colaterais altamente indesejados.Isso inclui o potencial de danificar o pool de buffer.O DBCC Pintable não é necessário e foi removido para evitar problemas adicionais.A sintaxe para este comando ainda funciona, mas não afeta o servidor.
DBCC PINTABLE fixará explicitamente uma tabela no núcleo se você quiser garantir que ela permaneça em cache.