1、高并发系统MySQL遇到的挑战About me 吴炳锡 知数堂 联合创始人,MySQL中国用户组联合发起人。专注MySQL教学,同时以MySQL入手为企业提供上云及全栈技术支持。擅长MySQL大规模运维管理优化、高可用方案、多IDC架构设计,以及企业应用数据库设计等经验。知数堂是我和叶金荣老师创办的一个Online在线教育,专注Linux,MySQL,Python,大数据相关培训。高并发系统MySQL遇到的挑战 高并发问题 异常-网络抖动 共享存储问题 浮点数运算问题 更新合并 连接池问题 程序小Bug引发大血案高并发系统MySQL遇到的挑战 高并发问题-百千万级的并发处理高并发系统MySQL
2、遇到的挑战 高并发问题-百千万级的并发处理 案例:百千万级的并发,如何处理?分库分表,缓存,队例,过载保护 读写分离 大的写业务单独拆分 案例:平时也许只有200万用户在线,但一年有一次300万或是500万在线的一天的业务,要不要为这一天业务买单硬件。成本,服务成本(降级),机房成本 服务过载保护 拉长服务时间高并发系统MySQL遇到的挑战 高并发问题-百千万级的并发处理 案例:DB优化到什么程度算是优化到位,是一天在不断的调整那些参数做优化吗?定位技术边界 注重整体结构优化,定位瓶颈 优化希望达到:四两博千斤高并发系统MySQL遇到的挑战 异常-网络抖动一个线路用户掉线上线 案例:某运营商线
3、路闪断,忽然百万级并发重新打到DB,把DB压挂。DB挂 硬件负载设备挂 案例:核心交换机切换 DB高可用切换 大量会话重试高并发系统MySQL遇到的挑战 共享存储问题-一个业务影响全局 案例:线上几个DB忽然响应时间增长。大量的服务出错 全线排查业务没有突增 细心的DB发现磁盘的%util 都是100%高并发系统MySQL遇到的挑战 共享存储问题-一个业务影响全局 共享好处:错开高峰时间充分利用机器资源 如:单机多实例,共享存储 共享缺点:业务高峰一样 业务特点一样 高并发系统MySQL遇到的挑战 浮点数运算 案例:一个月交易在5千万这样的规模的业务中,出现帐上和实际银行帐上一个月要么多100
4、-500元或是少100-500元 程序Bug?No 机制问题?No 分析 用户记帐相关使用了 decimal(10,2)字段 浮点数在计算机的世界里不是一个精确值 处理办法 decimal(10,2)改成 int unsigned 单位用分存储高并发系统MySQL遇到的挑战 浮点数运算 应急处理办法:对帐基金(500元左右从基金里出)请劳记:浮点数在计算机不是精确值 最终处理:需要精确运算,请转成整型运算。以分为单位存储高并发系统MySQL遇到的挑战 更新合并睡醒了去偷个菜在睡J高并发系统MySQL遇到的挑战 更新合并 案例:某短信业务,逢年过节必挂高并发系统MySQL遇到的挑战 更新合并 用
5、户的某一个行为过于密集 提示:同一行记录多个会话更新 大量更新某个字段 同样一条SQL多个会话发送高并发系统MySQL遇到的挑战 连接池server1server2server3server4server5server6Server.连接过多:DB too many connection连接过少:get connection timeoutDB高并发系统MySQL遇到的挑战 连接池 在没使用thread-pool的情况下,随着连接数上升性能急局下降 5.1 64个连接 5.5 100个左右 5.6 200个左右 程序罗辑Bug,得到一个连接获取结果后,处理完结果才归还连接 长事务场景 Thread-pool