Граф вызовов для сеансов MySQL
Я пытаюсь создать valgrind
(cachegrind) анализ клиентских подключений MySQL.
я бегу valgrind
с --trace-children=yes
,
То, что я хочу найти, это один из внутренних вызовов методов, чтобы увидеть график вызовов, когда он используется...
После запуска valgrind
--trace-children=yes ./bin/mysqld_safe
Я получаю много файлов дампа, которые были написаны в тот момент.
Я жду 5 минут (для того, чтобы новые файлы, которые я ожидаю создать, имели другую дату "последнего изменения").
После этих 5 минут я открываю 30 сессий и загружаю систему небольшими транзакциями, а когда закончу - выключаю MySQL.
Теперь вопросы:
1. После выполнения 30 транзакций и завершения работы системы изменяются только 3 файла. Я ожидал увидеть 30 файлов, потому что я, хотя MySQL охватывает процессы. Итак, во-первых, может ли кто-нибудь подтвердить, что MySQL охватывает потоки, а не процессы для каждой сессии?
Я вижу три разных журнала вызовов базы данных: один для куклы, один для
binlog
и один кinnodb
журнал. Может кто-нибудь объяснить, почемуbinlog
и DUMMY есть, и какая разница между ними? (Я думаю, кукла из-заinnodb
но я не понимаю почемуbinlog
есть ли, если мое первое предположение верно).Есть ли лучший способ сделать этот анализ?
Есть ли такой инструмент, какkcachegrind
что может открыть несколько файлов и показать летнее из всех них? (или это возможно как-то вkcachegrind
?)
Спасибо!!
Кстати - для людей, которые расширяют и развивают MySQL - там есть много интересных вещей, которые можно улучшить....
1 ответ
Я могу помочь вам только в некоторых вопросах: Да, MySQL не создает процессы, а создает потоки, см. Руководство по команде, в котором перечислены действия, которые в данный момент выполняет сервер:
Когда вы пытаетесь выяснить, что делает ваш сервер MySQL, может быть полезно изучить список процессов, который представляет собой набор потоков, выполняемых в настоящее время на сервере.
(Выделение мной.)
Относительно журналов: двоичный журнал - это журнал, используемый для репликации. Он содержит все выполненные операторы (или измененные строки) и будет передан ведомым.
Журнал InnoDB не зависит от двоичного журнала и используется, чтобы гарантировать, что InnoDB выполняет ACID-соответствие. Сначала туда вставляются транзакции, и этот файл используется в случае сбоя сервера и запуска восстановления InnoDB.
Это нормально, что оба журнала заполняются на обычном сервере.
Я не могу помочь вам с вашими другими вопросами, хотя. Может быть, вы хотите задать свой вопрос на http://dba.stackexchange.com/