¿Los procedimientos almacenados de SQL Server almacenan en caché los resultados de datos?


11

He escuchado esto de amigos, pero nunca investigué si esto es cierto.

¿Es cierto que los resultados de datos de una consulta ejecutada se almacenan en caché?

Quiero decir, si tengo un procedimiento almacenado como:

SELECT * FROM USERLIST

... es cierto que el resultado (lista de usuarios, en este caso) se almacena en caché.

Además, si tengo estos:

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

(en el que user / userzzz se pasan como parámetros), ¿es correcto que almacene 2 resultados diferentes en la caché de la base de datos?

No lo creo, ¡pero quiero su confirmación, expertos!


Acabo de responder ahora por usted por marc_s stackoverflow.com/questions/8559443/…

Respuestas:


19

Los resultados de la consulta no se almacenan en caché

Sin embargo, la tabla de origen y los datos y metadatos del índice se almacenarán en caché después del primer uso (sujeto a uso continuo, carga y presión de memoria)

Es decir, los resultados de una consulta se evaluarán en cada ejecución, pero las tablas (y los índices, etc.) utilizados por la consulta probablemente ya estén en la memoria.

El plan de ejecución compilado se almacenará en caché, que es de donde proviene la confusión, sospecho


"Es decir, los resultados de una consulta se evaluarán en cada ejecución, pero las tablas (y los índices, etc.) utilizados por la consulta probablemente ya estén en la memoria". : sí, yo también no uso SP, supongo ... eso es una optimización de la base de datos, eso no importa con Sp, ¿verdad?

@markzzz: casi todo SQL se compila en un plan de ejecución, ya sea una ACTUALIZACIÓN directa, SELECCIONAR o un procedimiento almacenado
gbn

6

Cuando se ejecuta un procedimiento almacenado, se optimiza y se compila, y el plan de consulta se coloca en la caché de procedimientos.

Los procedimientos permanecen en caché para otros usuarios, siempre que haya espacio. Los procedimientos se eliminan utilizando el algoritmo utilizado menos recientemente (LRU).


Si bien la ejecución inicial de un procedimiento almacenado requiere la recuperación de los procedimientos del sistema en el disco, es posible, para ejecuciones posteriores, simplemente recuperar el plan optimizado del caché de procedimientos. Este comportamiento puede conducir a un aumento significativo del rendimiento.

Entonces, lo que hay en la memoria caché es el plan optimizado del procedimiento almacenado y no los resultados del procedimiento almacenado.


6

Cuando una consulta está lista para ser procesada por SQL Server, el Administrador de SQL la busca cache; y si no está allí, debe compilarse. El proceso de compilación abarca algunas cosas.

Cuando se ejecuta un procedimiento almacenado, se optimiza y se compila. de acuerdo con esto, se coloca un plan de consulta en el caché de procedimientos.

Consulte la Compilation and Executionsección sobre Arquitectura y componentes internos del procesador de consultas de Microsoft SQL Server para obtener información detallada sobre el procesamiento de consultas, etc.

El producto final de la fase de compilación es un plan de consulta, que se coloca en el caché de procedimientos. El resultado / operación de la consulta SQL podría tener un tamaño en MB, GB, por lo que no se coloca en la caché de procedimientos ni en el plan de consulta.

Verifique el siguiente diagrama (de MSDN) para la ejecución del procedimiento almacenado para aclarar su pregunta: ingrese la descripción de la imagen aquí


-1

SQL Server básicamente sigue estos pasos para ejecutar cualquier consulta (llamada a procedimiento almacenado o instrucción SQL ad-hoc):

1) compruebe sintácticamente la consulta
2) si está bien: comprueba el caché del plan para ver si ya tiene un plan de ejecución para esa consulta
3) si hay un plan de ejecución: ese plan se (re) utiliza y se ejecuta la consulta
4) si todavía no hay un plan, se determina un plan de ejecución
5) ese plan se almacena en la caché del plan para su posterior reutilización
6) se ejecuta la consulta

(copia de la respuesta de Marc)


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.