我正在开发一个大型Web应用程序,并希望它根据与数据库当前所处压力相关的因素进行更改.
我不确定最准确/最有效/最简单的是什么.我正在考虑当前连接数或服务器响应时间或cpu使用量?
什么是最适合和可能的?
谢谢
有趣的问题.你真正想要的是一种让
PHP向MysqL服务器提出两个问题的方法:
服务器,你几乎使用所有的cpu容量?
服务器,您使用几乎所有的磁盘IO容量?
根据答案,我想你想简化你的PHP Web应用程序的工作……可能通过消除某种搜索功能,或者更积极地缓存一些数据.
如果你的(linux或bsd)MysqL服务器有一个shell,你可以通过观察这两个命令的输出来回答你的两个问题.
sar -u 1 10 # the %idle column tells you about unused cpu cycles sar -d 1 10 # the %util column tells you which disks are busy and how busy.
但是,没有甜蜜的小查询将MysqL中的数据提取到您的应用程序.
编辑:一种可能性是编写一些PERL黑客或其他在您的服务器上运行的简单程序,连接到本地数据库,并且每隔一段时间(每分钟一次)确定%idle和%util,并更新数据库中的小排一行表.如果你关心的话,你也可以毫不费力地将你的磁盘装满的东西添加到这个表中.然后您的程序可以查询此表.这是MEMORY访问方法的理想用途.无论如何,请保持简单:您不希望您的监控对您的服务器造成压力.
您可以从客户那里获得的第二个最佳技巧.
发出命令SHOW PROCESSLIST FULL,计算Command为“Query”的行数(MysqL进程),如果你有很多它们认为它是一个高工作负载.
您还可以为具有状态Query的进程添加时间值,并使用该值的高值作为阈值.
编辑:如果你在MysqL 5服务器上运行,并且你的服务器帐户可以访问MysqL提供的information_schema,你可以直接使用查询来获取我提到的过程数据:
SELECT (COUNT(*)-1) P.QUERYCOUNT,SUM(P.TIME) QUERYTIME FROM information_schema.PROCESSLIST P WHERE P.COMMAND = 'Query'
您需要调整阈值以使其在生产中正常工作.