我有一个网站,每秒有超过 500 次 MySQL 查询 - 每小时有超过 200 万次查询。同时在线用户超过 150 人。
服务器始终处于高负载状态。
使用 PHP/MySQL 构建的网站
我已经优化了apache,mysql配置。
我的专用服务器配置:
处理器 8:Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz 内存:12 GB SCSI 硬盘
我想问一下Memcached是否是解决这个问题的最佳方案,或者我必须将MySQL服务器与Web服务器分开。
此致,
答案1
我不确定您是否一定提到了“问题”——当您说每秒有 500 个 MySQL 查询时,就暗示了“服务器负载很高”。但只有当负载减慢系统速度或导致其他问题时,这才是问题。
我们确实需要更多关于您的性能的具体信息,以便提供具体的建议(例如,MySQL 和 Apache 的内存使用量是多少?CPU 怎么样?);如果您不知道您耗尽了什么资源,就很难确定需要改进的领域。
但是,根据您提供的信息,我确实有一个猜测:对于仅 150 个同时用户,每秒 500 次查询听起来非常高;每个用户每秒 3.3 次查询?如果是这样的话,memcached 可能是一个非常好的选择,可以减轻数据库进程的负载(如果查询中有足够的重复),以及尝试让代码生成更少的数据库流量。
答案2
您的第一步应该是通过将 apache/php 服务器从 MySQL 实例所在的硬件上移开来分离 LAMP 堆栈组件。这样,内存和磁盘的争用就会减少,因为应用程序的 RAM 空间和 IO 将占用与数据库不同的资源。
如果您仍然无法管理负载,接下来您可以在水平配置中添加额外的 Linux/PHP 服务器。
我建议安装 Ganglia 监控程序,以查看服务器的瓶颈所在。随着您添加更多服务器,这将极大地帮助您进行容量规划和扩展应用程序。