# MySQL不调默认配置可能引发宕机
# 背景
客户刚完成了部署上线(或升级上线),使用MySQL数据库,上线后一段时间突然出现OA服务器宕机,需要做原因分析和解决。
# 分析过程
OA服务器宕机原因非常多,需要依据相关文档做系统性排查: OA宕机性能问题排查策略 (opens new window)
通过OA下的logs、logs_sy应用日志并不能看出什么问题,遇到宕机还是要从JVM层面分析:Thread Dump、JDBC Connection Dump、Memory Dump等日志。
由于客户没有提前部署系统性能监控功能,没有找到相应dump,故问题无法排查,需要再出现问题时通过收集到的Dump做溯源分析。
# 解决方案
# 第一步,部署SeeyonDump性能监控工具
部署SeeyonDump性能自动记录工具,按照工具的文档开启自动任务,每隔1分钟自动收集Dump信息,此工具不影响系统性能,并且会自动清理指定日期前的Dump,不会造成磁盘持续增长 https://support.seeyon.com/cbo_cptjxx.html?id=1802536845696802817
在下次出现问题时,将出现问题半小时区间的Dump日志取出做分析,基本都能看出问题所在。
# 第二步,部署环境检查工具做系统健康检查
部署环境检查工具,做系统的全面扫描,针对明显配置问题做修正,预防宕机发生: https://support.seeyon.com/cbo_cptjxx.html?id=1554733797281370113
经过在客户环境做扫描,扫描报告显示存在多个不通过项。尤其是MySQL数据库的一些配置还是出厂默认的,这些不合理的配置在很多项目上遇到过导致系统卡顿宕机:
- innodb_buffer_pool_size的参数值,此参数主要为设置缓存InnoDB表的索引、数据、插入数据时的缓存大小,如果配置过小,在并发请求下会导致查询非常缓慢。专属数据库服务器总计内存64G,按照物理内存的50%-80%配置,innodb_buffer_pool_size可以设置为40G。
- max_connections表示可开启的最大数据库连接数量,客户是5000在线,共用151个属实过小,高并发下会导致用户连接拒绝、连接等待问题,可以根据情况调整为1000或2000
- 主键索引不通过,当数据库中核心表缺少关键索引,会导致高并发下查询缓慢
综上诸多因素都会导致数据库问题,间接影响到OA系统使用,用户看到的问题表象是:卡顿、没反应。实际可能都卡在数据上。
根据检测结果,联系客户的DBA参照推荐做MySQL调整,以确保数据库配置合理性,运维平台也提供了数据库优化的一些建议 https://open.seeyoncloud.com/v5doc/142/1184/144.html