MySQL会话的调用图

时间:2014-04-03 14:26:47

标签: mysql valgrind call-graph kcachegrind cachegrind

我正在尝试创建MySQL客户端连接的valgrind(cachegrind)分析 我正在使用valgrind运行--trace-children=yes

我想要找到的是内部方法调用之一,以便在使用时查看调用图...

运行valgrind --trace-children=yes ./bin/mysqld_safe后 我得到了很多转储文件 我等了5分钟(为了让我希望创建的新文件具有不同的“最后修改”日期。

在这5分钟后,我打开30个会话,用小事务吹嘘系统,当我完成时 - 关闭MySQL。

现在问题:
1.运行30个事务并关闭系统后,只修改了3个文件。我期望看到30个文件,因为我虽然MySQL跨越进程。首先 - 有人可以确认MySQL跨越线程而不是每个会话的进程吗?

  1. 我看到三个不同的数据库日志调用:一个到DUMMY,一个到binlog,一个到innodb日志。有人可以解释为什么binlog和DUMMY在那里,它们之间有什么区别? (我猜DUMMY是因为innodb,但我不明白为什么binlog如果我的第一个猜测是真的那样,那就是。{/ p>

  2. 有更好的方法进行此分析吗? 是否有像kcachegrind这样的工具可以打开多个文件并显示所有文件的摘要? (或者是否可能以某种方式在kcachegrind内?)

  3. 谢谢!

    对于那些扩展和开发MySQL的人来说,有很多有趣的东西可以改进....

1 个答案:

答案 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

上提问