ΠΠ°ΠΊ Π²ΠΊΠ»ΡΡΠΈΡΡ ΠΆΡΡΠ½Π°Π» ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² MySQL ΠΈ MariaDB
ΠΡΡΠ½Π°Π» ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² β ΡΡΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½Π°Ρ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ MySQL ΠΈ MariaDB, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ SQL-ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ, Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΠ΅Π²ΡΡΠ°Π΅Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΉ ΠΏΠΎΡΠΎΠ³. ΠΠ½ ΡΠΈΠΊΡΠΈΡΡΠ΅Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠ°, Π²ΡΠ΅ΠΌΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΡ ΡΡΡΠΎΠΊ, ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΡ ΡΡΡΠΎΠΊ ΠΈ ΠΏΠΎΠ»Π½ΡΠΉ ΡΠ΅ΠΊΡΡ SQL β ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°ΠΌ Π±Π°Π· Π΄Π°Π½Π½ΡΡ ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΡΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΉ ΠΆΡΡΠ½Π°Π» Π°ΡΠ΄ΠΈΡΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°, ΡΠ½ΠΈΠΆΠ°ΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ³ΠΎ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ β ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΠΏΡΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π°, ΠΆΡΡΠ½Π°Π» ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΡΠΎΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ, ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΡΠ΅ Π·Π° Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Π΅Π³ΠΎ Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΡΠΌ Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ², ΡΠ΅ΡΡΡΡΠΊΡΡΡΠΈΠ·Π°ΡΠΈΠΈ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΈ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ² Π½Π° Π»ΡΠ±ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅ β ΠΎΡ ΠΎΠ΄Π½ΠΎΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΉ ΡΡΠ΅Π΄Ρ VPS Hosting Π΄ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΡΠ·Π»ΠΎΠ²ΠΎΠ³ΠΎ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Π±Π°Π· Π΄Π°Π½Π½ΡΡ .
ΠΠΎΡΠ΅ΠΌΡ ΠΆΡΡΠ½Π°Π» ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π²Π°ΠΆΠ½Π΅Π΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π°
ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ EXPLAIN ΠΈΠ»ΠΈ SHOW PROCESSLIST ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΎ, ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΡΠΎΠΎΠ±ΡΠ°ΡΡ ΠΎ Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡ. ΠΡΡΠ½Π°Π» ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ
Π·Π°ΠΏΡΠΎΡΠΎΠ² ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠΎΠ°ΠΊΡΠΈΠ²Π½ΠΎ: ΠΎΠ½ Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ Π·Π° ΡΠ°ΡΡ ΠΈΠ»ΠΈ Π΄Π½ΠΈ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΡΠ°ΡΠΈΠΊΠ°, ΡΠΈΠΊΡΠΈΡΡΡ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π² ΠΎΠΊΠ½Π΅ ΡΡΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ.
ΠΠ»ΡΡΠ΅Π²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° Π²ΠΊΠ»ΡΡΠ°ΡΡ:
- ΠΠ·ΠΎΠ»ΡΡΠΈΡ ΡΠ·ΠΊΠΈΡ
ΠΌΠ΅ΡΡ β ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΠ»ΠΈΡΠΈΡΡ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΈΡ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠ΅ CPU, ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΎΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΉ
Query_timeΠΈLock_time - ΠΠ½Π°Π»ΠΈΠ· ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ² Π² ΠΈΠ½Π΄Π΅ΠΊΡΠ°Ρ
β ΡΠ»Π°Π³
log_queries_not_using_indexesΠ²ΡΡΠ²Π»ΡΠ΅Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π·Π°ΠΏΡΠΎΡ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ Π΅Π³ΠΎ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ - ΠΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΡΠ΅ΡΡΠΈΠΉ β ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΡΠ½ΠΈΠΌΠΊΠΎΠ² ΠΆΡΡΠ½Π°Π»Π° Π΄ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅ ΡΠ°Π·Π²ΡΡΡΡΠ²Π°Π½ΠΈΡ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΏΡΠΈΠ²ΡΠ» Π»ΠΈ Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΠ΄ ΠΊ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Π·Π°ΠΏΡΠΎΡΠΎΠ²
- ΠΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠ½Π°Ρ Π±Π°Π·Π° Π΄Π»Ρ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ² β Π·Π½Π°ΡΠ΅Π½ΠΈΡ
Rows_examined, Π½Π° ΠΏΠΎΡΡΠ΄ΠΊΠΈ ΠΏΡΠ΅Π²ΡΡΠ°ΡΡΠΈΠ΅Rows_sent, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΡΠ³ΡΠ±Π»ΡΡΡΡΡ ΠΏΠΎΠ΄ Π½Π°Π³ΡΡΠ·ΠΊΠΎΠΉ
MySQL ΠΈ MariaDB: ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΆΡΡΠ½Π°Π»Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ²
ΠΠ±Π° Π΄Π²ΠΈΠΆΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΎΠ΄Π½Ρ ΠΈ ΡΡ ΠΆΠ΅ Π±Π°Π·ΠΎΠ²ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ ΠΆΡΡΠ½Π°Π»Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ², ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡΡ ΠΎΡ MySQL 5.1, ΠΎΠ΄Π½Π°ΠΊΠΎ MariaDB ΡΠ°ΡΡΠΈΡΠΈΠ»Π° Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ.
| Π€ΡΠ½ΠΊΡΠΈΡ | MySQL 8.0+ | MariaDB 10.6+ |
|---|---|---|
| ΠΠ°Π·ΠΎΠ²ΠΎΠ΅ Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΆΡΡΠ½Π°Π»Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² | ΠΠ° | ΠΠ° |
| ΠΡΠ°Π½ΡΠ»ΡΡΠ½ΠΎΡΡΡ `long_query_time` | ΠΠΈΠΊΡΠΎΡΠ΅ΠΊΡΠ½Π΄Ρ | ΠΠΈΠΊΡΠΎΡΠ΅ΠΊΡΠ½Π΄Ρ |
| `log_queries_not_using_indexes` | ΠΠ° | ΠΠ° |
| `log_slow_admin_statements` | ΠΠ° | ΠΠ° |
| `log_slow_slave_statements` | ΠΠ° | ΠΠ° (ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°) |
| `min_examined_row_limit` | ΠΠ° | ΠΠ° |
| `log_slow_verbosity` (ΡΠ°ΡΡΠΈΡΠ΅Π½Π½Π°Ρ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°) | ΠΠ΅Ρ | ΠΠ° (ΠΏΠ»Π°Π½ Π·Π°ΠΏΡΠΎΡΠ°, explain) |
| `log_slow_rate_limit` (Π²ΡΠ±ΠΎΡΠΊΠ°) | ΠΠ΅Ρ | ΠΠ° |
| `log_slow_filter` (ΠΏΠΎ ΡΠΈΠΏΡ Π·Π°ΠΏΡΠΎΡΠ°) | ΠΠ΅Ρ | ΠΠ° |
| `slow_query_log_always_write_time` | ΠΠ΅Ρ | ΠΠ° |
| Π‘ΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ Ρ `pt-query-digest` | ΠΠΎΠ»Π½Π°Ρ | ΠΠΎΠ»Π½Π°Ρ |
| Π€ΠΎΡΠΌΠ°Ρ Π²ΡΠ²ΠΎΠ΄Π° JSON | ΠΠ° (8.0.14+) | ΠΠ΅Ρ (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ΅ΠΊΡΡ) |
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ log_slow_verbosity ΠΈ log_slow_rate_limit Π² MariaDB ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΡΠ΅Π½Π½Ρ Π² Π²ΡΡΠΎΠΊΠΎΠ½Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΡ
ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΡΡ
ΡΡΠ΅Π΄Π°Ρ
, Π³Π΄Π΅ ΡΠ°ΠΌΠΎ ΠΏΠΎ ΡΠ΅Π±Π΅ Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΆΡΡΠ½Π°Π»Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°ΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠΌ ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
Π¨Π°Π³ 1: ΠΠ°ΠΉΠ΄ΠΈΡΠ΅ ΡΠ°ΠΉΠ» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
MySQL ΠΈ MariaDB ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΈΠ· ΡΠ°Π·Π½ΡΡ ΠΏΡΡΠ΅ΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π° ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ.
MySQL:
/etc/my.cnf (RPM-based: RHEL, CentOS, AlmaLinux, Rocky Linux)
/etc/mysql/my.cnf (Debian/Ubuntu)
/etc/mysql/mysql.conf.d/mysqld.cnf (Ubuntu Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠΌ mysql-server)
MariaDB:
/etc/my.cnf.d/server.cnf (RPM-based)
/etc/mysql/mariadb.conf.d/50-server.cnf (Debian/Ubuntu)
/etc/mysql/mariadb.cnf (Π±ΠΎΠ»Π΅Π΅ ΡΡΠ°ΡΡΠ΅ ΠΌΠ°ΠΊΠ΅ΡΡ Debian)
ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½Ρ, ΠΊΠ°ΠΊΠΎΠΉ ΡΠ°ΠΉΠ» Π°ΠΊΡΠΈΠ²Π΅Π½, Π·Π°ΠΏΡΠΎΡΠΈΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Ρ Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°:
mysqld --verbose --help 2>/dev/null | grep -A1 "Default options"
ΠΡΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΎΡΠ½ΡΠΉ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅ΠΌΠΎΠ½ ΡΠΈΡΠ°Π΅Ρ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅, Π²ΠΊΠ»ΡΡΠ°Ρ Π²ΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ !includedir.
ΠΡΠΊΡΠΎΠΉΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ°ΠΉΠ» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π² ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π΅ΠΌΠΎΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅:
sudo nano /etc/my.cnf
Π¨Π°Π³ 2: ΠΠΎΠ±Π°Π²ΡΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ ΠΆΡΡΠ½Π°Π»Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ
Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² [mysqld]
ΠΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΆΡΡΠ½Π°Π»Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ
Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΡΠ°Π·Π΄Π΅Π»Ρ [mysqld]. ΠΡΠ»ΠΈ ΡΠ°Π·Π΄Π΅Π» Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π΅Π³ΠΎ Π² Π½Π°ΡΠ°Π»Π΅ ΡΠ°ΠΉΠ»Π°.
[mysqld]
# Core slow query log settings
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-query.log
long_query_time = 1
# Log queries that skip index usage entirely
log_queries_not_using_indexes = 1
# Avoid flooding the log with index warnings on low-traffic tables
min_examined_row_limit = 100
# Log slow administrative statements (ALTER TABLE, OPTIMIZE TABLE, etc.)
log_slow_admin_statements = 1
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²:
slow_query_log = 1 β Π°ΠΊΡΠΈΠ²ΠΈΡΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ; ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ 0 Π΄Π»Ρ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π±Π΅Π· ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠ°
slow_query_log_file β Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΠΉ ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ ΠΆΡΡΠ½Π°Π»Π°; ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ° MySQL/MariaDB (mysql) Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠ°Π²Π° Π½Π° Π·Π°ΠΏΠΈΡΡ Π² ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³
long_query_time = 1 β ΠΏΠΎΡΠΎΠ³ Π² ΡΠ΅ΠΊΡΠ½Π΄Π°Ρ
, ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π΅ΡΡΡΠΈΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 0.5 Π΄Π»Ρ 500 ΠΌΡ); Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ 10 ΡΠ΅ΠΊΡΠ½Π΄ ΠΏΠΎΡΡΠΈ Π²ΡΠ΅Π³Π΄Π° ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΡΠ³ΠΊΠΎΠ΅ Π΄Π»Ρ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
log_queries_not_using_indexes β Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ Π·Π°ΠΏΡΠΎΡΡ Ρ ΠΏΠΎΠ»Π½ΡΠΌ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ long_query_time; ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π² ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΈ Ρ min_examined_row_limit Π΄Π»Ρ ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½ΠΈΡ ΡΡΠΌΠ° ΠΎΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ
ΡΠ°Π±Π»ΠΈΡ
min_examined_row_limit β Π·Π°ΠΏΡΠΎΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΡΡΠΎΠΊ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΏΠ°ΡΡΡ Π² ΠΆΡΡΠ½Π°Π» ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ log_queries_not_using_indexes; ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ Π·Π°ΡΠΎΡΠ΅Π½ΠΈΠ΅ ΠΆΡΡΠ½Π°Π»Π° ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΏΠΎΠΈΡΠΊΠ°ΠΌΠΈ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅
log_slow_admin_statements β ΡΠΈΠΊΡΠΈΡΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΡ
Π΅ΠΌΡ, Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠ΅ ΡΠ°Π±Π»ΠΈΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΡΠΎ ΡΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΈΠ· Π²ΠΈΠ΄Ρ ΠΊΠ°ΠΊ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΈ Π·Π°Π΄Π΅ΡΠΆΠ΅ΠΊ
Π‘ΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠ΅ Π΄Π»Ρ MariaDB Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠΎΠΈΡ Π²ΠΊΠ»ΡΡΠΈΡΡ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΡΠ΅Π΄Π΅:
# MariaDB only β extended per-query statistics in the log
log_slow_verbosity = query_plan,explain
# MariaDB only β log only 1 in every N qualifying queries (rate limiting)
log_slow_rate_limit = 10
log_slow_verbosity = query_plan,explain Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΏΠ»Π°Π½ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡΠ° Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π² ΠΊΠ°ΠΆΠ΄ΡΡ Π·Π°ΠΏΠΈΡΡ ΠΆΡΡΠ½Π°Π»Π°, ΡΡΡΡΠ°Π½ΡΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠΊΠ° EXPLAIN Π²ΡΡΡΠ½ΡΡ β ΡΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΈ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ΅ Π·Π°ΠΏΡΠΎΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΡΡ
ΡΠ°Π±Π»ΠΎΠ½Π°Ρ
Π½Π°Π³ΡΡΠ·ΠΊΠΈ.
Π¨Π°Π³ 3: Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ» ΠΆΡΡΠ½Π°Π»Π° ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΠΏΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ°
ΠΡΠ»ΠΈ ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π΅Π³ΠΎ ΠΈ Π½Π°Π·Π½Π°ΡΡΡΠ΅ Π²Π»Π°Π΄Π΅Π»ΡΡΠ° ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠΎΠΌ ΡΠ»ΡΠΆΠ±Ρ. ΠΡΠΎΠΏΡΡΠΊ ΡΡΠΎΠ³ΠΎ ΡΠ°Π³Π° β ΠΎΠ΄Π½Π° ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΡ
ΠΏΡΠΈΡΠΈΠ½, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΆΡΡΠ½Π°Π» ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ
Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΌΠΎΠ»ΡΠ° Π½Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΡΠ΅ΡΡΡ.
sudo mkdir -p /var/log/mysql
sudo touch /var/log/mysql/slow-query.log
sudo chown mysql:mysql /var/log/mysql/slow-query.log
sudo chmod 640 /var/log/mysql/slow-query.log
ΠΠ° ΡΠΈΡΡΠ΅ΠΌΠ°Ρ
Ρ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ SELinux (RHEL, CentOS, AlmaLinux) Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΡΠ°ΠΉΠ»Π°:
sudo semanage fcontext -a -t mysqld_log_t "/var/log/mysql(/.*)?"
sudo restorecon -Rv /var/log/mysql
ΠΡΠ»ΠΈ Π½Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ SELinux, Π΄Π΅ΠΌΠΎΠ½ ΡΡΠΏΠ΅ΡΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡΡ, Π½ΠΎ ΠΌΠΎΠ»ΡΠ° ΠΏΡΠΎΠΏΡΡΡΠΈΡ Π·Π°ΠΏΠΈΡΡ Π² ΡΠ°ΠΉΠ» ΠΆΡΡΠ½Π°Π»Π° β Π½Π΅ΠΏΡΠΈΡΡΠ½ΡΠΉ ΠΊΡΠ°ΠΉΠ½ΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΡ
ΠΎΡΠΈΠ±ΠΎΠΊ Π² /var/log/messages.
Π¨Π°Π³ 4: ΠΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΠ»ΡΠΆΠ±Ρ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
ΠΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΠ² ΡΠ»ΡΠΆΠ±Ρ. Π Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π°Ρ
Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ systemd (ΡΡΠ°Π½Π΄Π°ΡΡ Π½Π° Π»ΡΠ±ΠΎΠΌ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΌ Linux-ΡΠ΅ΡΠ²Π΅ΡΠ΅):
# MySQL
sudo systemctl restart mysqld
# MariaDB
sudo systemctl restart mariadb
ΠΠ° Π±ΠΎΠ»Π΅Π΅ ΡΡΠ°ΡΡΡ
ΡΠΈΡΡΠ΅ΠΌΠ°Ρ
Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ init.d:
# MySQL
sudo service mysqld restart
# MariaDB
sudo service mariadb restart
ΠΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ° ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΡΠ»ΡΠΆΠ±Π° Π·Π°ΠΏΡΡΡΠΈΠ»Π°ΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ:
sudo systemctl status mysqld # or mariadb
sudo journalctl -u mysqld -n 50 --no-pager
ΠΡΠ±Π°Ρ ΠΎΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π² my.cnf ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡ Π·Π°ΠΏΡΡΠΊ ΠΈ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡΡ Π² Π²ΡΠ²ΠΎΠ΄Π΅ ΠΆΡΡΠ½Π°Π»Π°.
Π¨Π°Π³ 5: ΠΠΊΠ»ΡΡΠΈΡΠ΅ ΠΆΡΡΠ½Π°Π» ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ
Π·Π°ΠΏΡΠΎΡΠΎΠ² Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (Π±Π΅Π· ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°)
ΠΠ»Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΡΡ
ΡΠ΅ΡΠ²Π΅ΡΠΎΠ², Π³Π΄Π΅ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»Π΅Π½, MySQL ΠΈ MariaDB ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΆΡΡΠ½Π°Π»Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ
Π·Π°ΠΏΡΠΎΡΠΎΠ² ΡΠ΅ΡΠ΅Π· SET GLOBAL. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, Π²Π½Π΅ΡΡΠ½Π½ΡΠ΅ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²ΡΡΡΠΏΠ°ΡΡ Π² ΡΠΈΠ»Ρ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Π½ΠΎ Π½Π΅ ΡΠΎΡ
ΡΠ°Π½ΡΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ° ΡΠ»ΡΠΆΠ±Ρ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ Π·Π°ΠΏΠΈΡΠ°Π½Ρ Π² my.cnf.
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow-query.log';
SET GLOBAL long_query_time = 1;
SET GLOBAL log_queries_not_using_indexes = 1;
SET GLOBAL min_examined_row_limit = 100;
ΠΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ Π΄Π»Ρ ΡΠΊΡΡΡΠ΅Π½Π½ΠΎΠΉ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠΈ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ β Π²ΠΊΠ»ΡΡΠΈΡΠ΅ Π΅Π³ΠΎ, ΡΠΎΠ±Π΅ΡΠΈΡΠ΅ 15β30-ΠΌΠΈΠ½ΡΡΠ½ΡΠΉ ΠΎΠ±ΡΠ°Π·Π΅Ρ Π² ΠΏΠ΅ΡΠΈΠΎΠ΄ ΠΏΠΈΠΊΠΎΠ²ΠΎΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΈ, Π·Π°ΡΠ΅ΠΌ ΠΎΡΠΊΠ»ΡΡΠΈΡΠ΅, Π½Π΅ Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°Ρ ΡΠ°ΠΉΠ» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈ Π½Π΅ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°Ρ Π΄Π΅ΠΌΠΎΠ½.
Π¨Π°Π³ 6: ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ
ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΠ΅ΡΡ ΠΊ ΠΊΠ»ΠΈΠ΅Π½ΡΡ MySQL ΠΈΠ»ΠΈ MariaDB:
mysql -u root -p
ΠΠ°ΡΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ ΡΠ°Π±Π»ΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
:
SHOW VARIABLES LIKE '%slow_query%';
SHOW VARIABLES LIKE 'long_query_time';
SHOW VARIABLES LIKE 'log_queries_not_using_indexes';
ΠΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΉ Π²ΡΠ²ΠΎΠ΄ Π΄Π»Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°:
+-------------------------------+-------------------------------+
| Variable_name | Value |
+-------------------------------+-------------------------------+
| slow_query_log | ON |
| slow_query_log_file | /var/log/mysql/slow-query.log |
+-------------------------------+-------------------------------+
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| long_query_time | 1.000 |
+-----------------+-------+
+-------------------------------+-------+
| Variable_name | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | ON |
+-------------------------------+-------+
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡΡ, ΡΡΠΎ Π² ΠΆΡΡΠ½Π°Π» Π²Π΅Π΄ΡΡΡΡ Π·Π°ΠΏΠΈΡΡ, ΠΏΡΠΎΠ²Π΅ΡΠΈΠ² ΡΡΡΡΡΠΈΠΊ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ
Π·Π°ΠΏΡΠΎΡΠΎΠ²:
SHOW GLOBAL STATUS LIKE 'Slow_queries';
ΠΡΠΎΡ ΡΡΡΡΡΠΈΠΊ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΏΡΠΎΡ ΠΏΡΠ΅Π²ΡΡΠ°Π΅Ρ long_query_time, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, Π°ΠΊΡΠΈΠ²Π½ΠΎ Π»ΠΈ Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΆΡΡΠ½Π°Π»Π° Π² ΡΠ°ΠΉΠ» β ΡΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π»Ρ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΡΡ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΡΡΠ°ΡΠΈΡΡ Π²ΡΠ΅ΠΌΡ Π½Π° Π°Π½Π°Π»ΠΈΠ· ΠΏΡΡΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΆΡΡΠ½Π°Π»Π°.
Π¨Π°Π³ 7: Π§ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΡ Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠ³ΠΎ ΠΆΡΡΠ½Π°Π»Π°
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ tail Π΄Π»Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΠΆΡΡΠ½Π°Π»Π° Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π½Π°Π³ΡΡΠ·ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΠ° ΠΈΠ»ΠΈ Π² ΠΏΠ΅ΡΠΈΠΎΠ΄ ΠΏΠΈΠΊΠΎΠ²ΠΎΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΈ:
sudo tail -f /var/log/mysql/slow-query.log
Π’ΠΈΠΏΠΈΡΠ½Π°Ρ Π·Π°ΠΏΠΈΡΡ ΠΆΡΡΠ½Π°Π»Π° Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
# Time: 2024-10-11T12:45:23.489187Z
# User@Host: app_user[app_user] @ 10.0.1.45 [] Id: 1042
# Query_time: 4.561529 Lock_time: 0.000115 Rows_sent: 1 Rows_examined: 847293
# Bytes_sent: 512
SET timestamp=1697030723;
SELECT * FROM orders WHERE customer_email = 'user@example.com' ORDER BY created_at DESC;
Π§ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΠΎΠ»Π΅:
Query_time β ΠΎΠ±ΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠΎ Π½Π°ΡΡΠ΅Π½Π½ΡΠΌ ΡΠ°ΡΠ°ΠΌ Π² ΡΠ΅ΠΊΡΠ½Π΄Π°Ρ
Lock_time β Π²ΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ ΡΠ°Π±Π»ΠΈΡ ΠΈΠ»ΠΈ ΡΡΡΠΎΠΊ; Π²ΡΡΠΎΠΊΠΎΠ΅ ΡΠΎΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Lock_time ΠΊ Query_time ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΈΡ, Π° Π½Π΅ Π½Π° ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ
Rows_sent β ΡΡΡΠΎΠΊΠΈ, Π²ΠΎΠ·Π²ΡΠ°ΡΡΠ½Π½ΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡ
Rows_examined β ΡΡΡΠΎΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π» Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°; ΡΠΎΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Rows_examined / Rows_sent Π²ΡΡΠ΅ 100:1 ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ²Π½ΡΠΌ ΠΏΡΠΈΠ·Π½Π°ΠΊΠΎΠΌ ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΈΠ»ΠΈ ΠΏΠ»ΠΎΡ
ΠΎ ΠΈΠ·Π±ΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ°
Bytes_sent β ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π² MariaDB Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠΉ Π΄Π΅ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ; ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π»Ρ Π²ΡΡΠ²Π»Π΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ², Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΡ
ΠΈΠ·Π»ΠΈΡΠ½Π΅ Π±ΠΎΠ»ΡΡΠΈΠ΅ Π½Π°Π±ΠΎΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ²
Π ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π·Π°ΠΏΡΠΎΡ ΠΏΡΠΎΠ²Π΅ΡΠΈΠ» 847 293 ΡΡΡΠΎΠΊΠΈ, ΡΡΠΎΠ±Ρ Π²Π΅ΡΠ½ΡΡΡ 1 ΡΡΡΠΎΠΊΡ. ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ° Π½Π° customer_email ΡΠΎΠΊΡΠ°ΡΠΈΡ Rows_examined ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎ 1, ΡΠΌΠ΅Π½ΡΡΠΈΠ² Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Ρ 4,5 ΡΠ΅ΠΊΡΠ½Π΄Ρ Π΄ΠΎ ΡΡΠ±ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Π½ΠΎΠ³ΠΎ.
Π¨Π°Π³ 8: ΠΠ½Π°Π»ΠΈΠ· ΠΆΡΡΠ½Π°Π»Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ mysqldumpslow ΠΈ pt-query-digest
Π§ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΆΡΡΠ½Π°Π»Π° Π½Π΅ΠΏΡΠ°ΠΊΡΠΈΡΠ½ΠΎ Π² Π±ΠΎΠ»ΡΡΠΈΡ
ΠΌΠ°ΡΡΡΠ°Π±Π°Ρ
. ΠΠ²Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° Π°Π³ΡΠ΅Π³ΠΈΡΡΡΡ ΠΈ ΡΠ°Π½ΠΆΠΈΡΡΡΡ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ ΠΏΠΎ ΠΎΠ±ΡΠ΅ΠΌΡ Π²Π»ΠΈΡΠ½ΠΈΡ.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ mysqldumpslow (Π²Ρ
ΠΎΠ΄ΠΈΡ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ MySQL/MariaDB)
# Top 10 queries by total execution time
sudo mysqldumpslow -s t -t 10 /var/log/mysql/slow-query.log
# Top 10 queries by average execution time
sudo mysqldumpslow -s at -t 10 /var/log/mysql/slow-query.log
# Top 10 queries by rows examined
sudo mysqldumpslow -s r -t 10 /var/log/mysql/slow-query.log
mysqldumpslow Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·ΡΠ΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² (Π·Π°ΠΌΠ΅Π½ΡΡ Π»ΠΈΡΠ΅ΡΠ°Π»ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π° N ΠΈΠ»ΠΈ S), ΡΡΠΎΠ±Ρ ΡΡΡΡΠΊΡΡΡΠ½ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°Π»ΠΈΡΡ Π²ΠΌΠ΅ΡΡΠ΅ β ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π»Ρ Π²ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΠ°ΡΡΠΎ Π²ΡΡΡΠ΅ΡΠ°ΡΡΠΈΡ
ΡΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ².
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ pt-query-digest (Percona Toolkit β ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΡΠ΅Π΄Ρ)
# Install Percona Toolkit (Debian/Ubuntu)
sudo apt-get install percona-toolkit
# Install Percona Toolkit (RHEL/CentOS/AlmaLinux)
sudo yum install percona-toolkit
# Generate a full digest report
sudo pt-query-digest /var/log/mysql/slow-query.log
# Show only the top 5 queries by total time
sudo pt-query-digest --limit 5 /var/log/mysql/slow-query.log
# Output to a file for later review
sudo pt-query-digest /var/log/mysql/slow-query.log > /tmp/slow_query_report.txt
pt-query-digest ΡΠΎΡΠΌΠΈΡΡΠ΅Ρ ΡΠ°Π½ΠΆΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΎΡΡΡΡ, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ ΡΠΈΠ³Π½Π°ΡΡΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°, ΠΎΠ±ΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΡΡΠ΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ, ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΈ ΠΏΡΠΎΡΠ΅Π½ΡΠΈΠ»ΡΠ½ΠΎΠ΅ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. ΠΡΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠΎΡΠ½Π΅Π΅ mysqldumpslow ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌΠΈ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°ΠΌΠΈ Π±Π°Π· Π΄Π°Π½Π½ΡΡ
Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° ΠΆΡΡΠ½Π°Π»ΠΎΠ² ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ
Π·Π°ΠΏΡΠΎΡΠΎΠ².
Π¨Π°Π³ 9: ΠΠ°ΡΡΡΠΎΠΉΡΠ΅ ΡΠΎΡΠ°ΡΠΈΡ ΠΆΡΡΠ½Π°Π»ΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ logrotate
ΠΠ΅Π· ΡΠΎΡΠ°ΡΠΈΠΈ ΠΆΡΡΠ½Π°Π» ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ
Π·Π°ΠΏΡΠΎΡΠΎΠ² ΡΠ°ΡΡΡΡ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎ. ΠΠ° Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅ Ρ long_query_time, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌ Π½Π° 1 ΡΠ΅ΠΊΡΠ½Π΄Ρ, ΡΠ°ΠΉΠ» ΠΌΠΎΠΆΠ΅Ρ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
Π³ΠΈΠ³Π°Π±Π°ΠΉΡ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
Π΄Π½Π΅ΠΉ.
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ logrotate:
sudo nano /etc/logrotate.d/mysql-slow
/var/log/mysql/slow-query.log {
daily
rotate 14
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/usr/bin/mysqladmin flush-logs 2>/dev/null || true
endscript
}
ΠΠΎΡΡΠ½Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ΅Π²ΡΡ
Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²:
rotate 14 β ΡΠΎΡ
ΡΠ°Π½ΡΠ΅Ρ 14 Π΄Π½Π΅ΠΉ ΡΠΆΠ°ΡΡΡ
Π°ΡΡ
ΠΈΠ²ΠΎΠ²; Π½Π°ΡΡΡΠΎΠΉΡΠ΅ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π²Π°ΡΠΈΠΌ Π΄ΠΈΡΠΊΠΎΠ²ΡΠΌ Π±ΡΠ΄ΠΆΠ΅ΡΠΎΠΌ ΠΈ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌΠΈ ΠΊ Π°ΡΠ΄ΠΈΡΡ
compress / delaycompress β ΡΠΆΠΈΠΌΠ°Π΅Ρ ΡΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π² gzip, Π½ΠΎ ΠΎΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ ΡΠΆΠ°ΡΠΈΠ΅ Π½Π° ΠΎΠ΄ΠΈΠ½ ΡΠΈΠΊΠ», ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΠΆΠ°ΡΠΈΡ ΡΠ°ΠΉΠ»Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π΄Π΅ΠΌΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
postrotate β Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ mysqladmin flush-logs ΠΏΠΎΡΠ»Π΅ ΡΠΎΡΠ°ΡΠΈΠΈ, ΡΡΠΎ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ Π΄Π΅ΠΌΠΎΠ½Ρ Π·Π°ΠΊΡΡΡΡ ΡΠ΅ΠΊΡΡΠΈΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠ°ΠΉΠ»Π° ΠΆΡΡΠ½Π°Π»Π° ΠΈ ΠΎΡΠΊΡΡΡΡ Π½ΠΎΠ²ΡΠΉ; Π±Π΅Π· ΡΡΠΎΠ³ΠΎ MySQL/MariaDB ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ Π² ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» Π΄ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°
ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΎΡΠ°ΡΠΈΡ Π²ΡΡΡΠ½ΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ:
sudo logrotate -f /etc/logrotate.d/mysql-slow
Π¨Π°Π³ 10: ΠΡΠΊΠ»ΡΡΠΈΡΠ΅ ΠΆΡΡΠ½Π°Π» ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ
Π·Π°ΠΏΡΠΎΡΠΎΠ², ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π½ΡΠΆΠ΅Π½
ΠΠ΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠ΅ Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΆΡΡΠ½Π°Π»Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ
Π·Π°ΠΏΡΠΎΡΠΎΠ² Ρ Π½ΠΈΠ·ΠΊΠΈΠΌ ΠΏΠΎΡΠΎΠ³ΠΎΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 0,5 ΡΠ΅ΠΊΡΠ½Π΄Ρ) Π½Π° Π²ΡΡΠΎΠΊΠΎΠ½Π°Π³ΡΡΠΆΠ΅Π½Π½ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΡΡΡΠΈΠΌΡΠ΅ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ
ΠΎΠ΄Ρ Π½Π° I/O. ΠΡΠΊΠ»ΡΡΠΈΡΠ΅ Π΅Π³ΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠ±ΠΎΡΠ° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π΄Π°Π½Π½ΡΡ
:
Π§Π΅ΡΠ΅Π· ΡΠ°ΠΉΠ» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ (ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ):
[mysqld]
slow_query_log = 0
ΠΠ°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΠ»ΡΠΆΠ±Ρ:
sudo systemctl restart mysqld # or mariadb
Π§Π΅ΡΠ΅Π· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Π½Π΅ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ):
SET GLOBAL slow_query_log = 'OFF';
ΠΠ΅ΡΠΎΠ΄ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»Π΅Π½ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠ°ΡΡ β ΠΎΠ½ Π²ΡΡΡΠΏΠ°Π΅Ρ Π² ΡΠΈΠ»Ρ Π·Π° ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Ρ Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΡΡΠΎΡ.
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ: ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ performance_schema Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
ΠΡΡΠ½Π°Π» ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ
Π·Π°ΠΏΡΠΎΡΠΎΠ² ΡΠΈΠΊΡΠΈΡΡΠ΅Ρ Π·Π°ΠΏΡΠΎΡΡ, ΠΏΡΠ΅Π²ΡΡΠ°ΡΡΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠ³. Π’Π°Π±Π»ΠΈΡΠ° performance_schema events_statements_summary_by_digest ΡΠΈΠΊΡΠΈΡΡΠ΅Ρ Π°Π³ΡΠ΅Π³ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π±Π»ΠΎΠ½Π° Π·Π°ΠΏΡΠΎΡΠ°, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π‘ΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΠΎΠΈΡ
ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π°ΡΡ ΠΏΠΎΠ»Π½ΡΡ ΠΊΠ°ΡΡΠΈΠ½Ρ.
SELECT
DIGEST_TEXT,
COUNT_STAR,
ROUND(SUM_TIMER_WAIT / 1e12, 3) AS total_time_sec,
ROUND(AVG_TIMER_WAIT / 1e12, 6) AS avg_time_sec,
SUM_ROWS_EXAMINED,
SUM_ROWS_SENT
FROM performance_schema.events_statements_summary_by_digest
ORDER BY SUM_TIMER_WAIT DESC
LIMIT 10;
ΠΡΠΎΡ Π·Π°ΠΏΡΠΎΡ Π²ΡΡΠ²Π»ΡΠ΅Ρ 10 Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ΅ΡΡΡΡΠΎΡΠΌΠΊΠΈΡ
ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Π·Π°ΠΏΡΠΎΡΠΎΠ² Π·Π° Π²ΡΡ ΠΈΡΡΠΎΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² β Π²ΠΊΠ»ΡΡΠ°Ρ Π±ΡΡΡΡΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ ΡΠ°Π· ΠΈ Π² ΡΠΎΠ²ΠΎΠΊΡΠΏΠ½ΠΎΡΡΠΈ Π΄ΠΎΠΌΠΈΠ½ΠΈΡΡΡΡ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ CPU, ΡΡΠΎ ΠΆΡΡΠ½Π°Π» ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ
Π·Π°ΠΏΡΠΎΡΠΎΠ² Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π°ΡΠΈΠΊΡΠΈΡΡΠ΅Ρ.
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ Ρ
ΠΎΡΡΠΈΠ½Π³ΠΎΠ²ΠΎΠΉ ΡΡΠ΅Π΄Ρ
ΠΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠ³ long_query_time Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΎΠ»ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ ΠΏΡΠΎΡΠΈΠ»Ρ ΡΠ΅ΡΡΡΡΠΎΠ²:
Π‘ΡΠ΅Π΄Ρ ΠΎΠ±ΡΠ΅Π³ΠΎ Ρ
ΠΎΡΡΠΈΠ½Π³Π° β ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π½Π΅Ρ ΠΏΡΡΠΌΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ my.cnf; ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ SET GLOBAL, Π΅ΡΠ»ΠΈ Ρ
ΠΎΡΡΠΈΠ½Π³-ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ SUPER ΠΈΠ»ΠΈ SYSTEM_VARIABLES_ADMIN, ΠΈΠ»ΠΈ Π·Π°ΠΏΡΠΎΡΠΈΡΠ΅ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΆΡΡΠ½Π°Π»Ρ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ
Π·Π°ΠΏΡΠΎΡΠΎΠ² ΡΠ΅ΡΠ΅Π· ΠΏΠ°Π½Π΅Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ
Π‘ΡΠ΅Π΄Ρ VPS β ΠΏΠΎΠ»Π½ΡΠΉ root-Π΄ΠΎΡΡΡΠΏ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΏΠΎΠ»Π½ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π°Π΄ Π²ΡΠ΅ΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ; ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° VPS Ρ cPanel ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌ ΠΆΡΡΠ½Π°Π»Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ
Π·Π°ΠΏΡΠΎΡΠΎΠ² ΡΠ΅ΡΠ΅Π· ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ MySQL Π² WHM, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π² my.cnflong_query_time Π½Π° ΡΡΠΎΠ²Π½Π΅ 0.1 ΡΠ΅ΠΊΡΠ½Π΄ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ log_slow_rate_limit (MariaDB) ΠΈΠ»ΠΈ Π²ΡΠ±ΠΎΡΠΊΠΈ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΎΠ±ΡΡΠΌΠ° ΠΆΡΡΠ½Π°Π»Π°ΠΡΠ»ΠΈ Π²Π°Ρ ΡΡΠ΅ΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π²Π΅Π±-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΉ ΡΠ΅ΡΠ΅Π· ΠΏΠ°Π½Π΅Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ VPS, ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΌΠ΅ΡΠΎΠΊ ΠΆΡΡΠ½Π°Π»Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΠΌΠ΅ΡΠΊΠ°ΠΌΠΈ ΠΆΡΡΠ½Π°Π»Π° HTTP-Π΄ΠΎΡΡΡΠΏΠ° Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ Π·Π°Π΄Π΅ΡΠΆΠ΅ΠΊ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π΄ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ².
ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΌΠ°ΡΡΠΈΡΠ° ΡΠ΅ΡΠ΅Π½ΠΈΠΉ: Π²ΡΠ±ΠΎΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠ³Π°
| Π‘ΡΠ΅Π΄Π° | Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌΡΠΉ `long_query_time` | `log_queries_not_using_indexes` | ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ |
|---|---|---|---|
| Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° / ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ | 0,1 β 0,5 Ρ | ΠΠΠ | Π Π°Π½Π½Π΅Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΡΠ΅ΡΡΠΈΠΉ; ΠΎΠ±ΡΡΠΌ ΠΆΡΡΠ½Π°Π»Π° ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌ |
| ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½Π°Ρ ΡΡΠ΅Π΄Π° Ρ Π½ΠΈΠ·ΠΊΠΎΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΎΠΉ | 1,0 Ρ | ΠΠΠ Ρ `min_examined_row_limit = 500` | Π‘Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠΊΡΡΡΠΈΠ΅ Π±Π΅Π· ΠΈΠ·Π±ΡΡΠΎΡΠ½ΠΎΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΈ Π½Π° I/O |
| ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½Π°Ρ ΡΡΠ΅Π΄Π° Ρ Π²ΡΡΠΎΠΊΠΎΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΎΠΉ | 0,5 β 1,0 Ρ | ΠΠΠ Ρ `log_slow_rate_limit = 10` (MariaDB) | ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΡΡΠΎΡΡ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄ΠΈΡΠΊΠΎΠ²ΡΠΌ I/O |
| OLAP / ΡΠ΅ΡΠ²Π΅Ρ ΠΎΡΡΡΡΠ½ΠΎΡΡΠΈ | 5,0 β 10,0 Ρ | ΠΠ«ΠΠ | ΠΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ; ΡΠΎΠΊΡΡ Π½Π° Π²ΡΠ±ΡΠΎΡΠ°Ρ |
| ΠΠ±ΡΠΈΠΉ Ρ ΠΎΡΡΠΈΠ½Π³ (ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ) | 2,0 Ρ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°) | ΠΠ°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ° | ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ `performance_schema` ΠΊΠ°ΠΊ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ |
Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΈ ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ Π²ΡΠ²ΠΎΠ΄Ρ
ΠΠ΅ΡΠ΅Π΄ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ°ΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΏΡΠ½ΠΊΡΠΎΠ²:
- Π Π°Π·Π΄Π΅Π»
[mysqld]Π²my.cnfΡΠΎΠ΄Π΅ΡΠΆΠΈΡslow_query_log = 1, Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠΉ ΠΏΡΡΡslow_query_log_fileΠΈlong_query_time, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π²Π°ΡΠ΅ΠΌΡ ΠΏΡΠΎΡΠΈΠ»Ρ ΡΡΠ°ΡΠΈΠΊΠ° - Π€Π°ΠΉΠ» ΠΆΡΡΠ½Π°Π»Π° ΠΈ Π΅Π³ΠΎ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
mysqlΡ ΠΏΡΠ°Π²Π°ΠΌΠΈ Π½Π° Π·Π°ΠΏΠΈΡΡ; Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Ρ SELinux ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΡΠ°ΠΉΠ»Π° ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΠΊΠ°ΠΊmysqld_log_t
SHOW VARIABLES LIKE '%slow_query%' ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π°Π΅Ρ slow_query_log = ON ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ° ΡΠ»ΡΠΆΠ±Ρ
SHOW GLOBAL STATUS LIKE 'Slow_queries' ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π΅Π½ΡΠ»Π΅Π²ΠΎΠΉ ΠΈ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡΠΈΠΉΡΡ ΡΡΡΡΡΠΈΠΊ, ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π°Ρ, ΡΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΡΡ
log_queries_not_using_indexes Π²ΠΊΠ»ΡΡΡΠ½ ΠΈ ΡΠΎΠΏΡΡΠΆΡΠ½ Ρ min_examined_row_limit Π΄Π»Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΡ Π·Π°ΡΠΎΡΠ΅Π½ΠΈΡ ΠΆΡΡΠ½Π°Π»Π° ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΏΠΎΠΈΡΠΊΠ°ΠΌΠΈ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅
log_slow_admin_statements Π²ΠΊΠ»ΡΡΡΠ½ Π΄Π»Ρ ΡΠΈΠΊΡΠ°ΡΠΈΠΈ ALTER TABLE, OPTIMIZE TABLE ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΡ
DDL-ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²Π»ΡΡΡΡΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΠΌΠΈ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°ΠΌΠΈ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΡΡ
Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ ΡΠ°Π±Π»ΠΈΡ
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ logrotate Π½Π°ΡΡΡΠΎΠ΅Π½Π° Ρ Ρ
ΡΠΊΠΎΠΌ postrotate, Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΌ mysqladmin flush-logspt-query-digest ΠΈΠ»ΠΈ mysqldumpslow Π΄Π»Ρ Π°Π³ΡΠ΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΆΡΡΠ½Π°Π»Π° ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ 3β5 Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ΅ΡΡΡΡΠΎΡΠΌΠΊΠΈΡ
Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΏΠΎ ΠΎΠ±ΡΠ΅ΠΌΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡEXPLAIN (ΠΈΠ»ΠΈ EXPLAIN ANALYZE Π² MySQL 8.0+) ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΡ ΠΈΠ»ΠΈ ΡΠ΅ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ° Π·Π°ΠΏΡΠΎΡΠ°long_query_time ΠΏΠΎΠ²ΡΡΠ΅Π½ ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠΈΠΊΠ»Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΠΊΡΡΠΈΡ
Π½Π°ΠΊΠ»Π°Π΄Π½ΡΡ
ΡΠ°ΡΡ
ΠΎΠ΄ΠΎΠ² Π½Π° I/OΠ§Π°ΡΡΠΎ Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ
ΠΠ»ΠΈΡΠ΅Ρ Π»ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΆΡΡΠ½Π°Π»Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ?
ΠΡΠΈ ΠΏΠΎΡΠΎΠ³Π΅ 1 ΡΠ΅ΠΊΡΠ½Π΄Π° ΠΈ Π²ΡΡΠ΅ ΠΏΡΠΈ ΡΠΈΠΏΠΈΡΠ½ΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΠΎΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠ΅ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ
ΠΎΠ΄Ρ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½Ρ β ΠΎΠ±ΡΡΠ½ΠΎ ΠΌΠ΅Π½Π΅Π΅ 1% ΠΎΡ ΠΎΠ±ΡΠ΅Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ². ΠΠ°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ
ΠΎΠ΄Ρ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ ΠΎΡΡΡΠΈΠΌΡΠΌΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ long_query_time Π½ΠΈΠΆΠ΅ 0,1 ΡΠ΅ΠΊΡΠ½Π΄Ρ ΠΈΠ»ΠΈ ΠΏΡΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ log_queries_not_using_indexes Π² ΡΡ
Π΅ΠΌΠ΅ Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ
Π½Π΅ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ
ΡΠ°Π±Π»ΠΈΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ log_slow_rate_limit (MariaDB) ΠΈΠ»ΠΈ ΠΏΠΎΠ²ΡΡΡΡΠ΅ min_examined_row_limit Π΄Π»Ρ ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΡΡΡΠ΅ΠΊΡΠ°.
ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ Π²ΠΊΠ»ΡΡΠΈΡΡ ΠΆΡΡΠ½Π°Π» ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π±Π΅Π· ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ° MySQL ΠΈΠ»ΠΈ MariaDB?
ΠΠ°. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ SET GLOBAL slow_query_log = 'ON' ΠΈ SET GLOBAL long_query_time = 1 ΠΈΠ· Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠ΅Π°Π½ΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° MySQL Ρ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠ΅ΠΉ SUPER ΠΈΠ»ΠΈ SYSTEM_VARIABLES_ADMIN. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²ΡΡΡΠΏΠ°Π΅Ρ Π² ΡΠΈΠ»Ρ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΡΠ΅ ΠΆΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² my.cnf, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΈΡ
ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΠΌΠΈ ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°.
Π ΡΡΠΌ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Query_time ΠΈ Lock_time Π² ΠΆΡΡΠ½Π°Π»Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ
Π·Π°ΠΏΡΠΎΡΠΎΠ²?
Query_time β ΡΡΠΎ ΠΎΠ±ΡΠ΅Π΅ ΠΏΡΠΎΡΠ΅Π΄ΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΏΠΎ Π½Π°ΡΡΠ΅Π½Π½ΡΠΌ ΡΠ°ΡΠ°ΠΌ Ρ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ Π·Π°ΠΏΡΠΎΡΠ° Π΄ΠΎ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΡΡΡΠΎΠΊΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡ. Lock_time β ΡΡΠΎ ΡΠ°ΡΡΡ ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π·Π°ΡΡΠ°ΡΠ΅Π½Π½Π°Ρ Π½Π° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ ΡΠ°Π±Π»ΠΈΡ ΠΈΠ»ΠΈ ΡΡΡΠΎΠΊ. ΠΠ°ΠΏΡΠΎΡ Ρ Lock_time, Π±Π»ΠΈΠ·ΠΊΠΈΠΌ ΠΊ Query_time, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ, Π° Π½Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΈΠ½Π΄Π΅ΠΊΡΠ° β ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ ΠΈΠ»ΠΈ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, Π° Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ².
ΠΠΎΡΠ΅ΠΌΡ ΠΌΠΎΠΉ ΡΠ°ΠΉΠ» ΠΆΡΡΠ½Π°Π»Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ
Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΏΡΡΡ, Ρ
ΠΎΡΡ slow_query_log = ON?
ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΠ΅ ΠΏΡΠΈΡΠΈΠ½Ρ: (1) Π½ΠΈ ΠΎΠ΄ΠΈΠ½ Π·Π°ΠΏΡΠΎΡ Π΅ΡΡ Π½Π΅ ΠΏΡΠ΅Π²ΡΡΠΈΠ» long_query_time β ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ SHOW GLOBAL STATUS LIKE 'Slow_queries'; (2) ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ ΠΆΡΡΠ½Π°Π»Π° Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ mysql Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠ°Π² Π½Π° Π·Π°ΠΏΠΈΡΡ; (3) Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°Ρ
Ρ SELinux ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΡΠ°ΠΉΠ»Π° Π½Π΅Π²Π΅ΡΠ΅Π½; (4) ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ slow_query_log_file ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΡΡ, ΡΠ΅ΠΌ ΡΠ°ΠΉΠ», ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΠ΅ β ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ SHOW VARIABLES LIKE 'slow_query_log_file'.
ΠΠ°ΠΊ Π½Π°ΠΉΡΠΈ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΡΠΉ Π·Π°ΠΏΡΠΎΡ Π² ΠΆΡΡΠ½Π°Π»Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ²?
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ pt-query-digest ΠΈ ΠΎΡΡΠΎΡΡΠΈΡΡΠΉΡΠ΅ ΠΏΠΎ R/Call (ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΡ
ΡΡΡΠΎΠΊ Π½Π° Π²ΡΠ·ΠΎΠ²) ΠΈΠ»ΠΈ Response time (ΠΎΠ±ΡΠ΅Π΅ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ). ΠΠ°ΠΏΡΠΎΡ Π² Π²Π΅ΡΡ
Π½Π΅ΠΉ ΡΠ°ΡΡΠΈ ΡΠ΅ΠΉΡΠΈΠ½Π³Π° Response time ΠΏΠΎΡΡΠ΅Π±Π»ΡΠ΅Ρ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠ΅Π΅ ΡΠΎΠ²ΠΎΠΊΡΠΏΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° EXPLAIN ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠ². ΠΡΠ»ΠΈ pt-query-digest Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ mysqldumpslow -s t -t 1 Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° Ρ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠΈΠΌ ΠΎΠ±ΡΠΈΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ.
Π½Π° Π²ΡΠ΅Ρ
Ρ
ΠΎΡΡΠΈΠ½Π³ΠΎΠ²ΡΡ
ΡΡΠ»ΡΠ³Π°Ρ