{% extends "base.html" %} {# Info tooltip macro - hover to show definition #} {% macro info_tooltip(text, position='right') %}
Host ID: {{ host_id }}
MySQL Version
{{ job_host.mysql_version }}
Server Uptime
{{ global_status.Uptime | format_uptime }}
Collected
{{ job_host.completed_at.strftime('%Y-%m-%d %H:%M:%S') }}
{% if timing_data and timing_data.total_duration %}โก {{ timing_data.total_duration }}s (parallel)
{% elif job_host.started_at %}Duration: {{ ((job_host.completed_at - job_host.started_at).total_seconds())|round(1) }}s
{% endif %}Replicating from {{ replica_status.master_host }}{% if replica_status.master_port %}:{{ replica_status.master_port }}{% endif %}
{% if replica_status.seconds_behind_master is none %} NULL {% else %} {{ replica_status.seconds_behind_master }}s {% endif %}
Lag
{{ replica_status.slave_io_running or 'N/A' }}
IO Thread
{{ replica_status.slave_sql_running or 'N/A' }}
SQL Thread
Error {{ replica_status.last_errno }}: {{ replica_status.last_error }}
Memory allocation and efficiency
Pool Size
{{ buffer_pool.pool_size_gb }}GB
Used
{{ buffer_pool.used_gb }}GB
{% if buffer_pool.used_percent is not none %}({{ buffer_pool.used_percent }}%)
{% endif %}Free
{{ buffer_pool.free_gb }}GB
{% if buffer_pool.free_percent is not none %}({{ buffer_pool.free_percent }}%)
{% endif %}Dirty Pages
{{ buffer_pool.dirty_percent if buffer_pool.dirty_percent is not none else '-' }}%
Hit Ratio
{{ buffer_pool.hit_ratio if buffer_pool.hit_ratio is not none else '-' }}%
Wait Free
{{ buffer_pool.wait_free if buffer_pool.wait_free is not none else '0' }}
{{ buffer_pool.health_reason }}
{% endif %}Averages since server start
QPS
{{ derived_metrics.qps }}
TPS (txn/s)
{{ derived_metrics.tps if derived_metrics.tps is not none else '-' }}
SELECT/s
{{ derived_metrics.select_ps if derived_metrics.select_ps is not none else '-' }}
INSERT/s
{{ derived_metrics.insert_ps if derived_metrics.insert_ps is not none else '-' }}
UPDATE/s
{{ derived_metrics.update_ps if derived_metrics.update_ps is not none else '-' }}
DELETE/s
{{ derived_metrics.delete_ps if derived_metrics.delete_ps is not none else '-' }}
Connection Utilization
{{ derived_metrics.conn_current }} / {{ derived_metrics.conn_max }}{{ derived_metrics.conn_utilization }}%
Temp Table Disk Spill
{{ info_tooltip("Percentage of temporary tables that were too large for memory and spilled to disk. Created_tmp_disk_tables / Created_tmp_tables. High values (>25%) suggest increasing tmp_table_size or optimizing queries with large sorts/groups.") }}{{ derived_metrics.tmp_disk_ratio }}%
Rows/Query
{{ info_tooltip("Average rows examined per SELECT (Innodb_rows_read / Com_select). High values indicate missing indexes or full table scans. Below 1,000 is healthy.") }}{% if derived_metrics.query_efficiency >= 1000000 %}{{ "%.1f"|format(derived_metrics.query_efficiency / 1000000) }}M{% elif derived_metrics.query_efficiency >= 1000 %}{{ "%.1f"|format(derived_metrics.query_efficiency / 1000) }}K{% else %}{{ derived_metrics.query_efficiency }}{% endif %}
Table Cache Hit
{{ info_tooltip("How often MySQL finds tables in the open table cache (Table_open_cache_hits / total). Low values suggest increasing table_open_cache.") }}{{ derived_metrics.table_cache_hit }}%
Thread Cache Hit
{{ info_tooltip("How often MySQL reuses threads from cache vs creating new ones (1 - Threads_created / Connections). Low values suggest increasing thread_cache_size.") }}{{ derived_metrics.thread_cache_hit }}%
Aborted Conn
{{ info_tooltip("Percentage of connection attempts that failed (Aborted_connects / Connections). Spikes indicate auth failures, network issues, or client bugs.") }}{{ derived_metrics.aborted_conn_ratio }}%
Most active tables by I/O operations (top 10)
| Schema | Table | Reads | Writes | Total Ops | Ops/sec |
|---|---|---|---|---|---|
Hot tables indicate access frequency, not buffer pool size. Data from performance_schema. Click column headers to sort.
โน๏ธ Ops/sec = total_ops รท server_uptime (average since server start, not real-time)
From performance_schema.events_statements_summary_by_digest
| Query | Exec Count | Total Time | Avg Time | Rows Examined | Rows Sent |
|---|---|---|---|---|---|
| {{ q.digest_text[:120] }}{% if q.digest_text|length > 120 %}...{% endif %} | {{ q.exec_count|int|format_number }} | {% if q.total_time_s|float >= 3600 %}{{ "%.1f"|format(q.total_time_s|float / 3600) }}h{% elif q.total_time_s|float >= 60 %}{{ "%.1f"|format(q.total_time_s|float / 60) }}m{% elif q.total_time_s|float >= 1 %}{{ "%.1f"|format(q.total_time_s|float) }}s{% else %}{{ "%.0f"|format(q.total_time_s|float * 1000) }}ms{% endif %} | {% if q.avg_time_s|float >= 3600 %}{{ "%.1f"|format(q.avg_time_s|float / 3600) }}h{% elif q.avg_time_s|float >= 60 %}{{ "%.1f"|format(q.avg_time_s|float / 60) }}m{% elif q.avg_time_s|float >= 1 %}{{ "%.2f"|format(q.avg_time_s|float) }}s{% elif q.avg_time_s|float >= 0.001 %}{{ "%.1f"|format(q.avg_time_s|float * 1000) }}ms{% else %}{{ "%.0f"|format(q.avg_time_s|float * 1000000) }}ฮผs{% endif %} | {{ q.rows_examined|int|format_number }} | {{ q.rows_sent|int|format_number }} |
{{ index_usage.indexes|length }} indexes from performance_schema
| Schema.Table | Index | Reads | Writes | Size |
|---|---|---|---|---|
| {{ idx.schema }}.{{ idx.table }} | {{ idx.index }} | {{ idx.read_ops|int|format_number }} | {{ idx.write_ops|int|format_number }} | {% if idx.index_size is defined and idx.index_size|int > 0 %}{{ (idx.index_size|int) | format_bytes }}{% else %}-{% endif %} |
Zero reads since server start โ write-only overhead. Consider dropping after verification.
| Schema.Table | Index | Writes | Size |
|---|---|---|---|
| {{ idx.schema }}.{{ idx.table }} | {{ idx.index }} | {{ idx.write_ops|int|format_number }} | {% if idx.index_size|int > 0 %}{{ (idx.index_size|int) | format_bytes }}{% else %}-{% endif %} |
Note: {{ index_usage.unused_error }}
{% endif %}{{ table_sizes.tables|length }} tables from information_schema.TABLES
| Schema.Table | Rows | Data | Index | Free | Total |
|---|---|---|---|---|---|
| {{ t.schema }}.{{ t.table }} | {{ "{:,}".format(t.rows|int) }} | {{ (t.data_size|int) | format_bytes }} | {{ (t.index_size|int) | format_bytes }} | {{ (t.data_free|int) | format_bytes }} | {{ (t.total_size|int) | format_bytes }} |
{% if replica_status.seconds_behind_master is none %}NULL{% else %}{{ replica_status.seconds_behind_master }}s{% endif %}
Seconds Behind Master
{{ replica_status.slave_io_running or 'N/A' }}
{{ replica_status.slave_io_state or 'No state info' }}
{{ replica_status.slave_sql_running or 'N/A' }}
{{ replica_status.slave_sql_state or 'No state info' }}
{{ replica_status.retrieved_gtid_set }}
{{ replica_status.executed_gtid_set }}
{{ replica_status.last_io_error }}
{{ replica_status.last_sql_error }}
This server is configured as a master with binary logging enabled.
This server is not configured as a replica and does not have binary logging enabled.
{% if innodb_health.summary.has_issues %} {{ innodb_health.summary.issues|length }} Issue(s) {% else %} Healthy {% endif %}
{% if innodb_health.deadlock.has_deadlock %} Detected {% else %} None {% endif %}
{% if innodb_health.deadlock.timestamp %}Last: {{ innodb_health.deadlock.timestamp }}
{% endif %}{{ innodb_health.lock_contention.lock_waiting_transactions }} waiting
{% if innodb_health.lock_contention.history_list_length %}History: {{ innodb_health.lock_contention.history_list_length }}
{% endif %}{{ innodb_health.redo_log.checkpoint_age_mb | round(1) }} MB
Checkpoint age
{{ issue.message }}
Category: {{ issue.category }}
Query:
{{ trx.query }}
{{ innodb_health.semaphore.rw_shared_os_waits | default(0) }}
RW-Shared
{{ innodb_health.semaphore.rw_excl_os_waits | default(0) }}
RW-Excl
{{ innodb_health.semaphore.rw_sx_os_waits | default(0) }}
RW-SX
InnoDB health analysis is not available for this snapshot.
Re-run
collection to generate health data.
{{ raw_output }}
{{ innodb_output }}
{{ innodb_output }}
| Variable | Value |
|---|---|
|
|
|
| User | IP Address | IP Address | User | Active | Sleeping | Other | Total |
|---|---|---|---|---|---|---|---|
| Total |
| ID | User | Host | DB | Command | Time | State | Info |
|---|---|---|---|---|---|---|---|
| No processes found{% if user_filter or state_filter or min_time or query_filter %} matching filters{% endif %} | |||||||
-
SQL
Query
|
|||||||
| Variable | Value | Health |
|---|---|---|
|
โ
|
|
No configuration data available.
Run a new collection to get config variables.