7.5.9.1 InnoDB Monitor
Начиная с версии 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
содержит статистическую информацию по записываемым
и считываемым страницам. По этим данным можно вычислить, сколько
запросов ввода/вывода по файлам данных выполняется на данный момент.