Начиная с версии 3.23.41 в состав InnoDB входит InnoDB Monitor, который
выводит информацию по внутреннему состоянию InnoDB. Когда InnoDB Monitor
включен, сервер MySQL mysqld
выводит стандартный набор данных (обратите
внимание: клиент MySQL ничего не выводит) примерно каждые 15 секунд. Эти
данные могут пригодиться при настройке производительности. В операционной
системе Windows необходимо запустить mysqld-max
из командной строки MS-DOS
с параметрами --standalone --console
, чтобы направить выводимые данные в
окно MS-DOS.
Существует отдельная функция innodb_lock_monitor
, которая выводит такую же
информацию как innodb_monitor
, а также данные по блокировкам,
установленным каждой транзакцией.
Выводящаяся информация включает следующие данные:
по блокировкам, ожидающим транзакций;
по семафорам, ожидающим потоков;
по файлам, ожидающим ответа на запрос ввода/вывода;
статистику буферного пула;
по активности буферов удаления и вставок в основном потоке InnoDB.
InnoDB Monitor можно запустить при помощи следующей команды SQL:
CREATE TABLE innodb_monitor(a int) type = innodb;
а остановить его при помощи:
DROP TABLE innodb_monitor;
Вызов команды CREATE TABLE
является только способом передачи команды в
InnoDB через программу синтаксического анализа SQL. Факт создания таблицы
не играет никакой роли для InnoDB Monitor. Если вы останавливаете сервер,
когда монитор работает, и хотите запустить монитор заново, следует
уничтожить таблицу прежде, чем снова вызвать CREATE TABLE
для запуска
монитора. Синтаксис может измениться в будущих версиях.
Пример информации, выводимой InnoDB Monitor:
================================ 010809 18:45:06 INNODB MONITOR OUTPUT ================================ -------------------------- LOCKS HELD BY TRANSACTIONS -------------------------- LOCK INFO: Number of locks in the record hash table 1294 LOCKS FOR TRANSACTION ID 0 579342744 TABLE LOCK table test/mytable trx id 0 582333343 lock_mode IX RECORD LOCKS space id 0 page no 12758 n bits 104 table test/mytable index PRIMARY trx id 0 582333343 lock_mode X Record lock, heap no 2 PHYSICAL RECORD: n_fields 74; 1-byte offs FALSE; info bits 0 0: len 4; hex 0001a801; asc ;; 1: len 6; hex 000022b5b39f; asc ";; 2: len 7; hex 000002001e03ec; asc ;; 3: len 4; hex 00000001; ... ----------------------------------------------- CURRENT SEMAPHORES RESERVED AND SEMAPHORE WAITS ----------------------------------------------- SYNC INFO: Sorry, cannot give mutex list info in non-debug version! Sorry, cannot give rw-lock list info in non-debug version! ----------------------------------------------------- SYNC ARRAY INFO: reservation count 6041054, signal count 2913432 4a239430 waited for by thread 49627477 op. S-LOCK file NOT KNOWN line 0 Mut ex 0 sp 5530989 r 62038708 sys 2155035; rws 0 8257574 8025336; rwx 0 1121090 1848344 ----------------------------------------------------- CURRENT PENDING FILE I/O'S -------------------------- Pending normal aio reads: Reserved slot, messages 40157658 4a4a40b8 Reserved slot, messages 40157658 4a477e28 ... Reserved slot, messages 40157658 4a4424a8 Reserved slot, messages 40157658 4a39ea38 Total of 36 reserved aio slots Pending aio writes: Total of 0 reserved aio slots Pending insert buffer aio reads: Total of 0 reserved aio slots Pending log writes or reads: Reserved slot, messages 40158c98 40157f98 Total of 1 reserved aio slots Pending synchronous reads or writes: Total of 0 reserved aio slots ----------- BUFFER POOL ----------- LRU list length 8034 Free list length 0 Flush list length 999 Buffer pool size in pages 8192 Pending reads 39 Pending writes: LRU 0, flush list 0, single page 0 Pages read 31383918, created 51310, written 2985115 ---------------------------- END OF INNODB MONITOR OUTPUT ============================ 010809 18:45:22 InnoDB starts purge 010809 18:45:22 InnoDB purged 0 pages
Некоторые примечания по выводу:
Если раздел
LOCKS HELD BY TRANSACTIONS
содержит информацию по ожидаемым блокировкам, то у вашей программы может быть конфликт блокировок. Выводимая информация также может оказать помощь в отслеживании причин возникновения взаимных блокировок.Если InnoDB скомпилировать при помощи
UNIV_SYNC_DEBUG
вuniv.i
, то разделSYNC INFO
будет содержать информацию по зарезервированным семафорам.Раздел
SYNC ARRAY INFO
содержит информацию по потокам, ожидающим семафора, а также статистические данные по количеству повторных циклов или ожиданий, выполненных потоками для семафоров или блокировок чтения/записи. Большое количество потоков, ожидающих семафоров, может возникнуть в результате частого выполнения операций ввода/вывода диска, оно может быть также обусловлено конфликтами внутри самого InnoDB. Конфликты могут возникать при большом количестве параллельных запросов или в случае проблем операционной системы с планированием потоков.В разделе
CURRENT PENDING FILE I/O'S
выводится список файлов, ожидающих ответа на запрос ввода/вывода. Большое количество таких файлов говорит о том, что рабочая нагрузка ограничена операциями ввода/вывода диска.Раздел
BUFFER POOL
содержит статистическую информацию по записываемым и считываемым страницам. По этим данным можно вычислить, сколько запросов ввода/вывода по файлам данных выполняется на данный момент.