我有一个每天约 150-200 万页面浏览量的网站,运行在 2 台服务器上。一台用于 mysql,另一台用于其他一切。Mysql 框的负载为 3,前端通常为 0.0-0.1。两台服务器都是双四核,8GB RAM,在 raid5 中运行 SAS 驱动器。CPU 大部分时间处于空闲状态,iowait 不存在。
我运行的是 nginx、memcache,网站是基于 php 构建的。一半时间一切都运行正常,而其他时间则会出现严重延迟,页面加载需要 10-15 秒。页面执行时间总是非常短,但它似乎挂起了,在实际加载页面之前等待某些东西。更奇怪的是,它只发生在网站上的 1 个文件上(但它是最常访问的文件,实际上加载了网站上的内容)。其他页面一直都运行得非常快,即使加载实际内容需要 15 秒。
我安装了 nginx_stats 插件,如果我监控它,当写入列开始超过 100 时就会出现滞后峰值,而且这种情况经常发生......一直到 500-1000。
它在完全随机的时间执行此操作......不是在交通繁忙时......它可以在半夜执行此操作,并且在下午 5 点交通最繁忙时完美运行。
有任何想法吗?
答案1
在不了解更多信息的情况下,我的第一反应是您的数据库服务器是问题的原因。检查数据库服务器上的负载、IO 等待、内存/交换利用率和其他常见问题,以确保服务器上没有资源争用。
尝试确定是否有某个查询正在杀死该框,打开慢查询日志并让其经历一段时间的缓慢,然后查看是否有任何可以优化的查询。
您说“写入列”很高,这是否表示写入数据库?写入通常比读取更昂贵,您可能需要设置一个复制从属服务器,以便将部分或全部读取卸载到该服务器。
我的猜测是,一旦你打开慢查询日志,你就会发现导致数据库损坏并减慢一切速度的罪魁祸首查询。