服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|

MYSQL数据库服务的磁盘IO高问题分析与优化

2019-06-13 15:29来源:IT品课信息咨询/郭柏雅所属分类:Mysql

压力测试过程中,因为资源使用瓶颈等问题引发的最直接的性能问题是业务交易响应时间偏大,TPS逐渐降低等。而问题定位分析通常情况下,最优先排查的是监控服务器资源利用率,例如先用

Part 1

— 前言 —

压力测试过程中,因为资源使用瓶颈等问题引发的最直接的性能问题是业务交易响应时间偏大,TPS逐渐降低等。而问题定位分析通常情况下,最优先排查的是监控服务器资源利用率,例如先用TOP 或者nmon等查看CPU、内存使用情况,然后在排查IO问题,例如网络IO、磁盘IO的问题。 如果是磁盘IO问题,一般问题是SQL语法问题、MYSQL参数配置问题、服务器自身硬件瓶颈导致IOPS吞吐率问题。

今天主要是讲解MYSQL 参数配置不合理导致在高并发下磁盘IO问题。

MYSQL数据库服务的磁盘IO高问题分析与优化

Part 2

— 三种问题 —

1、 打开日志跟踪引起的磁盘IO问题

例如:MySQL的日志包括错误日志(ErrorLog),更新日志(UpdateLog),二进制日志(Binlog),查询日志(QueryLog),慢查询日志(SlowQueryLog)等,正常情况下,在生产系统或者压力测试环境中很少有系统会时时打开查询日志。因为查询日志打开之后会将MySQL中执行的每一条Query都记录到日志中,会该系统带来比较大的IO负担,而带来的实际效益却并不是非常大。

2、 SQL写法问题引起磁盘IO高

例如:曾经在做某一个项目时,在看到数据库磁盘IO使用率偏高,前端查询业务交易loadrunner显示事物响应时间偏长,通过监控工具抓取对应SQL,通过计划分析,发现该SQL中使用distinct 又多表关联且是大表、然后使用order by,最终显示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率一直偏高,下面我将以此为例作为讲解。

Part 3

— 优化前后 —

优化前

压力测试时,数据库磁盘IO使用率大于75%,响应时间1.6秒,通过NMON监控到的数据库资源使用情况,如下图一与图二:

图一:

MYSQL数据库服务的磁盘IO高问题分析与优化

图二:

MYSQL数据库服务的磁盘IO高问题分析与优化

优化后

数据库服务器资源使用率:

图三:

MYSQL数据库服务的磁盘IO高问题分析与优化

图四:

MYSQL数据库服务的磁盘IO高问题分析与优化

Part 4

— 优化内容 —

通过优化innndb等影响IO、内存的一些参数后,性能问题明显解决,优化参数内容,例如:innodb_write_io_threads、innodb_read_io_threads、innodb_flush_log_at_trx_commi等InnoDB 引擎优化IO 子系统参数配置若干。

延伸 · 阅读

精彩推荐
  • MysqlMySQL中int最大值深入讲解

    MySQL中int最大值深入讲解

    这篇文章主要给大家介绍了关于MySQL中int最大值的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...

    haoyq 473 2019-06-06
  • MysqlMYSQL数据库服务的磁盘IO高问题分析与优化

    MYSQL数据库服务的磁盘IO高问题分析与优化

    压力测试过程中,因为资源使用瓶颈等问题引发的最直接的性能问题是业务交易响应时间偏大,TPS逐渐降低等。而问题定位分析通常情况下,最优先排查的是监控服务器资源利用率,例如先用...

    IT品课信息咨询/郭柏雅 226 2019-06-13
  • MysqlMysql忘记密码的几种解决方案

    Mysql忘记密码的几种解决方案

    今天小编就为大家分享一篇关于Mysql忘记密码的几种解决方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    平而不凡 329 2019-06-03
  • Mysql使用MySQL的geometry类型处理经纬度距离问题的方法

    使用MySQL的geometry类型处理经纬度距离问题的方法

    这篇文章主要介绍了使用MySQL的geometry类型处理经纬度距离问题的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    Shawn 465 2019-06-09
  • MysqlMySQL开启Slow慢查询的方法示例

    MySQL开启Slow慢查询的方法示例

    这篇文章主要给大家介绍了关于MySQL开启Slow慢查询的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...

    willamwang 185 2019-06-04
  • MysqlCMD命令操作MySql数据库的方法详解

    CMD命令操作MySql数据库的方法详解

    今天小编就为大家分享一篇关于CMD命令操作MySql数据库的方法详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    炫酷飞扬 277 2019-06-03
  • MysqlMySQL数据库迁移快速导出导入大量数据

    MySQL数据库迁移快速导出导入大量数据

    今天小编就为大家分享一篇关于MySQL数据库迁移快速导出导入大量数据,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    CODETC 483 2019-06-01
  • MysqlMySQL新建用户中的%到底包不包括localhost?

    MySQL新建用户中的%到底包不包括localhost?

    操作MySQL的时候发现,有时只建了%的账号,可以通过localhost连接,有时候却不可以,网上搜索也找不到满意的答案,干脆手动测试一波...

    程淇铭 116 2019-06-05