当计划将我的应用程序(Java + Tomcat + MySql)移植到云主机时,我发现需要考虑的一个重要因素是传输到数据库或从数据库传输的数据量,因为它受到云提供商的限制。 我还没有find一个方便的方法来根据使用情况统计(例如查询次数和平均行大小)来估计这个数量,而不是如何测量当前的使用率。
是否有任何统计数据可以用于我可以使用的MySql,或者从networking的angular度来监视这个数据是更好的,监视从MySql使用的端口传输的数据。
提前致谢
如果你想在应用程序中直接测量进出MySQL的networkingstream量,你可以监视两个状态variables:
您可以使用此查询为所有会话(过去和现在)提取这些内容
SELECT * FROM information_schema.global_status WHERE variable_name IN ('Bytes_received','Bytes_sent');
这会给你在mysql实例生命周期中的每个数字。
你可以为每个会话获取这些
SELECT * FROM information_schema.session_status WHERE variable_name IN ('Bytes_received','Bytes_sent');
这会给你数据库会话的生命周期的每个数字。
您可以使用GUI随着时间的推移来绘制它们。 既然您提到了Java和Tomcat,您可能希望创build自己的演示文稿。 你将不得不保留以前的值,得到当前值,减去它们,然后绘制或显示平均值,如你所愿。
我很久以前在DBA 的StackExchange中讨论过这个问题( MySQL:'bytes_sent'和'bytes_received'是否包含mysqldump数据? )任何具有线程的东西都将被计入这两个variables中,包括MySQL Replication的内部variables(通过IO线程和SQL线程)。
鉴于此,确保没有不必要的数据库连接进行读取,并且在mysqldump或重新加载mysqldump期间不监视MySQL。 即使是监控软件(如Nagios,Zabbix,MONYog,EM7等)也会在每次运行时产生Bytes_receivedstream量SHOW GLOBAL VARIABLES;
因为连接到mysqld的所有东西都会影响全局的Bytes_received和Bytes_sent状态值,所以您可能希望在运行mysqli_close()之前让应用程序收集会话级Bytes_received和Bytes_sent 。 然后,您可以生成这些数字的报告。 然后,您可以从全局计数中减去这些总计,看看有多less家务数据被请求。
最简单的方法是启动MySQL Workbench 。 虽然可能需要一些小的努力才能正确设置服务器pipe理function,但它提供了networking使用情况的图表,并且是pipe理MySQL实例的全面优秀工具。 一个基于Web的MySQLpipe理解决scheme是phpMyAdmin ,它也提供MySQL统计。 但是,请注意,phpMyAdmin在过去有几个主要的安全漏洞(例如允许全面接pipe系统),所以我强烈build议您改用MySQL Workbench。 (切线方面:如果您确实需要或需要使用phpMyAdmin,请确保您在phpMyAdmin前面有一个身份validationscheme,因此恶意软件甚至可以看到您的phpMyAdminlogin名,他们必须通过您的第一个login层。通过HTTPS进行基本身份validation,并在允许访问phpMyAdminlogin页面之前检查PAM提供的用户名和密码。
如果你对一般的统计数据收集有很多漂亮的图表也很感兴趣,那么Munin是一个很好的解决scheme,它还包括一些MySQL监视插件,尽pipe它们必须先configuration好,并且还要安装一些Perl依赖项MySQL监控插件工作(根据留在插件脚本中的注释, Cache::Cache和DBD::MySQL )。
最后,请记住,如果您的应用程序和数据库驻留在不同的服务器上,那么只需要为MySQLstream量收费; 本地stream量未被计量(或计费)。