Pab*_*blo 8 php mysql optimization performance
我正在开发一个大型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.
Run Code Online (Sandbox Code Playgroud)
但是,没有一个可爱的小查询可以将该数据从 mySQL 获取到您的应用程序。
编辑:一种可能是编写一些 PERL hack 或其他简单程序,在服务器上运行,连接到本地数据库,并且每隔一段时间(也许一分钟一次)确定 %idle 和 %util,并更新数据库中的小单行表。如果您愿意的话,您还可以在该表中添加诸如磁盘已满程度之类的信息,而不需要太多麻烦。然后您的 PHP 应用程序可以查询该表。这是 MEMORY 访问方法的理想用途。无论如何,保持简单:您不希望您的监控给您的服务器带来负担。
第二好的技巧,你可以从你的客户那里做。
发出命令 SHOW PROCESSLIST FULL,计算命令为“Query”的行数(mySQL 进程),如果有很多行,则认为这是一个很高的工作负载。
您还可以添加状态为“查询”的进程的时间值,并使用该时间的较高值作为阈值。
编辑:如果您在 mySQL 5 服务器上运行,并且您的服务器帐户可以访问 mySql 提供的 information_schema,则可以直接使用查询来获取我提到的流程数据:
SELECT (COUNT(*)-1) P.QUERYCOUNT, SUM(P.TIME) QUERYTIME
FROM information_schema.PROCESSLIST P
WHERE P.COMMAND = 'Query'
Run Code Online (Sandbox Code Playgroud)
COUNT(*) - 1:因为上面的查询本身算作一个查询。
您将需要调整阈值才能使其在生产中正常工作。
当数据库服务器无法跟上时,最好让 PHP Web 应用程序卸载。不过,更好的想法是识别长时间运行的查询并优化它们。
归档时间: |
|
查看次数: |
741 次 |
最近记录: |