2014-04-03 27 views
0

我试图创建一个valgrind(cachegrind)分析MySQL客户端连接。
我正在运行valgrind--trace-children=yesMySQL会话的调用图

我想找到的是内部方法调用的一个,看调用图在使用时它...

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

经过这5分钟后,我打开30个会话,并用小事务处理系统,当我完成 - 关闭MySQL。

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

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

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

谢谢!

顺便说一句 - 谁对扩展和开发MySQL的人 - 有很多有趣的事情可以改善....

回答

1

我只能帮你在一些问题上:是的,MySQL不创建进程,但线程,请参见the manual on the command which lists what is currently done by the server

当你试图确定你的MySQL服务器是干什么的, 它可以帮助检查进程列表,这是一套 线程目前服务器内执行。

(由我突出。)

关于日志:二进制日志是用于复制的日志。这包含所有已执行的语句(或已更改的行)并将传播到从属。

InnoDB日志独立于二进制日志,用于确保InnoDB符合ACID标准。首先插入事务,如果服务器崩溃并且InnoDB开始恢复,则使用此文件。

这是正常的,两个日志都填写在普通服务器上。

虽然我不能帮你解决其他问题。也许你想问你的问题dba.stackexchange.com

+0

为什么如果我没有配置复制binlog被使用?这是我可以忽略的内存日志吗? – evenro

+0

您可以在不设置实际复制的情况下激活二进制日志。也许你做到了? ([这些binlog选项存在,也许你设置它们?](https://dev.mysql.com/doc/refman/5.6/en/replication-options-binary-log.html)) – GhostGambler

+0

我故意使用默认MySQL的设置,所以我没有改变任何配置,但套接字...我没有在my.cnf中的任何配置。而且我也没有找到binlog文件,所以我想这是一个内存中或虚拟调用... – evenro