background image

php 并发对 MYSQL 造成压力的解决方法

php 并发对 MYSQL 造成压力的解决方法,需要的朋友可以参考一下

PHP 页面有一个浏览量统计每秒有 200 并发,造成 insert 给 mysql 造成很大压力
lnmp 环境,其他页面内容都做了缓存了,没有多大的负载,就是这个浏览量统计功能,
给 mysql 带来不小的压力,请问诸位有什么解决办法吗?
怎么都说不要用 MySQL 来做,每秒 200 并发对 MySQL 来说不算啥难事啊。而且换成
Redis、Memcached,持久化姑且不说,业务代码和运维部署量都不小。
我给你几个建议,尽量让你的运维部署和业务代码改动小一些。
你可以做主从分离,不要在一个库上高并发插入同时还做大量统计运算。分离之后,查询
在从库是做(甚至是导入 Hive 之类专门的分布式系统来做),主库上可以去掉索引,提
升插入的性能。这个方法,业务代码几乎不用任何改动(改个数据库配置文件就好了) 。
MySQL 运维部署也可以选个业务低谷在线做。
如果你可以接受少量业务代码(PHP)改动,还有两个建议:
1. 分库,分表,每个表的数据总量小了,操作起来性能会好一些,特别是对从库的
MyISAM 表。你插入之前可能会有一些查询,例如查询这个 IP 在不在库里,以前统计过
没。
2. 使用 HandlerSocket 插件,绕过 SQL Parser,直接操作存储文件。如果业务上有可能,还
可以使用 bulk insert(批量插入)。MySQL InnoDB 还推出了类似 HandlerSocket 的 InnoDB 
NoSQL Plugin,用的 memcached 协议,共享 InnoDB Buffer,再也不用操心 MySQL 和
Memcached 之前怎么维护数据一致性了。