【问题标题】:how to calculate the total number of disk writes done by MySQL如何计算 MySQL 完成的磁盘写入总数
【发布时间】:2011-11-10 15:51:43
【问题描述】:

我正在尝试编写一个程序来计算 MySQL 完成的磁盘写入总数 ..我知道您可以使用“显示全局状态”获取变量 mysql 命令..我需要帮助从变量列表中找出实际给出任何类型磁盘写入计数的变量..以便我可以对计数求和并解决我的问题

mysql> 显示全局状态;

给出以下变量的值

show variables;
etc ...

Innodb_data_writes        
Innodb_data_written       
Innodb_dblwr_pages_written        
Innodb_dblwr_writes       
Key_write_requests        
Key_writes        

我不知道一些变量的含义以及它们的含义,但我猜想并有点缩小到

Innodb_data_writes - 数据写入总数

Innodb_dblwr_writes - 已执行的双写操作数。

Innodb_log_writes - 物理写入日志文件的次数

Key_writes - 关键块物理写入磁盘的次数

这些是正确的吗?或者我还没有考虑过 mysql 写入的任何其他磁盘吗?或者有更好的方法来计算我的 sql 完成的磁盘写入

【问题讨论】:

    标签: mysql innodb disk


    【解决方案1】:

    查看Handler_write 变量(和其他Handle_* 变量)。

    【讨论】:

    • Handler_write 是在表中插入行的请求数...这算作磁盘写入吗?..因为它只是请求数..那么我将添加 Innodb_data_writes Innodb_dblwr_writes Innodb_log_writes Key_writes & Handler_writes 来获取我的总写入量……是这样吗? :) 谢谢你
    【解决方案2】:

    您提到的写入变量是逻辑写入,它们不一定是写入磁盘。此外,您还必须考虑启用后对二进制日志和中继日志的写入。

    衡量这一点的另一种方法是使用 Performance_Schema。 sys 模式为不同类型的写入提供摘要。这是一个例子:

    https://github.com/mysql/mysql-sys#io_global_by_file_by_bytes--xio_global_by_file_by_bytes

    我认为这会解决你的问题。

    回到全局状态,您可以将 写入总数 除以 fsync 总数,以获得每 N 次写入大小的粗略估计,这也是近似值,因为尤其是在不同的启用后同步日志文件和 binlog/relay 日志的设置。

    如果您需要测量来自 MySQL 的所有内容(包括临时表)的实际磁盘写入量,则必须转到操作系统层。理想情况下,您应该将 MySQL 数据分离到其专用的卷或分区中,以从 /proc/diskstats 获取基本检测,而不是与其他进程混淆。看看 pt-diskstats 如何根据其输出计算相对值,您可以类似地解决您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 1970-01-01
      • 2013-08-10
      • 2012-04-13
      • 2016-12-12
      • 1970-01-01
      • 2019-06-29
      相关资源
      最近更新 更多