Os procedimentos armazenados do SQL Server armazenam em cache os resultados dos dados?

11

Eu ouvi isso de amigos, mas nunca investiguei se isso é verdade.

É verdade que os resultados dos dados de uma consulta executada são armazenados no cache?

Quero dizer, se eu tiver um procedimento armazenado como:

SELECT * FROM USERLIST

... é verdade que o resultado (lista de usuários, neste caso) é armazenado em cache.

Além disso, se eu tiver estes:

SELECT * FROM USERLIST WHERE user="user"
SELECT * FROM USERLIST WHERE user="userzzz"

(no qual user / userzzz são passados ​​como parâmetros), é correto que ele armazene 2 resultados diferentes no cache do banco de dados.

Acho que não, mas quero a confirmação de vocês, especialistas!


fonte
acabei de responder agora para você por marc_s stackoverflow.com/questions/8559443/…

Respostas:

19

Os resultados da consulta não são armazenados em cache

No entanto, a tabela de origem e os dados e metadados do índice serão armazenados em cache após o 1º uso (sujeito a uso continuado, carga e pressão de memória)

Ou seja, os resultados de uma consulta serão avaliados a cada execução, mas as tabelas (e quaisquer índices etc.) usados ​​pela consulta provavelmente já estarão na memória.

O plano de execução compilado será armazenado em cache e é daí que vem a confusão, suspeito

gbn
fonte
"Ou seja, os resultados de uma consulta serão avaliados a cada execução, mas as tabelas (e quaisquer índices etc.) usados ​​pela consulta provavelmente já estarão na memória". : sim, também eu não uso SP, eu acho ... isso é uma otimização de banco de dados, isso não importa com Sp, certo?
@markzzz: quase todo SQL é compilado em um plano de execução, seja um UPDATE direto, SELECT ou um procedimento armazenado
gbn
6

Quando um procedimento armazenado é executado, ele é otimizado e compilado e o plano de consulta é colocado no cache do procedimento.

Os procedimentos permanecem no cache para outros usuários, desde que haja espaço. Os procedimentos são removidos usando o algoritmo menos usado recentemente (LRU).


Embora a execução inicial de um procedimento armazenado exija recuperação de procedimentos do sistema no disco, é possível, para execuções subseqüentes, recuperar o plano otimizado do cache do procedimento. Esse comportamento pode levar a um ganho significativo de desempenho.

Portanto, o que está no cache é o plano otimizado do procedimento armazenado e não os resultados do procedimento armazenado.

aF.
fonte
6

Quando uma consulta está pronta para ser processada pelo SQL Server, o SQL Manager a pesquisa cache; e se não estiver lá, deve ser compilado. O processo de compilação abrange algumas coisas.

Quando um procedimento armazenado é executado, ele é otimizado e compilado. de acordo com isso, um plano de consulta é colocado no cache do procedimento.

Verifique a Compilation and Executionseção Internos e arquitetura do processador de consultas do Microsoft SQL Server para obter informações detalhadas sobre o processamento de consultas, etc.

O produto final da fase de compilação é um plano de consulta, que é colocado no cache do procedimento. O resultado / operação da consulta SQL pode ter tamanho em MB, GB, portanto não é colocado no cache do procedimento ou no plano de consulta.

Verifique o diagrama a seguir (do MSDN) para obter a execução do procedimento armazenado para esclarecer suas dúvidas: insira a descrição da imagem aqui

Niranjan Singh
fonte
-1

O SQL Server basicamente executa essas etapas para executar qualquer consulta (chamada de procedimento armazenado ou instrução SQL ad-hoc):

1) verifique sintaticamente a consulta
2) se estiver tudo bem - ele verifica o cache do plano para ver se ele já possui um plano de execução para essa consulta
3) se existe um plano de execução - esse plano é (re) usado e a consulta executada
4) se ainda não houver um plano, é determinado um plano de execução
5) esse plano é armazenado no cache do plano para reutilização posterior
6) a consulta é executada

(cópia da resposta de Marc_s)

Nighil
fonte
-1

Como outros já declararam, os resultados da consulta no SQL Server não são armazenados em cache.

Se você deseja armazenar em cache os resultados de uma consulta (ou um SP), existem soluções alternativas. Por exemplo, consulte este artigo no site do Brent Ozar .

pedrofernandes
fonte