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.
Se aplica a: SQL Server 2022 (16.x) y versiones posteriores
De Azure SQL DatabaseAzure
SQL Managed Instance
SQL Database en Microsoft Fabric
Crea o actualiza Almacén de consultas sugerencias para un query_id determinado.
Convenciones de sintaxis de Transact-SQL
Syntax
sp_query_store_set_hints
[ @query_id = ] query_id ,
[ @query_hints = ] 'query_hints'
[ , [ @replica_group_id = ] 'replica_group_id' ]
[ ; ]
Arguments
Important
Los argumentos para los procedimientos almacenados extendidos deben especificarse en el orden específico, tal como se describe en la sección sintaxis de . Si los parámetros se escriben fuera de orden, se produce un mensaje de error.
[ @query_id = ] query_id
Columna Almacén de consultas query_id de sys.query_store_query.
@query_id es bigint.
[ @query_hints = ] N'query_hints'
Cadena de caracteres de las opciones de consulta a partir de OPTION.
@query_hints es nvarchar(max).
Cuando USE HINT se incluye en el @query_hints argumento , se deben repetir las comillas simples alrededor de nombres de sugerencia individuales. Por ejemplo: @query_hints = N'OPTION (MAXDOP = 1, USE HINTS (''ENABLE_QUERY_OPTIMIZER_HOTFIXES'',''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_150''))'.
Para obtener más información, consulte Sugerencias de consulta admitidas.
[ @replica_group_id = ] 'replica_group_id'
Este parámetro opcional determina el ámbito en el que se aplica la sugerencia en una réplica secundaria cuando el Almacén de consultas para secundarias legibles está habilitado. @replica_group_id es bigint. La tienda de consultas para réplicas secundarias está compatible a partir de SQL Server 2025 (17.x) y versiones posteriores, así como en Azure SQL Database. Para soporte completo de plataforma, consulte Tienda de consultas para réplicas secundarias.
El argumento @replica_group_id tiene como valor predeterminado la réplica local (principal o secundaria), pero opcionalmente puede especificar un valor que coincida con un valor en la replica_group_id columna de sys.query_store_replicas para establecer una sugerencia para un grupo de réplicas diferente.
Valor devuelto
0 (correcto) o 1 (erróneo).
Remarks
Las sugerencias se especifican en un formato de cadena T-SQL válido de tipo N'OPTION (..)'.
- Si no existen sugerencias del Almacén de consultas para un @query_idespecífico, se crea una nueva sugerencia del Almacén de consultas.
- Si ya existe una sugerencia del Almacén de consultas para un @query_id específico, el valor especificado para @query_hints reemplaza las sugerencias especificadas anteriormente para la consulta asociada.
- Si no existe un query_id , se genera un error.
En caso de que una de las sugerencias impida que se produzca un plan de consulta, se omiten todas las sugerencias. Para obtener más información sobre los detalles del error, consulte sys.query_store_query_hints.
Para quitar sugerencias asociadas a un query_id, use el procedimiento almacenado del sistema sys.sp_query_store_clear_hints.
Sugerencias de consulta admitidas
Estas sugerencias de consulta se admiten como sugerencias del Almacén de consultas:
{ HASH | ORDER } GROUP
| { CONCAT | HASH | MERGE } UNION
| { LOOP | MERGE | HASH } JOIN
| EXPAND VIEWS
| FAST number_rows
| FORCE ORDER
| IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX
| KEEP PLAN
| KEEPFIXED PLAN
| MAX_GRANT_PERCENT = percent
| MIN_GRANT_PERCENT = percent
| MAXDOP number_of_processors
| NO_PERFORMANCE_SPOOL
| OPTIMIZE FOR UNKNOWN
| PARAMETERIZATION { SIMPLE | FORCED }
| RECOMPILE
| ROBUST PLAN
| USE HINT ( '<hint_name>' [ , ...n ] )
Actualmente no se admiten las siguientes sugerencias de consulta:
OPTIMIZE FOR ( @var = val)MAXRECURSION-
USE PLAN(en su lugar, considere la posibilidad de forzar Almacén de consultas capacidad original, sp_query_store_force_plan). DISABLE_DEFERRED_COMPILATION_TVDISABLE_TSQL_SCALAR_UDF_INLINING-
Sugerencias de tabla (por ejemplo,
FORCESEEK,READUNCOMMITTED,INDEX)
Permissions
Se necesita el permiso ALTER en la base de datos.
Examples
Identificación de una consulta en el Almacén de consultas
En el ejemplo siguiente se consultan sys.query_store_query_text y sys.query_store_query para devolver el query_id de un fragmento de texto de consulta ejecutado.
En este ejemplo, la consulta que estamos intentando optimizar está en la base de datos de ejemplo SalesLT:
SELECT *
FROM SalesLT.Address AS A
INNER JOIN SalesLT.CustomerAddress AS CA
ON A.AddressID = CA.AddressID
WHERE PostalCode = '98052'
ORDER BY A.ModifiedDate DESC;
El almacén de consultas no refleja inmediatamente los datos de consulta en sus vistas del sistema.
Identifique la consulta en las vistas de catálogo del sistema del Almacén de consultas:
SELECT q.query_id,
qt.query_sql_text
FROM sys.query_store_query_text AS qt
INNER JOIN sys.query_store_query AS q
ON qt.query_text_id = q.query_text_id
WHERE query_sql_text LIKE N'%PostalCode =%'
AND query_sql_text NOT LIKE N'%query_store%';
GO
En los ejemplos siguientes, el ejemplo de consulta anterior de la SalesLT base de datos se identificó como query_id 39.
Aplicación de una sugerencia única
En el ejemplo siguiente se aplica la RECOMPILE sugerencia a query_id 39, como se identifica en el Almacén de consultas:
EXECUTE sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION(RECOMPILE)';
En el ejemplo siguiente se aplica la sugerencia para forzar el estimador de cardinalidad heredada a query_id 39, identificados en Almacén de consultas:
EXECUTE sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION(USE HINT(''FORCE_LEGACY_CARDINALITY_ESTIMATION''))';
Aplicación de varias sugerencias
En el ejemplo siguiente se aplican varias sugerencias de consulta a query_id 39, incluido RECOMPILE, MAXDOP 1y el comportamiento del optimizador de consultas en el nivel de compatibilidad 110:
EXECUTE sys.sp_query_store_set_hints
@query_id = 39,
@query_hints = N'OPTION(RECOMPILE, MAXDOP 1, USE HINT(''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_110''))';
Visualización de sugerencias del Almacén de consultas
En el siguiente ejemplo se devuelven las sugerencias del Almacén de consultas existentes:
SELECT query_hint_id,
query_id,
replica_group_id,
query_hint_text,
last_query_hint_failure_reason,
last_query_hint_failure_reason_desc,
query_hint_failure_count,
source,
source_desc
FROM sys.query_store_query_hints
WHERE query_id = 39;
Eliminación de la sugerencia de una consulta
Use el ejemplo siguiente para quitar la sugerencia de query_id 39 mediante el procedimiento almacenado del sistema sp_query_store_clear_hints .
EXECUTE sys.sp_query_store_clear_hints @query_id = 39;