slowlog
A Rust library for parsing and analysing MySQL slow query logs. This library anonymises SQL queries by replacing literal values with placeholders, making it easy to identify and group similar queries for performance analysis.
Features
- Parse MySQL slow query log files
- Anonymise queries by replacing literals with placeholders
- Extract detailed query statistics (query time, lock time, rows examined, etc.)
- Generate fingerprints for normalised queries
Installation
Usage
Parsing Slow Log Files
use process_slow_log_file;
Processing from a Reader
use process_slow_log_reader;
use File;
use BufReader;
Query Anonymisation Examples
The library replaces all literal values with ? placeholders:
| Original Query | Anonymised Query |
|---|---|
SELECT * FROM users WHERE id = 123 |
SELECT * FROM users WHERE id = ? |
UPDATE users SET name = 'John' WHERE age > 18 |
UPDATE users SET name = ? WHERE age > ? |
INSERT INTO users (name, age) VALUES ('Alice', 25) |
INSERT INTO users (name, age) VALUES (?, ?) |
DELETE FROM users WHERE age BETWEEN 18 AND 65 |
DELETE FROM users WHERE age BETWEEN ? AND ? |
Query Statistics
The library extracts the following statistics from slow log entries:
- user: Database user who executed the query
- host: Host from which the query was executed
- time: Timestamp when the query was executed
- query_time: Total query execution time in seconds
- lock_time: Time spent waiting for locks in seconds
- rows_sent: Number of rows returned by the query
- rows_examined: Number of rows examined during query execution
API Documentation
Functions
process_slow_log_file<Q>(path: &str, query_callback: Q) -> io::Result<()>
Processes a slow log file and calls the callback for each query found.
Parameters:
path: Path to the slow log filequery_callback: Function called for each parsed query
Example:
use process_slow_log_file;
process_slow_log_file.unwrap;
process_slow_log_reader<R, Q>(reader: R, query_callback: Q) -> io::Result<()>
Processes slow log data from any BufRead source.
Parameters:
reader: Any type implementingBufReadquery_callback: Function called for each parsed query
Example:
use process_slow_log_reader;
use BufReader;
let reader = new;
process_slow_log_reader.unwrap;
Types
Query
QueryStats
QueryError
Supported SQL Features
- Basic SELECT, INSERT, UPDATE, DELETE statements
- WHERE clauses with operators (=, !=, <>, >, <, >=, <=)
- IN and NOT IN lists
- BETWEEN conditions
- LIKE and NOT LIKE patterns
- Subqueries
- CASE expressions
- SQL functions (MAX, MIN, CEIL, FLOOR, etc.)
- GROUPING operations
- Binary and unary operations
License
MIT
Repository
https://github.com/tpyo/slowlog
Author
Don Schonknecht don@tpyo.net