Compartir a través de


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 empieza a limitar esa consulta para permitir que todos los demás escenarios funcionen con normalidad.

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.
o
This query is throttled as it negatively impacts the database health.
-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.
o
This query is throttled as it negatively impacts the database health; 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.
o
This query is throttled as it negatively impacts the database health; 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.
o
This query is throttled as it negatively impacts the database health; the query has performance validation issues ({0}), which will cause the query to be throttled more aggressively.

Error de Dataverse para limitación de consultas ocasionado por antipatrones

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

Cuando se produce un error en la consulta debido a limitación y esta usa uno de los antipatrones, Dataverse devuelve el siguiente error único para ayudar a identificar qué antipatrones está usando 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
o
This query is throttled as it negatively impacts the database health; 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 Evitar los comodines iniciales en condiciones de filtro
PerformanceLargeColumnSearch Evitar el uso de condiciones en columnas de texto grandes
OrderOnEnumAttribute Evitar ordenar por columnas de opción
OrderOnPropertiesFromJoinedTables Evitar ordenar por columnas en tablas relacionadas
LargeAmountOfAttributes Minimizar el número de columnas seleccionadas
LargeAmountOfLogicalAttributes Minimizar el número de columnas lógicas seleccionadas
FilteringOnCalculatedColumns Evitar el uso de fórmulas o columnas calculadas en condiciones de filtro

Nota

Si una consulta contiene el antipatrón PerformanceLeadingWildCard o 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

Vea 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