开发者

how to calculate the total number of disk writes done by MySQL

I am trying to write a program to calculate the total disk writes done by MySQL ..i know that you can get the variables with the "show global status" mysql command..i need help in figuring out from the list of variables that actually give a count of any sort of disk write..so that i can sum the counts and my problem is solved

mysql> show global status;

gives values of the following variables

show variables;
etc ...

Innodb_data_writes        
Innodb_data_written       
Innodb_dblwr_pages_written        
Innodb_dblwr_writes       
Key_write_requests        
Key_writes        

I dont know the meaning of some of the variables and what they mean but i guessd and kind开发者_运维百科a narrowed it down to

Innodb_data_writes - The total number of data writes

Innodb_dblwr_writes - The number of doublewrite operations that have been performed.

Innodb_log_writes - The number of physical writes to the log file

Key_writes - The number of physical writes of a key block to disk

are these correct ?or are there any other disk write by mysql that i havnt considered?or is there a better way to calculate disk writes done by my sql


Look at the Handler_write variable (and other Handle_* variables).


The writes variables you have mentioned are logical writes, they are not necessarily writes to disk. Also you have to take into account writes to the binary log and relay logs when enabled.

Another way to measure this is from Performance_Schema. The sys schema provides summaries for different kinds of writes. Here is an example:

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

I think this would solve your problem.

Going back to global status, you can divide the total amount of writes against the total fsync counts to get some rough estimate of write size per N time, again this would be approximation since especially with different sync settings for log file and binlog/relay logs when enabled.

If you need to measure actual disk writes for everything that comes out of MySQL, including temporary tables, you have to go to the OS layer. Ideally, you should separate your MySQL data into its dedicated volume or partition to get the basic instrumentation from /proc/diskstats and not mangled with other processes. Look at how pt-diskstats calculate the relative values from its output and you can solve your problem similarly.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜