我正在尝试创建MySQL客户端连接的valgrind
(cachegrind)分析
我正在使用valgrind
运行--trace-children=yes
。
我想要找到的是内部方法调用之一,以便在使用时查看调用图...
运行valgrind
--trace-children=yes ./bin/mysqld_safe
后
我得到了很多转储文件
我等了5分钟(为了让我希望创建的新文件具有不同的“最后修改”日期。
在这5分钟后,我打开30个会话,用小事务吹嘘系统,当我完成时 - 关闭MySQL。
现在问题:
1.运行30个事务并关闭系统后,只修改了3个文件。我期望看到30个文件,因为我虽然MySQL跨越进程。首先 - 有人可以确认MySQL跨越线程而不是每个会话的进程吗?
我看到三个不同的数据库日志调用:一个到DUMMY,一个到binlog
,一个到innodb
日志。有人可以解释为什么binlog
和DUMMY在那里,它们之间有什么区别? (我猜DUMMY是因为innodb
,但我不明白为什么binlog
如果我的第一个猜测是真的那样,那就是。{/ p>
有更好的方法进行此分析吗?
是否有像kcachegrind
这样的工具可以打开多个文件并显示所有文件的摘要? (或者是否可能以某种方式在kcachegrind
内?)
谢谢!
对于那些扩展和开发MySQL的人来说,有很多有趣的东西可以改进....答案 0 :(得分:1)
我只能在一些问题上帮助你:是的,MySQL不会创建进程,而是线程,请参阅the manual on the command which lists what is currently done by the server:
当您尝试确定MySQL服务器正在执行的操作时, 检查进程列表是有帮助的,这是一组 线程当前正在服务器内执行。
(由我突出显示。)
关于日志:二进制日志是用于复制的日志。它包含所有已执行的语句(或已更改的行),并将传播到从属语句。
InnoDB日志独立于二进制日志,用于确保InnoDB执行ACID符合。首先在那里插入事务,如果服务器崩溃并且InnoDB开始恢复,则使用该文件。
在普通服务器上填充这两个日志是正常的。
但是我无法帮助你处理其他问题。也许你想在dba.stackexchange.com
上提问