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!
Respuestas:
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
fuente
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.
fuente
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 Execution
secció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.Verifique el siguiente diagrama (de MSDN) para la ejecución del procedimiento almacenado para aclarar su pregunta:
fuente
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)
fuente
Como han dicho otros, los resultados de la consulta en SQL Server no se almacenan en caché.
Si desea almacenar en caché los resultados de una consulta (o un SP), existen soluciones alternativas. Por ejemplo, vea este artículo en el sitio web de Brent Ozar .
fuente