Optimización de consultas
Las consultas lentas son un problema frecuente en OpenSearch. Por lo general, se deben a operaciones ineficientes del usuario, a una cantidad excesiva de condiciones de filtro o a un aumento repentino en el QPS. La función de análisis de consultas lentas en OpenSearch le permite identificar las consultas con alto consumo de Unidades de Cómputo Lógico (LCU) dentro de un rango de tiempo específico. También ofrece sugerencias de optimización para ayudarle a reducir costos.
Beneficios
Sin costo: esta función es gratuita.
Análisis bajo demanda: analice los registros de consultas lentas del último mes y reciba sugerencias de optimización.
Métricas integrales: analice las causas de las consultas lentas mediante diversas métricas, como el consumo promedio, el consumo máximo y el porcentaje respecto al total de consultas. Los resultados se pueden ordenar por cualquiera de estas métricas.
Notas de uso
Solo puede analizar datos del día anterior. Los resultados históricos del análisis se conservan hasta por 30 días.
Procedimiento
Habilite el servicio de análisis de consultas lentas: la primera vez que utilice la optimización de consultas, vaya a
Feature Extensions > Query Optimizationen el panel de navegación izquierdo.
Seleccione la aplicación para la cual desea habilitar el análisis de consultas lentas, marque las casillas Enable Slow Query Analysis y Read Commitment for Use, y luego haga clic en Enable.
Analice los datos de consulta: una vez habilitado el servicio, puede analizar los datos por fecha o por RequestId:
Por fecha: haga clic en Analyze.
Espere a que finalice el análisis.
Por RequestId: introduzca un RequestId válido y haga clic en Query.
La consulta devuelve una tabla de resultados con columnas para sugerencia de optimización y ejemplo de optimización. Las sugerencias comunes incluyen: reducir sorted_doc_count_in_qrs (al disminuir el valor de start+hit, por ejemplo, optimizar hit:500 a hit:50), reducir seek_times (al agregar más condiciones de consulta o usar una filter clause) y reducir match_doc_count (al añadir más condiciones de consulta o filtro, como anexar AND status:4). Cada sugerencia incluye una comparación lado a lado entre la consulta original y la optimizada.
El sistema muestra un mensaje de error si el formato de entrada es incorrecto.
Por ejemplo, si introduce un RequestId no válido como 123 y hace clic en Query, aparece un mensaje de error que indica "No query analysis suggestion found. Check whether the RequestId is valid." El código de error es Optimizer.OperationFailed.NoData.
Consulte los resultados del análisis: seleccione un rango de tiempo para ver los resultados correspondientes de consultas lentas.
También puede ordenar los resultados del análisis por diferentes métricas.
Haga clic en una categoría de consulta lenta para ver los detalles de su solicitud de búsqueda, incluidos RequestId, Query, total consumption (LCU), retrieval consumption (LCU), statistics consumption (LCU), sort consumption (LCU), summary consumption (LCU), other consumption (LCU) y optimization suggestion.
Además de utilizar el análisis de consultas lentas para identificar consultas con alto consumo, puede reducir el consumo de LCU de las siguientes maneras:
Reduzca la cantidad de documentos recuperados: en la cláusula
config, establezcahiten un máximo de 50 para limitar los documentos recuperados por consulta. Ejemplo:config=start:0,hit:50,format:fulljson.Agregue condiciones de filtro: añada el parámetro
filtera la cláusulaconfigpara disminuir la cantidad de documentos coincidentes. Ejemplo:config=start:0,hit:10,format:fulljson,filter=id>=0.Utilice análisis numérico y consultas de rango: para los campos que se usan con frecuencia en búsquedas difusas o consultas de rango con
filter, configure el método de análisis como análisis numérico en el esquema de índice y emplee consultas de rango para reducir el consumo de LCU. En la página de detalles de la instancia, elija Offline Changes > Index Schema y cambie el método de análisis del campo objetivo de Keyword a Numeric Analysis. Al consultar datos, utilice una consulta de rango; por ejemplo,filter=id>100000.