Π‘ΡΠΊΠΎΠ½ΠΎΠΌΡŒΡ‚Π΅ 15% Π½Π° всСх хостинговых услугах

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ свои Π½Π°Π²Ρ‹ΠΊΠΈ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ скидку Π½Π° любой Ρ‚Π°Ρ€ΠΈΡ„Π½Ρ‹ΠΉ ΠΏΠ»Π°Π½

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ΄: Skills ΠΠ°Ρ‡Π°Ρ‚ΡŒ
Π ΡƒΠ±Ρ€ΠΈΠΊΠΈ
Администрация

Как Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΆΡƒΡ€Π½Π°Π» ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Ρ… запросов Π² 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.cnf
  • Π’Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ сСрвСры β€” Π½Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ сСрвСрС с высоконагруТСнной Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… рассмотритС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ установки long_query_time Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ 0.1 сСкунд ΠΈ использования log_slow_rate_limit (MariaDB) ΠΈΠ»ΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ прилоТСния для контроля ΠΎΠ±ΡŠΡ‘ΠΌΠ° ΠΆΡƒΡ€Π½Π°Π»Π°
  • АналитичСскиС Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ с ускорСниСм GPU β€” Π½Π° ΡƒΠ·Π»Π°Ρ… GPU Hosting, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ… аналитичСскиС запросы ΠΊ большим Π½Π°Π±ΠΎΡ€Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΡ€ΠΎΠ³ 5–10 сСкунд ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ умСстным, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ аналитичСскиС запросы ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ, Π° Π½Π΅ Π΄Π΅Ρ„Π΅ΠΊΡ‚ΠΎΠΌ
  • Если ваш стСк ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π²Π΅Π±-интСрфСйс, управляСмый Ρ‡Π΅Ρ€Π΅Π· панСль управлСния 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-logs
  • Π’Ρ‹ запустили pt-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 для извлСчСния СдинствСнного запроса с наибольшим ΠΎΠ±Ρ‰ΠΈΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ.