依据应用发起数据库访问操作的全过程,针对每个关联点,逐步排查。
- 网络条件的差异
- MySQL与应用同机部署时,是本地通信,通信效率较高;
- MySQL与应用分开部署之后,相互之间基于TCP协议,进行远程通信,效率受网络影响;
- 网络不稳定,如ping时延不稳定;
- 防火墙配置的问题,导致链接经常被意外关闭,导致请求超时或者等不到数据;
- 部署位置的差异,对网络通信存在影响
- 与应用分别在不同的机房;
- 与应用在相同的机房,但在不同的机架;
- 硬件的差异
- 网线的质量问题;
- 网线接头的问题;
- 主机的CPU位数不同,如原部署主机为64位,新部署环境主机为32位;
- 操作系统的差异
- 操作系统版本不同,如原部署位置的操作系统为Suse 11,新部署环境的操作系统为Suse 12;
- 操作系统发行版不同,如原部署位置的操作系统为Suse 11,新部署环境的操作系统为CentOS 6;
- 操作系统的内核版本不同;
- 存储介质的变化
- 如原存储介质为磁阵,新存储介质为主机自带的硬盘;
- 如双方都使用磁阵,但控制器软件存在差异;
- 数据库的差异,如
- 版本不同;
- 运行参数存在差异;
- 操作系统的参数存在差异;
- SQL的执行计划的差异
- MySQL运行环境的变化、数据存储介质的变化,对SQL的执行计划产生了影响;
- 表分析数据缺失,或者不准确,导致执行计划不正确;
- 索引丢失或者失效;
- 应用自身的问题
- MySQL迁移后,应用使用的SQL代码发生了变化;
- 应用特性的问题,比如某特性在短时间内发起大量的数据库操作,占用了链接池的全部链接,导致被测特性的SQL需要等待较长时间才能拿到数据库链接;
- 获取数据库链接方法存在问题
- 应用使用的连接池存在Bug,导致获取链接时效率很低;
- 应用使用的连接池存在Bug,导致创建了过多的链接,消耗了MySQL侧的大量资源;
- 数据本身的问题
- 数据迁移的方法存在的问题,导致表的存储类型发生了变化;
- 数据不正确,比如迁移后出现了冗余数据;
- 其它
- 应用与其它应用共享数据库环境,而其它应用占用了数据库的大量资源,相应的影响了SQL的执行效率;
若非注明,均为原创,欢迎转载,转载请注明来源:MySQL数据库与应用分开部署之后性能劣化严重的定位思路