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.
En este artículo se describen sugerencias para lograr un mejor rendimiento de escritura al cargar datos en Azure SQL Database mediante Azure Stream Analytics.
La salida de SQL en Azure Stream Analytics admite la escritura en paralelo como opción. Esta opción permite topologías de trabajo totalmente paralelas , donde varias particiones de salida se escriben en la tabla de destino en paralelo. Sin embargo, habilitar esta opción en Azure Stream Analytics puede no ser suficiente para lograr mayores rendimientos, ya que depende significativamente de la configuración de la base de datos y del esquema de tabla. La elección de índices, clave de agrupación en clústeres, factor de relleno de índice y compresión tiene un impacto en el tiempo de carga de las tablas. Para obtener más información sobre cómo optimizar la base de datos para mejorar el rendimiento de las consultas y la carga en función de las pruebas comparativas internas, consulte guía de rendimiento de SQL Database. No se garantiza la ordenación de escrituras al escribir en paralelo a SQL Database.
Estas son algunas configuraciones dentro de cada servicio que pueden ayudar a mejorar el rendimiento general de la solución.
Azure Stream Analytics
Heredar la creación de particiones: esta opción de configuración de salida de SQL habilita la herencia del esquema de partición de la entrada o el paso anterior de la consulta. Con esto habilitado, escribir en una tabla basada en disco y tener una topología totalmente paralela para tu trabajo, podrás observar un mejor rendimiento. Esta creación de particiones ya se produce automáticamente para muchas otras salidas. El bloqueo de tabla (TABLOCK) también se deshabilita para las inserciones masivas realizadas con esta opción.
Nota:
Cuando hay más de 8 particiones de entrada, es posible que la herencia del esquema de partición de entrada no sea una opción adecuada. Este límite superior se observó en una tabla con una sola columna de identidad y un índice agrupado. En este caso, considere la posibilidad de usar INTO 8 en la consulta para especificar explícitamente el número de escritores de salida. En función del esquema y la elección de índices, las observaciones pueden variar.
Tamaño del lote : la configuración de salida de SQL permite especificar el tamaño máximo del lote en una salida sql de Azure Stream Analytics en función de la naturaleza de la tabla o carga de trabajo de destino. El tamaño del lote es el número máximo de registros enviados con cada transacción de inserción masiva. En los índices de almacén de columnas agrupados, los tamaños de lote alrededor de 100 000 permiten más paralelización, registro mínimo y optimizaciones de bloqueo. En las tablas basadas en disco, un tamaño de 10 000 (valor predeterminado) o inferior puede ser óptimo para su solución, ya que los tamaños de lote mayores pueden desencadenar la extensión de bloqueo durante las inserciones masivas.
(Optimización de mensajes de entrada: si ha realizado la optimización con la herencia de particiones y el tamaño del lote, puede aumentar el número de eventos de entrada por mensaje y por partición para incrementar aún más el rendimiento de escritura. El ajuste de mensajes de entrada permite que los tamaños de lote de Azure Stream Analytics estén hasta el tamaño de lote especificado, lo que mejora el rendimiento. Esto se puede lograr mediante la compresión o el aumento de los tamaños de mensaje de entrada en EventHub o Blob.
SQL Azure
Tabla e índices particionados: Usar una tabla SQL particionada y índices particionados en la tabla utilizando la misma columna como clave de partición (por ejemplo, PartitionId) puede reducir significativamente las contenciones durante las escrituras entre particiones. Para una tabla particionada, deberá crear una función de partición y un esquema de partición en el grupo de archivos PRIMARY. Esto también aumentará la disponibilidad de los datos existentes mientras se cargan nuevos datos. Es posible que se haya alcanzado el límite de E/S de registro basado en el número de particiones, que se puede incrementar mediante la actualización de la SKU.
Evitar infracciones de clave únicas : si recibe varios mensajes de advertencia de infracción de clave en el registro de actividad de Azure Stream Analytics, asegúrese de que el trabajo no se ve afectado por infracciones de restricciones únicas que probablemente se produzcan durante los casos de recuperación. Esto se puede evitar estableciendo la opción IGNORE_DUP_KEY en los índices.
Azure Data Factory y tablas en memoria
- Tabla en memoria como tabla temporal: las tablas en memoria permiten cargas de datos de alta velocidad, pero los datos deben caber en la memoria. Las pruebas comparativas muestran la carga masiva desde una tabla en memoria a una tabla basada en disco es aproximadamente 10 veces más rápida que la inserción masiva directa mediante un único escritor en la tabla basada en disco con una columna de identidad y un índice agrupado. Para aprovechar este rendimiento de inserción masiva, configure un trabajo de copia mediante Azure Data Factory que copie los datos de la tabla en memoria en la tabla basada en disco.
Evitar problemas de rendimiento
La inserción masiva de datos es mucho más rápida que cargar datos con inserciones únicas porque se evita la sobrecarga repetida de transferir los datos, analizar la instrucción insert, ejecutar la instrucción y emitir un registro de transacción. En su lugar, se usa una ruta de acceso más eficaz en el motor de almacenamiento para transmitir los datos. Sin embargo, el costo de la configuración de esta ruta de acceso es mucho mayor que una sola instrucción insert en una tabla basada en disco. El punto de equilibrio suele ser de aproximadamente 100 filas, más allá de lo cual la carga en bloque es casi siempre más eficaz.
Si la tasa de eventos entrantes es baja, puede crear fácilmente tamaños de lote inferiores a 100 filas, lo que hace que la inserción masiva sea ineficaz y use demasiado espacio en disco. Para solucionar esta limitación, puede realizar una de estas acciones:
- Cree un desencadenador INSTEAD OF para usar la inserción sencilla para cada fila.
- Use una tabla temporal In-Memory tal y como se describe en la sección anterior.
Otro escenario de este tipo se produce al escribir en un índice de almacén de columnas no agrupado (NCCI), donde las inserciones masivas más pequeñas pueden crear demasiados segmentos, que pueden bloquear el índice. En este caso, la recomendación es usar un índice de almacén de columnas agrupado en su lugar.
Resumen
En resumen, la característica de salida particionada en Azure Stream Analytics para SQL permite una paralelización alineada de su trabajo con una tabla particionada en SQL Azure, lo que debería ofrecer mejoras significativas en el rendimiento. Aprovechar Azure Data Factory para orquestar el movimiento de datos desde una tabla en memoria hacia tablas en disco puede proporcionar mejoras significativas en el rendimiento. Si es factible, mejorar la densidad de mensajes también puede ser un factor importante para mejorar el rendimiento general.
Pasos siguientes
- Comprender los resultados de Azure Stream Analytics
- Datos procesados de Azure Stream Analytics a Azure SQL Database
- Uso de identidades administradas para acceder a Azure SQL Database o Azure Synapse Analytics desde un trabajo de Azure Stream Analytics
- Uso de datos de referencia de una Base de Datos SQL para un trabajo de Azure Stream Analytics
- Actualización o combinación de registros en Azure SQL Database con Azure Functions
- Inicio rápido: Creación de un trabajo de Stream Analytics mediante Azure Portal