Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Cuando el almacenamiento en caché del conjunto de resultados está habilitado, el grupo de SQL dedicado almacena automáticamente en caché los resultados de la consulta en la base de datos de usuario para su uso repetitivo. Esto permite que las ejecuciones de consultas posteriores obtengan resultados directamente de la memoria caché persistente, por lo que no es necesario volver a calcular. El almacenamiento en caché del conjunto de resultados mejora el rendimiento de las consultas y reduce el uso de recursos de proceso. Además, las consultas que usan el conjunto de resultados almacenados en caché no usan ninguna ranura de simultaneidad y, por tanto, no cuentan con los límites de simultaneidad existentes. Para la seguridad, los usuarios solo pueden acceder a los resultados almacenados en caché si tienen los mismos permisos de acceso a datos que los usuarios que crean los resultados almacenados en caché. El almacenamiento en caché del conjunto de resultados es DESACTIVADO de forma predeterminada en los niveles de base de datos y sesión.
Nota:
El almacenamiento en caché del conjunto de resultados no se debe usar junto con DECRYPTBYKEY. Si se debe usar esta función criptográfica, asegúrese de que el almacenamiento en caché del conjunto de resultados está deshabilitado (en el nivel de sesión o en el nivel de base de datos) en el momento de la ejecución.
Comandos clave
Activar o desactivar el almacenamiento en caché del conjunto de resultados para una sesión
Comprobación del tamaño del conjunto de resultados almacenado en caché
¿Qué no se almacena en caché?
Una vez que el almacenamiento en caché del conjunto de resultados está activado para una base de datos, los resultados se almacenan en caché para todas las consultas hasta que la memoria caché está llena, excepto para estas consultas:
- Consultas con funciones integradas o expresiones en tiempo de ejecución que no son deterministas incluso cuando no hay ningún cambio en los datos o consultas de las tablas base. Por ejemplo, DateTime.Now(), GetDate().
- Consultas mediante funciones definidas por el usuario
- Consultas que utilizan tablas con seguridad a nivel de filas
- Consultas que devuelven datos con un tamaño de fila superior a 64 KB
- Consultas que devuelven datos de gran tamaño (>10 GB)
Nota:
- Algunas funciones y expresiones en tiempo de ejecución no deterministas pueden ser deterministas para consultas repetitivas en los mismos datos. Por ejemplo, ROW_NUMBER().
- Use ORDER BY en la consulta si el orden o la secuencia de filas del conjunto de resultados de la consulta es importante para la lógica de la aplicación.
- Si los datos de las columnas ORDER BY no son únicos, no hay ningún orden de fila garantizado para las filas con los mismos valores en las columnas ORDER BY, independientemente de si el almacenamiento en caché del conjunto de resultados está habilitado o deshabilitado.
Importante
Las operaciones para crear la memoria caché del conjunto de resultados y recuperar datos de la memoria caché se producen en el nodo de control de una instancia de grupo de SQL dedicada. Cuando el almacenamiento en caché del conjunto de resultados está activado, la ejecución de consultas que devuelven un conjunto de resultados grande (por ejemplo, >1 GB) puede provocar una limitación alta en el nodo de control y ralentizar la respuesta general de la consulta en la instancia. Estas consultas se suelen usar durante la exploración de datos o las operaciones ETL. Para evitar el esfuerzo del nodo de control y los problemas de rendimiento, los usuarios deben desactivar el almacenamiento en caché de los conjuntos de resultados en la base de datos antes de ejecutar esos tipos de consultas.
Ejecute esta consulta para el tiempo que tardan las operaciones de almacenamiento en caché del conjunto de resultados para una consulta:
SELECT step_index, operation_type, location_type, status, total_elapsed_time, command
FROM sys.dm_pdw_request_steps
WHERE request_id = <'request_id'>;
Esta es una salida de ejemplo para una consulta ejecutada con el almacenamiento en caché del conjunto de resultados deshabilitado.
Esta es una salida de ejemplo para una consulta ejecutada con el almacenamiento en caché del conjunto de resultados habilitado.
Cuando se usan los resultados almacenados en caché
El conjunto de resultados almacenados en caché se reutiliza para una consulta si se cumplen todos los requisitos siguientes:
- El usuario que ejecuta la consulta tiene acceso a todas las tablas a las que se hace referencia en la consulta.
- Hay una coincidencia exacta entre la nueva consulta y la consulta anterior que generó la memoria caché del conjunto de resultados.
- No hay ningún cambio de datos o esquema en las tablas desde las que se generó el conjunto de resultados almacenado en caché.
Ejecute este comando para comprobar si se ejecutó una consulta con una acierto o error en la caché de resultados. La columna result_cache_hit devuelve 1 para el acierto de caché, 0 para errores de caché y valores negativos por motivos por los que no se usó el almacenamiento en caché del conjunto de resultados. Consulta sys.dm_pdw_exec_requests para más detalles.
SELECT request_id, command, result_cache_hit FROM sys.dm_pdw_exec_requests
WHERE request_id = <'Your_Query_Request_ID'>
Administración de resultados almacenados en caché
El tamaño máximo de la caché del conjunto de resultados es de 1 TB por base de datos. Los resultados almacenados en caché se invalidan automáticamente cuando cambian los datos de consulta subyacentes.
El grupo de SQL dedicado administra automáticamente la expulsión de caché siguiendo esta programación:
- Cada 48 horas si el conjunto de resultados no se ha usado o se ha invalidado.
- Cuando la memoria caché del conjunto de resultados se aproxima al tamaño máximo.
Los usuarios pueden vaciar manualmente toda la memoria caché del conjunto de resultados mediante una de estas opciones:
- Desactivar la función de caché del conjunto de resultados para la base de datos
- Ejecute DBCC DROPRESULTSETCACHE mientras esté conectado a la base de datos
La pausa de una base de datos no va a vaciar el conjunto de resultados almacenado en caché.
Pasos siguientes
Para obtener más sugerencias sobre desarrollo, vea la información general sobre desarrollo.