MySQL服务器的SSD性能问题分析和测试详解
【问题】
我们有台HP的服务器,SSD在写IOPS约5000时,%util达到80%以上,那么这块SSD的性能究竟有没有问题,为解决这个问题做了下面测试。
【工具】
blktrace是linux下用来排查IO性能的工具。它可以记录IO经历的各个步骤,并计算出IO请求在各个阶段的消耗,下面是关键的一些步骤:
Q2G – 生成IO请求所消耗的时间,包括remap和split的时间;
G2I – IO请求进入IO Scheduler所消耗的时间,包括merge的时间;
I2D – IO请求在IO Scheduler中等待的时间;
D2C – IO请求在driver和硬件上所消耗的时间;
Q2C – 整个IO请求所消耗的时间(G2I + I2D + D2C = Q2C),相当于iostat的await。
其中D2C可以作为硬件性能的指标,I2D可以作为IO Scheduler性能的指标。
【测试一、比较HP SSD Smart Path开启前后SSD的写入性能】
1、HP SSD Smart Path开启,SSD控制器Caching关闭,Cache Ratio: 100% Read / 0% Write
测试结果如下,主要关注D2C(IO请求在SSD上消耗的时间)的AVG值,约为0.217ms
2、HP SSD Smart Path关闭,SSD控制器Caching开启,Cache Ratio: 10% Read / 90% Write
测试结果如下,主要关注D2C(IO请求在SSD上消耗的时间)的AVG值,约为0.0906ms
【结论】
前者在硬件上的消耗时间是后者的约2.4倍,对于写入为主的系统,建议HP SSD Smart Path关闭,SSD控制器Caching开启
【测试二、比较noop和deadline两种I/O调度算法的性能】
目前磁盘的调度算法有如下四种,我们系统中的配置值为deadline,很多资料上建议SSD配置为noop
1、Anticipatory,适用于个人PC,单磁盘系统;
2、CFQ(Complete Fair Queuing),默认的IO调度算法,完全公平的排队调度算法
3、Deadline,按照截止期限来循环在各个IO队列中进行调度
4、noop,简单的FIFO队列进行调度
下面都在HP SSD Smart Path关闭的情况下测试,
1、deadline, 主要关注G2I和I2D
2、修改为noop
【结论】
noop的IO Scheduler在等待和消耗的时间比deadline稍好,但差异不是很大。如果需要评估,还需要进一步详细的在各个场景下的测试。
下图是网上资料对不同调度算法的测试比较:
【测试三、比较这台服务器SSD与相同配置SSD的消耗时间】
AVG D2C为0.0906ms,0.0934ms,差异不大,说明这台服务器的SSD从响应时间上正常
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。
相关推荐
-
MySQL启用SSD存储的实例详解
MySQL启用SSD存储的实例详解 有时OS读写慢会降低MySQL服务器的性能,尤其是OS与MySQL使用同一磁盘时.故最好是让MySQL使用单独的磁盘,能使用SSD更好.要做到这一点,需要把SSD新磁盘挂载到服务器上,假定新磁盘在/dev/sdb. 1.准备新磁盘: # fdisk /dev/sdb 按下"n"将创建一个新分区:按下"p"将创建新的主分区.接着设置分区号(从1-4),再选择分区的尺寸,按下回车键. 如果不想使用整个磁盘作为一个分区,那么还需要继续创
-
MYSQL性能优化分享(分库分表)
1.分库分表 很明显,一个主表(也就是很重要的表,例如用户表)无限制的增长势必严重影响性能,分库与分表是一个很不错的解决途径,也就是性能优化途径,现在的案例是我们有一个1000多万条记录的用户表members,查询起来非常之慢,同事的做法是将其散列到100个表中,分别从members0到members99,然后根据mid分发记录到这些表中,牛逼的代码大概是这样子: 复制代码 代码如下: <?php for($i=0;$i< 100; $i++ ){ //echo "CREATE TA
-
MySQL性能优化之路---修改配置文件my.cnf
在Apache, PHP, MySQL的体系架构中,MySQL对于性能的影响最大,也是关键的核心部分.对于Discuz!论坛程序也是如此,MySQL的设置是否合理优化,直接影响到论坛的速度和承载量!同时,MySQL也是优化难度最大的一个部分,不但需要理解一些MySQL专业知识,同时还需要长时间的观察统计并且根据经验进行判断,然后设置合理的参数. 下面我们了解一下MySQL优化的一些基础,MySQL的优化我分为两个部分,一是服务器物理硬件的优化,二是MySQL自身(my.cnf)的优化. 一.服务
-
MySQL 性能优化的最佳20多条经验分享
当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的.当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了. 这里最主要
-
大幅优化MySQL查询性能的奇技淫巧
回顾 MySQL / InnoDB 的改善历史.你能很容易发现.在MySQL 5.6稳定版本中从来没有在read-only 这么快的提速,它很容易搞懂,以及在read-only(RO)有着良好的扩张性.也很期待它在read+write(RW)上达到一个较高水平.(特别是在读取数据是数据库主要工作的时候) 然而.我们对于RO在 MySQL 5.6的表现也十分的高兴,在5.7这个版本中,主要工作集中在 read+write (RW)上, 因为在大数据的处理上还没能达到我们的期望.但是RW依赖RO下.
-
MySQL数据库引擎介绍、区别、创建和性能测试的深入分析
数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引擎:ISAM.MYISAM和HEAP.另外两种类型INNODB和BERKLEY(BDB),也常常可以使用.如果技术高超,还可以使用MySQL+API自己做一个引擎.下面介绍几种数据库引擎: ISAM:ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到 数据库被查询的次数要远大于更新的次数.因此,ISAM执行读取
-
mysql性能优化之索引优化
作为免费又高效的数据库,mysql基本是首选.良好的安全连接,自带查询解析.sql语句优化,使用读写锁(细化到行).事物隔离和多版本并发控制提高并发,完备的事务日志记录,强大的存储引擎提供高效查询(表记录可达百万级),如果是InnoDB,还可在崩溃后进行完整的恢复,优点非常多.即使有这么多优点,仍依赖人去做点优化,看书后写个总结巩固下,有错请指正. 完整的mysql优化需要很深的功底,大公司甚至有专门写mysql内核的,sql优化攻城狮,mysql服务器的优化,各种参数常量设定,查询语句优化,主
-
MySQL性能设置
MySQL性能设置 网站访问量越来越大,MySQL自然成为瓶颈,因此最近我一直在研究 MySQL 的优化,第一步自然想到的是 MySQL 系统参数的优化,作为一个访问量很大的网站(日20万人次以上)的数据库系统,不可能指望 MySQL 默认的系统参数能够让 MySQL运行得非常顺畅. 通过在网络上查找资料和自己的尝试,我认为以下系统参数是比较关键的: (1).back_log: 要求 MySQL 能有的连接数量.当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,然后主线
-
MySQL服务器的SSD性能问题分析和测试详解
[问题] 我们有台HP的服务器,SSD在写IOPS约5000时,%util达到80%以上,那么这块SSD的性能究竟有没有问题,为解决这个问题做了下面测试. [工具] blktrace是linux下用来排查IO性能的工具.它可以记录IO经历的各个步骤,并计算出IO请求在各个阶段的消耗,下面是关键的一些步骤: Q2G – 生成IO请求所消耗的时间,包括remap和split的时间: G2I – IO请求进入IO Scheduler所消耗的时间,包括merge的时间: I2D – IO请求在IO Sc
-
Mysql服务器的安装配置与启动关闭方法详解
1.官网下载: https://dev.mysql.com/downloads/ 找到Mysql Community Server 点击 点击download下载,可以选择下载路径,我下载在d盘: 下载好了需要: 新建mysql.ini文件 内容: [mysql] 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] #设置3306端口 port = 3306 设置mysql的安装目录 basedir=D:\java web\mysql\mysq
-
PHP调试及性能分析工具Xdebug详解
程序开发过程中,一般用得最多的调试方法就是用echo.print_r().var_dump().printf()等将语句打印出来.对PHP脚本的执行效率,通常是脚本执行时间.对数据库SQL的效率,通常是数据库Query时间,但这样并不能真正定位和分析脚本执行和数据库查询的瓶颈所在?对此,有一个叫Xdebug(www.xdebug.org)的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况. 一.以windows平台对此模块的安装做简单的介绍: 1. 下载PH
-
MySQL慢查询分析工具pt-query-digest详解
目录 一.简介 二.安装pt-query-digest 三.pt-query-digest语法及重要选项 四.分析pt-query-digest输出结果 五.用法示例 一.简介 pt-query-digest是用于分析mysql慢查询的一个工具,它可以分析binlog.General log.slowlog,也可以通过SHOWPROCESSLIST或者通过tcpdump抓取的MySQL协议数据来进行分析.可以把分析结果输出到文件中,分析过程是先对查询语句的条件进行参数化,然后对参数化以后的查询进
-
MySQL中增删改查操作与常见陷阱详解
目录 本文导读 一.MySQL的增删改查 1.insert语句 2.delete语句 3.update语句原理 4.select 二.15种MySQL数据操作语句 1.REPLACE语句 2.CALL语句 3.TABLE语句 4.WITH语句 三.MySQL查询陷阱 总结 本文导读 本文作为MySQL系列第二篇文章,详细讲解了MySQL的增删改查的语句.语义和一些我们经常在开发工作中暴露的问题,MySQL的增删改查又叫数据操作语句,本文有讲些了一些常用的数据操作语句,select语句后续将作为一
-
浅谈MySQL中授权(grant)和撤销授权(revoke)用法详解
MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删除 数据库中所有表数据的权利 grant select on testdb.* to common_user@'%' grant insert on testdb.* to common_user@'%' grant update on testdb.* to common_user@'%' grant delete on testdb.* to c
-
nginx源码分析线程池详解
nginx源码分析线程池详解 一.前言 nginx是采用多进程模型,master和worker之间主要通过pipe管道的方式进行通信,多进程的优势就在于各个进程互不影响.但是经常会有人问道,nginx为什么不采用多线程模型(这个除了之前一篇文章讲到的情况,别的只有去问作者了,HAHA).其实,nginx代码中提供了一个thread_pool(线程池)的核心模块来处理多任务的.下面就本人对该thread_pool这个模块的理解来跟大家做些分享(文中错误.不足还请大家指出,谢谢) 二.thread_
-
MySQL Server 8.0.13.0 安装教程图文详解
在mysql 6.1.3的基础上安装8.0.13. mysql 8.0.13 下载地址: https://dev.mysql.com/downloads/windows/installer/8.0.html 可直接下载313.8M的.msi文件. 下载之后如图: 双击可直接安装,如出现如下报错,可在360中更新相应的.net framework 同意协议进入下一步 接下来,不用修改,一路点击next即可. 在已经安装版本的基础上,选择add进行添加. 选择mysql服务器选项 将需要8.0的版本
-
MySQL 8.0.12的安装与卸载教程详解
一,MySQL8.0.12版本安装步骤. 1,下载 https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.12-winx64.zip 2,解压 将mysql-8.0.12-winx64.zip解压到 D:/mysql 目录下 3打开cmd命令控制台,输入以下命令. d: cd\ cd mysql cd bin d:\mysql\bin>mysqld --initialize-insecure 初始
-
MySQL Innodb 存储结构 和 存储Null值 用法详解
背景: 表空间:INNODB 所有数据都存在表空间当中(共享表空间),要是开启innodb_file_per_table,则每张表的数据会存到单独的一个表空间内(独享表空间). 独享表空间包括:数据,索引,插入缓存,数据字典.共享表空间包括:Undo信息(不会回收<物理空间上>),双写缓存信息,事务信息等. 段(segment):组成表空间,有区组成. 区(extent):有64个连续的页组成.每个页16K,总共1M.对于大的数据段,每次最后可申请4个区. 页(page):是INNODB 磁盘
随机推荐
- 用tip解决Ext列宽度不够的问题
- SQL Server 2008图文安装教程第1/2页
- 右键添加打开MS-DOS的批处理
- Android根据输入银行卡号判断属于哪个银行
- 详解如何在ASP.NET Core中使用Redis
- js验证框架之RealyEasy验证详解
- Java Servlet和JSP教程
- php文件上传表单摘自drupal的代码
- asp.net TreeView与XML三步生成列表树
- 用MVC模型引导你的WEB设计思路
- jtable列中自定义button示例代码
- jQuery 获取对象 定位子对象
- js在不刷新的情况下动态添加表格行[脚本之家强烈推荐]
- Android 解决dialog弹出时无法捕捉Activity的back事件问题
- 不用登录也能编辑用户的注册表
- 基于Java8 函数式接口理解及测试
- 学习spring事务与消息队列
- Android开发之OpenGL绘制2D图形的方法分析
- 详解Android 7.0 Settings 加载选项
- Java编程经典小游戏设计-打砖块小游戏源码