0

我正在尝试创建valgrindMySQL 客户端连接的 (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日志。有人可以解释为什么 thebinlog和 DUMMY 在那里,它们之间有什么区别?(我猜 DUMMY 是因为,但如果我的第一个猜测是真的innodb,我不明白为什么存在)。binlog

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

谢谢!!

顺便说一句 - 对于扩展和开发 MySQL 的人来说 - 那里有很多有趣的事情可以改进......

4

1 回答 1

1

我只能在一些问题上为您提供帮助:是的,MySQL 不创建进程,而是创建线程,请参阅命令手册,其中列出了服务器当前所做的工作

当您试图确定您的 MySQL 服务器在做什么时,检查进程列表会很有帮助,它是 当前在服务器中执行的线程集。

(由我突出显示。)

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

InnoDB 日志独立于二进制日志,用于确保 InnoDB 执行 ACID 一致性。事务首先插入那里,如果服务器崩溃并且 InnoDB 开始恢复,则使用此文件。

两个日志都填充在普通服务器上是很正常的。

不过,我无法帮助您解决其他问题。也许您想在dba.stackexchange.com上提问

于 2014-04-03T14:39:04.300 回答