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 comienza a limitar esa consulta en particular para permitir 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 | Publicación |
---|---|---|
-2147187388 |
0x80048544 |
This query cannot be executed because it conflicts with query throttling. |
-2147187132 |
0x80048644 |
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 |
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. |
Para obtener más información sobre patrones de consulta limitados más agresivamente, como los comodines iniciales, se puede encontrar en Optimizar el rendimiento con FetchXml y Optimizar el rendimiento utilizando QueryExpression
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:
Algunas consultas en un escenario interactivo común, por ejemplo, una consulta guardada utilizada en una cuadrícula o una consulta ejecutada por un complemento, son ineficientes y requieren una gran cantidad de recursos de base de datos para cada ejecución
Una operación automatizada, por ejemplo, integración de datos que implica mover una gran cantidad de datos dentro o fuera de Dataverse, ejecuta una consulta a una velocidad muy alta que consume una gran cantidad de recursos de la base de datos en conjunto, incluso si cada ejecución es más económica
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
- Algunas pautas comunes para mejorar el rendimiento de las consultas se pueden encontrar en Optimizar el rendimiento mediante FetchXML
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