Part1—前言—在压力测试过程中,资源使用瓶颈等问题导致的最直接的性能问题是业务事务响应时间长,渐进TPS下降。对于问题定位分析,一般情况下,首先要检查的是监控服务器资源利用率。比如用TOP或者nmon查看CPU和内存使用情况,然后查看IO问题,比如网络IO和磁盘IO。如果是磁盘IO问题,一般问题是SQL语法问题、MYSQL参数配置问题、服务器硬件瓶颈导致的IOPS吞吐量问题。今天主要是讲解MYSQL参数配置不合理,导致高并发下磁盘IO问题。第二部分——三种问题——1.开启日志跟踪导致的磁盘IO问题例如:MySQL日志包括错误日志(ErrorLog)、更新日志(UpdateLog)、二进制日志(Binlog)、查询日志(QueryLog)、慢查询日志(SlowQueryLog)等。一般情况下,生产系统或者压力测试环境中很少有系统会时不时的打开查询日志。因为开启查询日志后,MySQL中执行的每一次查询都会被记录在日志中,这会给系统带来比较大的IO负担,但实际带来的好处并不是很大。2.SQL写入问题导致磁盘IO高。例如:在做某项目时,看到数据库磁盘IO使用率很高。前端查询业务事务loadrunner显示事物响应时间过长。相应的SQL被监控工具捕获。通过计划分析发现SQL使用distinct多表关联且是大表,然后使用orderby最终显示10条数据。在生成用于筛选的中间过程数据时,使用临时表并放置数据。进入临时表,内存刚好没有设置太大,所以放在磁盘上,导致高IO。备注:MySQL在执行SQL查询时可能会使用临时表。对于临时表存储,MySQL会先创建内存临时表,但当内存临时表超过配置中指定的值后,MySQL会将内存临时表导出到磁盘临时表。3、MYSQL参数配置问题MYSQL默认配置性能较低,只能在并发情况下通过调整参数配置逐步优化数据库性能。2017年底,根据公司要求,我们与某银行业务系统合作,做了性能测试,因为测试环境的硬件资源有限。我在公司申请了几台过时的笔记本,然后根据生产环境软件版本的配置要求,模拟搭建了性能测试环境。基础软件包括:MYSQL5.6、centos7.2、tomcat7、JDK1.7、redis。联想L421笔记本作为MYSQL数据库服务器,L440作为tomcat应用服务器,压力测试工具loadrunner,100个并发用户,压力测试业务场景:用户登录和注销,相关账单信息查询,电子汇票交易流程等,压测过程中发现,部分事务并发50个用户时,数据库磁盘I0使用率很高,尤其是写操作一直很高。例如,测试登录和退出事务已被监控。数据库磁盘的IO率一直很高。下面我就以此为例进行说明。Part3—优化前后—在优化前的压力测试中,数据库磁盘IO使用率大于75%,响应时间为1.6秒。NMON监控的数据库资源使用情况如下图1和图2所示:图1:图2:优化后数据库服务器资源使用情况:图3:图4:第4部分—优化内容—优化后影响的一些参数IO和内存,如innndb,性能问题明显解决,优化参数内容,如:innodb_write_io_threads、innodb_read_io_threads、innodb_flush_log_at_trx_commi等。InnoDBEngine优化IO子系统参数配置几个。
