The Query Analyzer feature of Monyog helps you identify problem SQL. Monyog can find problem SQL by one or more of the following methods:
- Taking SHOW PROCESSLIST snapshots at regular intervals (using Monyog Sniffer)
- Using MySQL Proxy to collect profiling data (using Monyog Sniffer)
- Utilising Performance schema tables (events_statements_summary_by_digest, events_statements_history_long)
- Parsing Slow Query Log and General Query Log (using Monyog Log Parser)
There are several advantages and disadvantages of each approach.
SHOW PROCESSLIST is available in all MySQL versions and it is the easiest to setup. However, taking a snapshot of SHOW PROCESSLIST does not guarantee that all queries will be captured. Many short-lived queries can be missed between two successive snapshots. It is a quick and easy way to find long running queries.
Log parsing requires some additional setup. Also, switching on the General Query Log puts a significant amount of load on the server. You should always keep the Slow Query Log switched on. Parsing the Slow Query Log is an effective way to find bad queries.
Using MySQL Proxy gives you the most accurate information on profiling SQL. However, during profiling you have to configure your clients to connect to MySQL Proxy, which in turn connects to MySQL server. Using MySQL Proxy ensures that all queries are profiled. It helps you to find problematic queries that don't take much time, but are executed thousands of times. Eliminating such queries can significantly improve the performance of your application.
Performance schema based sniffer makes use of the performance_schema database of the MySQL server. Monyog queries the performance schema database and collects snapshots at regular interval. Since each and every query is logged in the Performance schema database, Monyog displays even the short lived queries using this method.
To use the Monyog Query Analyzer functionality for a specific server, the server 'general query log' or 'slow query log' details must be configured in 'Connection Settings' or a 'query sniffer' must be enabled for that server.
Using the above tools to find problem SQL is almost always a post-mortem excercise. In certain situations you may want real-time notifications for long-running queries. Monyog can continuously monitor queries in real-time and send notifications (on mail or SNMP) for queries that take more than a specified amount of time to execute. You can also specify an option to kill such queries instantly.
Note: The Monyog Sniffer taking snapshots of SHOW PROCESSLIST is different from the the Processlist feature in that the Sniffer retains the information retrieved in a database for generation of reports and further analysis, whereas the Processlist feature just displays that information as is, without manipulating or storing it.
NOTE: This feature is available in Monyog Enterprise and Ultimate.