我有一个 PHP 图像服务脚本,我一直在优化它。我在服务器端优化方面做了很多工作,但我也想确保优化 mysql 方面的事情。目前,我在每次加载此图像服务脚本时都使用 MYSQL 执行以下操作。
- 连接到数据库
- 检查提供的 ID 是否有效,如果有效则返回行
- 通过将点击数列增加 1 来更新图像的统计信息
- 将包含特定 Controller 和操作的统计表也加 1
- 我没有关闭连接,我被告知让它静置,因为它需要更少的时间,而且它会自行消失
我在我的服务器上运行“mysqladmin status”,发现目前有 63.8997 avg 正在运行。目前,我有大约 17 个请求/秒通过 apache 加载此脚本。我还在服务器上配置了 eaccelerator,以保持该脚本的编译版本可供使用。我的问题是有什么方法可以进一步优化我可以处理的查询数量?我正在努力确保我将所有#s 保持在尽可能低的水平并尽可能快地移动?
我的目标是让我的服务器每天毫无问题地处理 432 万个图像服务(在 apache 中相当于每秒 50 个请求)。
最佳答案
每次增加计数器并将其提交到数据库时,您可能都会写入磁盘。相反,您可以尝试将命中数缓存在内存中几分钟,然后每隔几分钟将缓存转储回数据库中。这将减少对数据库的写入和读取次数。
您还可以更进一步,将整行缓存在内存中。仅当数据不经常更改并且数据被经常请求时,这才实用。此外,如果您开始缓存大量数据,内存限制可能会成为一个问题。
我知道在一些非常高性能的数据库环境中,整个数据库实例将存储在内存中,并且写入磁盘只会定期发生。这也将大大减少查询时间,并减少缓存的需求,因为所有内容都已经在内存中了。但这需要一些严格的硬件。
此外,您可能希望最终放弃 MySQL。 MySQL 并不是高性能的最佳选择,因为 MySQL 和存储过程不能很好地结合在一起。存储过程在数据库上编译,不需要解析 SQL 即可执行。如果您要切换到某些东西,例如 Oracle,则整个事务可以使用编译的存储过程来完成。 MySQL 根本无法提供这种灵 active (如果有的话)。
关于php - 如何使用图像服务脚本优化 MySQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10419768/