Registros de consultas lentas en Azure Database for MySQL

SE APLICA A: Azure Database for MySQL: servidor único

Importante

El servidor único de Azure Database for MySQL está en proceso de retirada. Es muy recomendable actualizar al servidor flexible de Azure Database for MySQL. Para obtener más información sobre la migración al servidor flexible de Azure Database for MySQL, consulte ¿Qué sucede con el servidor único de Azure Database for MySQL?

En Azure Database for MySQL, el registro de consultas lentas está disponible para los usuarios. No se admite el acceso al registro de transacciones. El registro de consultas lentas puede utilizarse para identificar cuellos de botella que afectan al rendimiento a fin de solucionar el problema.

Para obtener más información sobre el registro de consultas lentas de MySQL, vea la sección de registro de consultas lentas del manual de referencia.

Cuando Almacén de consultas está habilitado en el servidor, puede ver que las consultas como "CALL mysql.az_procedure_collect_wait_stats (900, 30);" se han registrado en los registros de consultas lentas. Este comportamiento es el esperado, ya que la característica Almacén de consultas recopila estadísticas sobre las consultas.

Configuración del registro de consultas lentas

De forma predeterminada, el registro de consultas lentas está deshabilitado. Para habilitarlo, cambie slow_query_log a Activado. Para ello, se puede usar Azure Portal o la CLI de Azure.

Otros parámetros que se pueden ajustar son los siguientes:

  • long_query_time: si una consulta tarda más que long_query_time (en segundos), esa consulta se registra. El valor predeterminado es 10 segundos.
  • log_slow_admin_statements: si ON incluye instrucciones administrativas como ALTER_TABLE y ANALYZE_TABLE en las instrucciones escritas en slow_query_log.
  • log_queries_not_using_indexes: determina si las consultas que no utilizan índices se registran en slow_query_log.
  • log_throttle_queries_not_using_indexes: este parámetro limita el número de consultas que no son de índice que se pueden escribir en el registro de consultas lentas. Este parámetro surte efecto cuando log_queries_not_using_indexes está configurado en ON.
  • log_output: si es "File", permite escribir el registro de consultas lento en el almacenamiento del servidor local y en los registros de diagnóstico de Azure Monitor. Si es "None", el registro de consultas lentas solo se escribirá en los registros de diagnóstico de Azure Monitor.

Importante

Si las tablas no están indexadas y se establecen loa parámetros log_queries_not_using_indexes y log_throttle_queries_not_using_indexes en ON (Activar) el rendimiento de MySQL puede resultar afectado, ya que todas las consultas que se ejecuten en estas tablas se escribirán en el registro de consulta lento.

Si planea registrar consultas lentas durante un periodo prolongado, se recomienda establecer log_output en "None" (No). Si se establece en "File" (Archivo), estos registros se escriben en el almacenamiento del servidor local, lo que puede afectar al rendimiento de MySQL.

Consulte la documentación rel registro de consultas lentas de MySQL para obtener una descripción completa de los parámetros de registro de consultas lentas.

Acceso a registros de consultas lentas

Hay dos opciones para acceder a los registros de consultas lentas en Azure Database for MySQL: almacenamiento del servidor local o registros de diagnóstico de Azure Monitor. Esto se establece mediante el parámetro log_output.

Para el almacenamiento en el servidor local, puede enumerar y descargar los registros de consultas lentas mediante Azure Portal o la CLI de Azure. En Azure Portal, vaya al servidor en Azure Portal. En el encabezado Supervisión, seleccione la página Registros de servidor. Para más información sobre la CLI de Azure, consulte Configuración y acceso a los registros de consultas lentas con la CLI de Azure.

Los registros de diagnóstico de Azure Monitor permiten canalizar los registros de consultas lentas a los registros de Azure Monitor (Log Analytics), Azure Storage o Event Hubs. Para más información, siga leyendo.

Retención de registros de almacenamiento del servidor local

Al iniciar sesión en el almacenamiento local del servidor, los registros están disponibles hasta siete días desde su creación. Si el tamaño total de los registros disponibles supera los 7 GB, se eliminan los archivos más antiguos hasta que haya espacio disponible. El límite de almacenamiento de 7 GB para los registros del servidor está disponible sin costo y no se puede ampliar.

Los registros se rotan cada 24 horas o 7 GB, lo que ocurra primero.

Nota

La retención de registros anterior no se aplica a los registros que se canalizan mediante los registros de diagnóstico de Azure Monitor. Puede cambiar el período de retención de los receptores de datos que se emiten (por ejemplo, Azure Storage).

Registros de diagnóstico

Azure Database for MySQL se integra con los registros de diagnóstico de Azure Monitor. Después de habilitar los registros de consultas lentas en el servidor MySQL, puede optar por hacer que se emitan a los registros de Azure Monitor, Event Hubs o Azure Storage. Para más información sobre cómo habilitar los registros de diagnóstico, consulte la sección de la documentación de registros de diagnóstico.

Nota

Las cuentas de Premium Storage no se admiten si envía los registros a Azure Storage a través de diagnósticos y configuración.

En la tabla siguiente se describe lo que contiene cada registro. En función del método de salida que elija, pueden variar los campos incluidos y el orden en el que aparecen.

Propiedad Descripción
TenantId El identificador de inquilino
SourceSystem Azure
TimeGenerated [UTC] Marca de tiempo de cuando se grabó el registro en UTC
Type Tipo del registro. Siempre AzureDiagnostics
SubscriptionId GUID de la suscripción a la que pertenece el servidor
ResourceGroup Nombre del grupo de recursos al que pertenece el servidor
ResourceProvider Nombre del proveedor de recursos Siempre MICROSOFT.DBFORMYSQL
ResourceType Servers
ResourceId URI de recurso
Resource Nombre del servidor
Category MySqlSlowLogs
OperationName LogEvent
Logical_server_name_s Nombre del servidor
start_time_t [UTC] Hora de inicio de la consulta
query_time_s Tiempo total en segundos que tardó en ejecutarse la consulta
lock_time_s Tiempo total en segundos durante el que se bloqueó la consulta
user_host_s Nombre de usuario
rows_sent_d Número de filas enviadas
rows_examined_s Número de filas examinadas
last_insert_id_s last_insert_id
insert_id_s Id. de inserción
sql_text_s Consulta completa
server_id_s ID del servidor
thread_id_s Id. de subproceso
\_ResourceId URI de recurso

Nota

Para sql_text, el registro se truncará si supera los 2048 caracteres.

Análisis de registros en los registros de Azure Monitor

Una vez que los registros de consultas lentos se canalizan a los registros de Azure Monitor a través de registros de diagnóstico, puede realizar un análisis en mayor profundidad de sus consultas lentas. A continuación encontrará algunas consultas de ejemplo que le ayudarán a ponerse en marcha. Asegúrese de que actualizar los datos siguientes con el nombre del servidor.

  • Consultas que duran más de 10 segundos en un servidor concreto

    AzureDiagnostics
    | where LogicalServerName_s == '<your server name>'
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, LogicalServerName_s, start_time_t , query_time_d, sql_text_s 
    | where query_time_d > 10
    
  • Lista de cinco consultas más largas en un servidor concreto

    AzureDiagnostics
    | where LogicalServerName_s == '<your server name>'
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, LogicalServerName_s, start_time_t , query_time_d, sql_text_s 
    | order by query_time_d desc
    | take 5
    
  • Resumir las consultas lentas por tiempo de consulta mínimo, máximo, medio y desviación estándar en un servidor concreto

    AzureDiagnostics
    | where LogicalServerName_s == '<your server name>'
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, LogicalServerName_s, start_time_t , query_time_d, sql_text_s 
    | summarize count(), min(query_time_d), max(query_time_d), avg(query_time_d), stdev(query_time_d), percentile(query_time_d, 95) by LogicalServerName_s
    
  • Representar en un gráfico la distribución de consultas lentas en un servidor concreto

    AzureDiagnostics
    | where LogicalServerName_s == '<your server name>'
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, LogicalServerName_s, start_time_t , query_time_d, sql_text_s 
    | summarize count() by LogicalServerName_s, bin(TimeGenerated, 5m)
    | render timechart
    
  • Mostrar las consultas durante más de 10 segundos en todos los servidores de MySQL con Registros de diagnóstico habilitado

    AzureDiagnostics
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, LogicalServerName_s, start_time_t , query_time_d, sql_text_s 
    | where query_time_d > 10
    

Pasos siguientes