广告
返回顶部
首页 > 资讯 > 数据库 >MySQL学习笔记(21):优化磁盘IO
  • 861
分享到

MySQL学习笔记(21):优化磁盘IO

MySQL学习笔记(21):优化磁盘IO 2017-05-19 14:05:51 861人浏览 无得
摘要

本文更新于2020-04-05,使用Mysql 5.7,操作系统为Deepin 15.4。 目录使用符号连接分布io禁止操作系统更新文件的atime属性用裸设备(Raw Device)存放InnoDB共享表空间调整IO调度算法使用

MySQL学习笔记(21):优化磁盘IO

本文更新于2020-04-05,使用Mysql 5.7,操作系统为Deepin 15.4。

目录

  • 使用符号连接分布io
  • 禁止操作系统更新文件的atime属性
  • 用裸设备(Raw Device)存放InnoDB共享表空间
  • 调整IO调度算法
  • 使用磁盘阵列(RaiD)
  • RAID卡电池充放电问题
  • NUMA架构优化

使用符号连接分布IO

利用操作系统的符号连接,将不同的数据库、表、索引指向不同的物理磁盘,从而达到分布磁盘IO的目的。

禁止操作系统更新文件的atime属性

对于读写频繁的数据库文件来说,记录文件的访问时间一般没有用处,却会增加磁盘的负担,影响IO性能。

用裸设备(Raw Device)存放InnoDB共享表空间

因InnoDB使用缓存机制来缓存索引和数据,操作系统的磁盘IO缓存对其性能不仅没有帮助,甚至还有反作用。在InnoDB缓存充足的情况下,可以考虑使用裸设备来存放共享表空间。

调整IO调度算法

linux实现了4中IO调度算法:

  • NOOP算法(No Operation):不对IO请求排序,除了合并请求也不会进行其他任何优化,用最简单的先进先出FIFO队列顺序提交IO请求。NOOP算法主要面向随机访问设备,如SSD。
  • 最后期限算法(Deadline):除了维护一个拥有合并和排序功能的请求队列外,额外维护两个带有超时的FIFO队列,分别是读请求队列和写请求队列。当调度器发现读/写请求队列中的请求超时,会优先处理这些请求。
  • 预期算法(Anticipatory):是基于预测的IO算法,和Deadline类似,也维护了三个请求队列。区别在于,Anticipatory处理完一个IO请求后并不会直接返回处理下一个请求,而是等待片刻(默认6ms),等待期间如果有新来的相邻扇区的请求,会直接处理新来的请求。Anticipatory适合写入较多的环境,不适合数据库等随机读较多的环境。
  • 完全公平队列(Complete Fair Queuing/CFQ):把IO请求按照进程分别放入进程对应的队列中,其公平是针对进程而言的。CFQ以时间片算法为前提,轮转调动队列。

建议mysql数据库环境设置为Deadline算法。

使用磁盘阵列(RAID)

RAID(Redundant Array of Inexpensive Disks),即廉价磁盘冗余阵列,通常叫做磁盘阵列。

RAID级别:

  • RAID0:也叫条带化。
  • RAID1:也叫磁盘镜像。
  • RAID10:先做磁盘镜像,再条带化。
  • RAID4:像RAID0一样条带化,但额外增加一个磁盘用于纠错。
  • RAID5:对RAID4的改进,但将纠错数据也分别写到各个磁盘而不是一个磁盘。

RAID卡电池充放电问题

RAID卡都有写缓存(Battery Backed Write Cache),写缓存对IO性能的提升非常明显。为了避免掉电丢失写缓存中的数据,RAID卡都有电池(Battery Backup Unit,简称BBU)。

RAID缓存策略包括4部分:

  • 写策略
    • WriteBack:将数据写入缓存后直接返回。
    • WriteThrough:不使用写缓存,直接写入磁盘才返回。
  • 预读策略
    • ReadAheadNone:不开启预读。
    • ReadAhead:开启预读,预先把后面的数据加载入缓存。
    • ReadAdaptive:自适应预读,在缓存和I/O空闲的时候进行预读。
  • 读策略
    • Direct:读操作不进行缓存。
    • Cached:读操作进行缓存。
  • 故障策略
    • Write Cache OK if Bad BBU:如果BBU出问题,不使用写缓存,从WriteBack自动切换到WriteThrough。
    • No Write Cache if Bad BBU:如果BBU出问题,仍然使用写缓存。

RAID卡电池会定期启动自动校准模式,即定期充放电。期间,RAID卡控制器不会启动BBU。同时(除非修改缓存策略),也会禁用WriteBack写缓存策略,以保证数据完整性,造成系统IO性能会出现较大波动。

解决方案:

  • 根据RAID卡电池下次充放电的时间,在业务量较低的时候,提前进行充放电。
  • 即使电池电量低于警戒值甚至电池放电完毕,强制使用WriteBack写缓存策略。此时一定要有UPS之类的后备电源。

NUMA架构优化

目前的商用服务器系统架构大体分为三类(一般SMP或NUMA较多):

  • 对称多处理器架构(SMP/Symmetric Multi-Processor):一台计算机上汇集了一组CPU,各CPU平等地共享内存、IO等资源。SMP也被称为一致存储访问架构(UMA/UnifORM Memory Access)。由于共享,导致SMP服务器的扩展能力非常有限,最受限制的是内存,因每个CPU必需通过相同的总线访问相同的内存资源。
  • 非一致存储访问架构(NUMA/Non-Uniform Memory Access):一台计算机分为多个节点,每个节点内部拥有多个CPU,节点内部使用共有的内存控制器,节点之间通过互联模块进行连接和信息交互。节点的所有内存对于本节点的所有CPU都是等同的,对于其他节点的所有CPU都是不同的。每个CPU都可以访问整个系统的内存,但访问本地节点的较快,访问非本地节点的较慢。因此,随着CPU数量的增加,系统性能并不能线性增加。
  • 海量并行处理架构(MPP/Massive Parallel Processing):由多个SMP服务器通过一定的节点互联网络进行连接,每个节点只访问本地资源,不访问其他节点的资源。因而,理论上可以无限扩展。

NUMA的内存分配策略有4种:

  • 缺省default:总是在当前进程运行的本地节点分配。其节点之间内存分配不均衡,当某个CPU节点内存不足时,会导致swap产生。
  • 绑定bind:强制分配到指定节点上。
  • 交叉interleave:在所有节点或指定节点上交叉分配内存。
  • 优先preferred:在指定节点上分配,失败则在其他节点上分配。

Mysql对NUMA特性支持不好。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL学习笔记(21):优化磁盘IO

本文链接: https://www.lsjlt.com/news/7324.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL学习笔记(21):优化磁盘IO
    本文更新于2020-04-05,使用MySQL 5.7,操作系统为Deepin 15.4。 目录使用符号连接分布IO禁止操作系统更新文件的atime属性用裸设备(Raw Device)存放InnoDB共享表空间调整IO调度算法使用...
    99+
    2017-05-19
    MySQL学习笔记(21):优化磁盘IO
  • MySQL学习笔记(20):优化MySQL Server
    本文更新于2020-04-05,使用MySQL 5.7,操作系统为Deepin 15.4。 目录MySQL体系结构MySQL内存优化MyISAM内存优化key_buffer_size设置使用多索引缓存调整中点插入策略调整read_...
    99+
    2021-04-05
    MySQL学习笔记(20):优化MySQL Server
  • MySQL学习笔记(18):SQL优化
    本文更新于2019-08-18,使用MySQL 5.7,操作系统为Deepin 15.4。 目录优化SQL语句的步骤通过SHOW STATUS了解SQL语句的执行情况定位执行效率低下的SQL语句通过EXPLAIN或DESC分析SQ...
    99+
    2016-01-24
    MySQL学习笔记(18):SQL优化
  • MySQL学习笔记(22):应用优化
    本文更新于2020-04-05,使用MySQL 5.7,操作系统为Deepin 15.4。 目录使用连接池减少对MySQL的访问负载均衡其他优化措施 使用连接池 对于访问数据库来说,建立连接的代价比较昂贵。 减少对MySQL的访问...
    99+
    2020-02-02
    MySQL学习笔记(22):应用优化
  • MySql5.6性能优化学习笔记
    目标 了解什么是优化 掌握优化查询的方法 掌握优化数据库结构的方法 掌握优化MySQL服务器的方法 什么是优化? 合理安排资源、调整系统参数使MySQL运行更快、更节省资源。...
    99+
    2022-10-18
  • mysql学习笔记(2-初始化)
    初始化:(1)给root用户设置密码(三种方式): SET PASSWORD FOR 'username'@'host' = PASSWORD('your_password'); updat...
    99+
    2022-10-18
  • MySQL学习笔记(19):优化数据库对象
    本文更新于2019-08-18,使用MySQL 5.7,操作系统为Deepin 15.4。 目录优化表的数据类型通过拆分提高表的访问效率逆规范化使用中间表提高统计查询效率 一旦数据库对象设计完毕并投入使用,再进行修改就比较麻烦。 ...
    99+
    2016-04-25
    MySQL学习笔记(19):优化数据库对象
  • 如何使用 IDE 优化 Python 学习笔记?
    Python 是一种高级编程语言,广受欢迎,因为它易于学习,容易上手,同时也具有强大的功能。对于初学者来说,学习 Python 的过程中,一个好的 IDE 是非常重要的。使用 IDE 可以优化学习笔记,提高学习效率。在本文中,我们将介绍如何...
    99+
    2023-10-27
    学习笔记 ide 教程
  • PHP 学习笔记:如何优化存储方案?
    在 Web 开发中,数据存储是一个非常重要的问题。PHP 作为一种流行的服务器端语言,有许多存储方案可供选择。在本文中,我们将探讨一些优化存储方案的方法,以提高 Web 应用程序的性能和可靠性。 数据库优化 数据库是 Web 应用程序...
    99+
    2023-09-02
    学习笔记 开发技术 存储
  • PHP学习笔记:性能优化与缓存技术
    一、引言在开发和运维PHP应用程序时,性能优化是一个重要的考虑因素。随着用户量的增加,应用程序的负载可能会迅速增大,这会导致响应时间延长,甚至导致服务器崩溃。为了提供更好的用户体验和稳定的系统性能,我们需要采取一些性能优化的策略和技术。本文...
    99+
    2023-10-21
    性能优化 缓存技术 PHP
  • PHP学习笔记:数据库优化与索引设计
    在开发Web应用程序时,数据库操作是一个非常关键的环节。数据库的性能直接影响着Web应用程序的响应速度和用户体验。为了提升数据库的效率和查询速度,我们需要进行数据库优化和索引设计。一、数据库优化数据库架构优化:正规化设计:遵循数据库范式,减...
    99+
    2023-10-21
    PHP 数据库优化 索引设计
  • PHP 数组学习笔记:如何优化响应时间?
    PHP 是一种常用的服务器端编程语言,其强大的数据处理能力使其成为了许多网站的首选语言。而数组则是 PHP 中最常用的数据结构之一,其提供了方便、快捷的数据存储和访问方式。但是,当数组数据量较大时,可能会导致响应时间变慢,影响网站的性能。...
    99+
    2023-08-31
    数组 学习笔记 响应
  • 如何在Java学习笔记中优化Load并发操作?
    Java作为一门流行的编程语言,一直以来都备受开发者的喜爱。在Java学习笔记中,Load并发操作是一项非常重要的技能。但是,在实际应用中,我们常常会遇到Load并发操作效率低下的情况。本文将介绍如何在Java学习笔记中优化Load并发操作...
    99+
    2023-09-09
    学习笔记 load 并发
  • Python API 学习笔记:如何优化实时数据流程?
    在现代数据处理中,实时数据处理变得越来越重要。无论是在线广告业务、金融交易还是物联网设备,实时数据处理都需要高效可靠的技术来支持。Python 提供了许多 API 来实现实时数据处理,本篇文章将介绍如何优化实时数据流程,使其更高效、更灵活...
    99+
    2023-11-08
    api 学习笔记 实时
  • Python 数组 path 学习笔记:如何优化数组性能?
    Python 中的数组是一种非常常见的数据结构,它可以用来存储一系列的元素,并且支持随机访问和修改。在实际编程中,我们经常需要对数组进行一些操作,如查找、插入、删除等,而这些操作的效率往往会对程序的性能产生很大的影响。因此,如何优化数组性...
    99+
    2023-08-19
    数组 path 学习笔记
  • Python 学习笔记:如何利用编程算法优化容器?
    在日常的编程中,我们经常需要使用容器来存储和管理数据。然而,随着数据量的增加,容器的效率会逐渐降低,这时候就需要利用编程算法来优化容器,提高程序的效率。 下面,我们将介绍几种常用的编程算法,帮助您优化容器。 利用哈希表优化查找 哈希表...
    99+
    2023-09-09
    学习笔记 编程算法 容器
  • ASP 接口响应学习笔记:如何优化响应时间?
    随着互联网的快速发展,越来越多的企业和个人开始关注网站和应用程序的性能和响应速度。作为一个 ASP 开发者,你可能已经意识到了优化响应时间的重要性。在本文中,我们将分享一些优化 ASP 接口响应时间的技巧和最佳实践。 最小化 HTTP ...
    99+
    2023-06-22
    学习笔记 接口 响应
  • PHP数组存储学习笔记:如何优化数组的性能?
    在PHP中,数组是一个非常重要的数据类型。它可以存储一组相关的数据,并且可以通过索引访问每个数据项。但是,在处理大型数组时,可能会遇到性能问题。本文将介绍如何优化PHP数组的性能,以便更高效地处理大型数据集。 一、避免多维数组 PHP中的...
    99+
    2023-08-05
    存储 学习笔记 数组
  • Java和Unix Shell编程学习笔记:如何优化你的Shell脚本?
    Shell脚本是一种非常重要的编程语言,它可以帮助我们自动化执行一些重复性的任务,提高工作效率。但是,当脚本变得越来越复杂时,我们很容易陷入性能问题。本文将介绍一些优化Shell脚本的技巧,以提高其性能。 一、使用变量 Shell脚本中使...
    99+
    2023-09-12
    shell unix 学习笔记
  • 大数据与PHP学习笔记:如何优化Apache服务器性能?
    随着大数据时代的到来,数据的处理和管理变得越来越重要。而PHP作为一种在Web开发中广泛使用的编程语言,与Apache服务器配合使用可以实现高效的数据处理和管理。本文将介绍如何优化Apache服务器性能,提高数据处理和管理的效率。 一、A...
    99+
    2023-11-02
    学习笔记 大数据 apache
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作