Compartir vía


Limitación de consultas

Si una consulta específica crea una carga desproporcionada en la base de datos que almacena datos de Microsoft Dataverse, puede privar de recursos a la base de datos y afectar negativamente el rendimiento de todas las operaciones de datos. Cuando esto pasa, Dataverse puede comenzar a limitar esa consulta en particular, lo que permitiría que todos los demás escenarios funcionen normalmente.

La forma principal en la que limitación de consultas es diferente de Límites de la API de protección de servicios es que limitación de consultas se dirige a una consulta específica que provoca una degradación del rendimiento y no afecta al resto del tráfico. Si la consulta limitada se origina en una aplicación no interactiva, es probable que los usuarios finales no noten la limitación. Si la consulta se origina en una aplicación interactiva afecta a los usuarios que ejercen ese escenario en particular.

Comportamiento de limitación de consultas

La limitación puede manifestarse de tres formas:

  • Se introduce un retraso antes de cada ejecución de la consulta, lo que hace que el escenario que la usa sea más lento
  • Alguna fracción de los intentos de ejecutar la consulta fallan con cualquiera de los siguientes errores:
Código de error
Código hexadecimal
Nombre. Publicación
-2147187388
0x80048544
DataEngineQueryThrottling This query cannot be executed because it conflicts with query throttling.
-2147187132
0x80048644
DataEngineLeadingWildcardQueryThrottling This query cannot be executed because it conflicts with Query Throttling; the query uses a leading wildcard value in a filter condition, which will cause the query to be throttled more aggressively.
-2147186876
0x80048744
DataEngineComputedColumnQueryThrottling This query cannot be executed because it conflicts with Query Throttling; the query uses a computed column in a filter condition, which will cause the query to be throttled more aggressively.
-2147186875
0x80048745
DataEnginePerformanceValidationIssuesQueryThrottling This query cannot be executed because it conflicts with Query Throttling; the query has performance validation issues ({0}), which will cause the query to be throttled more aggressively.

Error de Dataverse de límites de consulta causado por antipatrones

Dataverse limita con fuerza las consultas que utilizan anti-patrones de consulta conocidos cuando se identifican como un riesgo para el estado del entorno para ayudar a prevenir interrupciones.

Cuando una consulta falla debido a la limitación y está utilizando uno de los antipatrones, Dataverse devuelve el siguiente error único para ayudar a identificar qué antipatrones está utilizando la consulta:

Nombre: DataEnginePerformanceValidationIssuesQueryThrottling
Código: 0x80048745
Número: -2147186875
Mensaje: This query cannot be executed because it conflicts with Query Throttling; the query has performance validation issues ({0}), which will cause the query to be throttled more aggressively. Please refer to this document: https://go.microsoft.com/fwlink/?linkid=2162952

La parte {0} del mensaje de excepción contiene el antipatrón que usa la consulta. Si la consulta usa varios antipatrones, se separan por comas. Por ejemplo, si una consulta se filtra en una columna de texto grande y también selecciona un gran número de columnas, el mensaje de excepción contiene la cadena PerformanceLargeColumnSearch,LargeAmountOfAttributes. En la tabla siguiente se enumeran los antipatrones con vínculos a explicaciones:

Identificador antipatrón Vínculo de la explicación
PerformanceLeadingWildCard Evite los comodines iniciales en condiciones de filtro
PerformanceLargeColumnSearch Evite el uso de condiciones en columnas de texto grandes
OrderOnEnumAttribute Evite ordenar por columnas de elección
OrderOnPropertiesFromJoinedTables Evite ordenar por columnas en tablas relacionadas
LargeAmountOfAttributes Minimice el número de columnas seleccionadas
LargeAmountOfLogicalAttributes Minimizar el número de columnas lógicas seleccionadas
FilteringOnCalculatedColumns Evite el uso de fórmulas o columnas calculadas en condiciones de filtro

Nota

Si una consulta contiene el antipatrón PerformanceLeadingWildCard o el antipatrón FilteringOnCalculatedColumns, se genera un error de Dataverse diferente. Las consultas que usan el antipatrón PerformanceLeadingWildCard arrojan el error DataEngineLeadingWildcardQueryThrottling mencionado en esta página, y las consultas que usan el antipatrón FilteringOnCalculatedColumns arrojan el error DataEngineComputedColumnQueryThrottling mencionado en esta página.

Los errores DataEngineLeadingWildcardQueryThrottling y DataEngineComputedColumnQueryThrottling son anteriores al error DataEnginePerformanceValidationIssuesQueryThrottling; los errores DataEngineLeadingWildcardQueryThrottling y DataEngineComputedColumnQueryThrottling se siguen lanzando para mantener la compatibilidad con versiones anteriores.

Causas comunes

La mayoría de las situaciones en las que es necesaria la limitación de consultas se incluyen en una de estas dos categorías generales:

  • Alguna consulta en un escenario interactivo común es ineficaz y requiere una gran cantidad de recursos de base de datos para cada ejecución

    • Ejemplos comunes son una consulta guardada utilizada en una cuadrícula o una consulta ejecutada por un complemento
  • Una operación automatizada ejecuta una consulta a una velocidad elevada que consume una gran cantidad de recursos de base de datos en conjunto, incluso si cada ejecución es menos costosa

    • Un ejemplo común es la integración de datos que mueve una gran cantidad de datos dentro o fuera de Dataverse

Cómo evitar la limitación de consultas

La limitación de consultas depende de la consulta y del escenario donde se ejecuta, pero existen algunas pautas comunes:

  • Para consultas lentas de baja frecuencia, que normalmente se utilizan en aplicaciones interactivas, la estructura de la consulta debe cambiarse para que sea más eficiente

  • Para aplicaciones no interactivas, las formas comunes de reducir la carga de la base de datos son:

    • Si se utiliza ExecuteMultiple (u otro mecanismo de procesamiento por lotes), reduzca el tamaño del lote
    • Si la aplicación es multihilo, reduzca el número de hilos simultáneos
    • Si no está utilizando lotes o peticiones concurrentes, agregue un retardo entre peticiones para reducir la tasa de peticiones

Consulte también

Antipatrones de consulta
Optimizar el rendimiento mediante FetchXml
Optimizar el rendimiento utilizando QueryExpression
Límites de la API de protección de servicio