一、故障表现
数据库建立连接时间不稳定,time /$instance_dir/mysql -uRDS_gw -hxx.xx.xx.xx -P6301 -p'xxxxxxxx' -e 'seelct 1;'
这里的 -hxx.xx.xx.xx 没有用vip、不经过gw,如下图,几次执行的时间不在一个数量级上。
二、故障排查
进入数据库里show processlist可以看到很多unauthenticated user Connect状态的进程。
show global variables like '%thread%';
thread_pool_oversubscribe =3
thread_pool_size = 4 ,图里是调整后的50
结合客户提供的测试网页,基本可以判断客户Php没做连接池,高并发短链接直接打到数据库导致的这种现象。
三、故障原因
1、客户php应用的高并发短链接,建议更改为连接池
2、rds实例的连接池参数值设置的太小。我们设置的应该是固定的值,4个分组,每组3个。
四、可能的解决方案
因为无法预测客户侧的动作,所以仅考虑我侧能够实施的优化方案
1、参照友商,thread_pool_size=4 、thread_pool_oversubscribe=32 不区分实例规格;
2、参照percona,thread_pool_size跟随逻辑cpu核数、thread_pool_oversubscribe默认3;
3、管控配置文件模板建议加上thread_pool_stall_limit=10,这个等待时间默认500ms,会导致查询有毛刺(查询只要10ms,高并发时这个参数等待500ms)
#当前我们的策略:400、3、50、500