Check mysql-slow-queries¶
Overview¶
Checks the rate of slow queries in MySQL/MariaDB (Slow_queries / Questions). A high ratio means many queries are exceeding long_query_time and likely need optimisation. Also reports whether the slow query log is enabled and whether long_query_time is set above 10 seconds. Neither finding raises an alert on its own; both surface only as recommendations alongside a slow-query-ratio WARN/CRIT.
Important Notes:
Slow_queriesis a status counter; it increments for every query slower thanlong_query_timeregardless of whetherslow_query_logis on. The log determines only whether the slow queries are persisted to a file for postmortem analysis - it does not affect the counter the plugin reads.When the ratio triggers a warning, the check recommends enabling the slow query log if disabled, so admins can investigate the offending queries.
MySQL/MariaDB ship
long_query_timedefaulted to 10 seconds, which catches only the worst outliers. 1 - 3 seconds gives meaningful slow-query coverage on a typical OLTP workload. The plugin nudges admins to lower it when it is set above 10 seconds.
Data Collection:
Queries
SHOW GLOBAL VARIABLESforlong_query_timeandslow_query_log.Queries
SHOW GLOBAL STATUSforQuestionsandSlow_queries.Calculates the percentage of slow queries relative to total queries.
QuestionsandSlow_queriesare written to a local SQLite cache so the plugin can compute per-second rates instead of emitting cumulative counters that force Grafana panels to donon_negative_difference()themselves.Logic is taken from MySQLTuner script:mysql_stats() (the „Slow queries“ section), verified in sync with v2.8.41.
Fact Sheet¶
Fact |
Value |
|---|---|
Check Plugin Download |
https://github.com/Linuxfabrik/monitoring-plugins/tree/main/check-plugins/mysql-slow-queries |
Nagios/Icinga Check Name |
|
Check Interval Recommendation |
Every 5 minutes |
Can be called without parameters |
Yes |
Runs on |
Cross-platform |
Compiled for Windows |
No |
3rd Party Python modules |
|
Uses SQLite DBs |
|
Help¶
usage: mysql-slow-queries [-h] [-V] [--always-ok] [-c CRITICAL]
[--defaults-file DEFAULTS_FILE]
[--defaults-group DEFAULTS_GROUP]
[--timeout TIMEOUT] [-w WARNING]
Checks the rate of slow queries in MySQL/MariaDB (`Slow_queries` /
`Questions`). A high ratio means many queries are exceeding `long_query_time`
and likely need optimisation. Alerts when the ratio crosses `--warning` /
`--critical`. Also reports whether the slow query log is enabled and whether
`long_query_time` is set above 10 (the MySQL/MariaDB default of 10s only
catches the worst outliers).
options:
-h, --help show this help message and exit
-V, --version show program's version number and exit
--always-ok Always returns OK.
-c, --critical CRITICAL
CRIT threshold in percent. Supports Nagios ranges.
Default: 10
--defaults-file DEFAULTS_FILE
MySQL/MariaDB cnf file to read user, host and password
from. Example: `--defaults-
file=/var/spool/icinga2/.my.cnf`. Default:
/var/spool/icinga2/.my.cnf
--defaults-group DEFAULTS_GROUP
Group/section to read from in the cnf file. Default:
client
--timeout TIMEOUT Network timeout in seconds. Default: 3 (seconds)
-w, --warning WARNING
WARN threshold in percent. Supports Nagios ranges.
Default: 5
Usage Examples¶
./mysql-slow-queries --defaults-file=/var/spool/icinga2/.my.cnf
Output (OK):
Everything is ok. Slow queries: 0.5% (5.0 slow / 1.0K total). `long_query_time` = 2.0s. `slow_query_log` is `ON`.
Output (WARN):
Slow queries: 7.0% (7.0 slow / 100.0 total) [WARNING]. `long_query_time` = 15.0s. `slow_query_log` is `OFF`.
Recommendations:
* Investigate the slow query log and optimise the 7 slow queries (out of 100 total)
* Lower `long_query_time` (currently 15.0s) to 1 - 3 seconds for meaningful slow-query coverage; at the MySQL/MariaDB default of 10s only the worst outliers are captured
* Enable `slow_query_log` to troubleshoot the slow queries
States¶
WARN when
Slow_queries/Questionsreaches--warning(default 5%); CRIT at--critical(default 10%).--always-oksuppresses all alerts and always returns OK.
Perfdata / Metrics¶
The Slow_queries counter is emitted as an in-plugin-computed per-second rate instead of a uom='c' continuous counter; the delta appears from the second check run onwards (the first run needs a baseline in the local SQLite cache). Questions per second is intentionally not exposed here — it is already covered by mysql-traffic, and a plot of both metrics is unreadable because Slow_queries is normally orders of magnitude smaller than Questions.
Name |
Type |
Description |
|---|---|---|
mysql_long_query_time |
Seconds |
If a query takes longer than this many seconds to execute, the |
mysql_pct_slow_queries |
Percentage |
|
mysql_slow_queries_per_second |
Number |
Per-second rate of |
Credits, License¶
Authors: Linuxfabrik GmbH, Zurich
License: The Unlicense, see LICENSE file.
Credits:
heavily inspired by MySQLTuner (https://github.com/major/MySQLTuner-perl)