如何估计mysql数据库的网络数据传输量

pab*_*cin 7 mysql networking cloud bandwidth

在计划将我的应用程序 (Java+Tomcat+MySql) 移植到云托管时,我发现要考虑的一个重要因素是传入/传出数据库的数据量,因为它受到云提供商的限制。我还没有找到一种方便的方法来根据使用统计信息(例如查询数和平均行大小)来估计这个数量,也没有找到如何衡量当前利用率的方法。

我可以使用 MySql 中内置的任何统计信息,或者最好从网络角度对其进行监控,监控传输到/从 MySql 使用的端口传输的数据。

提前致谢

Rol*_*DBA 6

如果您想直接测量应用程序中进出 MySQL 的网络流量,您可以监控两个状态变量:

全球层面

您可以使用此查询为所有会话(过去和现在)获取这些

SELECT * FROM information_schema.global_status
WHERE variable_name IN ('Bytes_received','Bytes_sent');
Run Code Online (Sandbox Code Playgroud)

这将为您提供 mysql 实例生命周期中每个的数量。

会话级别

您可以为每个会话获取这些

SELECT * FROM information_schema.session_status
WHERE variable_name IN ('Bytes_received','Bytes_sent');
Run Code Online (Sandbox Code Playgroud)

这将为您提供数据库会话生命周期内每个的数量。

您可以使用 GUI 来绘制它们随时间变化的图形。既然您提到了 Java 和 Tomcat,您可能希望创建自己的演示文稿。您必须保留以前的值,获取当前值,减去它们,然后根据需要绘制或显示平均值。

试一试 !!!

警告

很久以前我在 DBA StackExchange 中讨论过这个问题(MySQL : 'bytes_sent' 和 'bytes_received' 是否包括 mysqldump 数据?)任何有线程的东西都将计入这两个变量中,包括像 MySQL 复制那样的内部结构(通过IO 线程和 SQL 线程)。

鉴于此,请确保没有不必要的数据库连接进行读取,并且在 mysqldump 或重新加载 mysqldump 期间不要监视 MySQL。甚至监控软件(如 Nagios、Zabbix、MONYog、EM7 等)Bytes_received每次运行都会产生流量SHOW GLOBAL VARIABLES;

建议

因为一切都连接到mysqld的会影响全球Bytes_receivedBytes_sent状态值,你可能希望你的应用程序收集会话级Bytes_receivedBytes_sent刚刚运行前mysqli_close() 。然后,您可以生成这些数字的报告。然后,您可以从全局计数中减去这些总数,以查看请求了多少内务处理数据。