Le procedure memorizzate di SQL Server memorizzano nella cache i risultati dei dati?


11

Ho sentito questo da amici, ma non ho mai indagato se questo è vero.

È vero che i risultati dei dati di una query eseguita sono memorizzati nella cache?

Voglio dire, se ho una procedura memorizzata come:

SELECT * FROM USERLIST

... è vero che il risultato (elenco di utenti, in questo caso) è memorizzato nella cache.

Inoltre, se ho questi:

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

(in cui user / userzzz vengono passati come parametri), è corretto che memorizza 2 risultati diversi nella cache del database.

Non credo, ma voglio la tua conferma, esperti!


appena risposto oggi per voi da marc_s stackoverflow.com/questions/8559443/...

Risposte:


19

I risultati della query non vengono memorizzati nella cache

Tuttavia, la tabella di origine, i dati e i metadati dell'indice verranno memorizzati nella cache dopo il 1 ° utilizzo (soggetto a uso continuato, carico e pressione della memoria)

Vale a dire, i risultati di una query verranno valutati ogni esecuzione ma le tabelle (e tutti gli indici ecc.) Utilizzate dalla query molto probabilmente saranno già in memoria.

Il piano di esecuzione compilato verrà memorizzato nella cache, il che sospetta provenga dalla confusione


"Cioè, i risultati di una query verranno valutati ad ogni esecuzione, ma le tabelle (e qualsiasi indice ecc.) Utilizzate dalla query molto probabilmente saranno già in memoria." : sì, anche io non uso SP credo ... è un'ottimizzazione del database, non importa con Sp, giusto?

@markzzz: quasi tutto l'SQL è compilato in un piano di esecuzione, sia un AGGIORNAMENTO diretto, SELEZIONARE o una procedura memorizzata
gbn

6

Quando viene eseguita una procedura memorizzata, viene ottimizzata e compilata e il piano di query viene inserito nella cache delle procedure.

Le procedure rimangono nella cache per altri utenti, purché vi sia spazio. Le procedure vengono rimosse utilizzando l'algoritmo usato meno di recente (LRU).


Mentre l'esecuzione iniziale di una procedura memorizzata richiede il recupero dalle procedure di sistema su disco, è possibile, per le esecuzioni successive, recuperare semplicemente il piano ottimizzato dalla cache delle procedure. Questo comportamento può portare a un significativo aumento delle prestazioni.

Quindi, ciò che è nella cache è il piano ottimizzato della procedura memorizzata e non i risultati della procedura memorizzata.


6

Quando una query è pronta per essere elaborata da SQL Server, SQL Manager la cerca cache; e se non è presente, deve essere compilato. Il processo di compilazione comprende alcune cose.

Quando viene eseguita una stored procedure, viene ottimizzata e compilata. in base a ciò un piano di query viene inserito nella cache delle procedure.

Consultare la Compilation and Executionsezione Interni e architettura del processore di query di Microsoft SQL Server per informazioni dettagliate sull'elaborazione della query, ecc.

Il prodotto finale della fase di compilazione è un piano di query, che viene inserito nella cache delle procedure. Il risultato / operazione della query SQL potrebbe avere dimensioni in MB, GB, quindi non viene inserito nella cache delle procedure o nel piano di query.

Controllare il diagramma seguente (da MSDN) per l'esecuzione della procedura memorizzata per chiarire la domanda: inserisci qui la descrizione dell'immagine


-1

In sostanza, SQL Server esegue questi passaggi per eseguire qualsiasi query (chiamata di procedura memorizzata o istruzione SQL ad hoc):

1) controlla sinteticamente la query
2) se va bene - controlla la cache del piano per vedere se ha già un piano di esecuzione per quella query
3) se esiste un piano di esecuzione - quel piano viene (ri) utilizzato e la query eseguita
4) se non esiste ancora un piano, viene determinato un piano di esecuzione
5) quel piano viene archiviato nella cache del piano per un successivo riutilizzo
6) la query viene eseguita

(copia della risposta di Marc)


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.