Linux的文件系统有点像MySQL的存储引擎,它支持各种各样的文件系统。它最上层是通过 virtual files system虚拟文件系统作为一个抽象接口层来对外提供调用的。然后下层的各种文件系统实现这些调用接口就行了。

1. Linux 中的 日志文件系统和非日志文件系统

文件内容的修改涉及到两部分:实际文件内容的修改 和 文件元(metadata)信息的修改。所以在修改一个成功之后,修改另一个之前,此时系统崩溃,就会导致两者的不一致。所以提出了日志文件系统的概念。

所谓的日志文件系统(Journaling file system),就是在实际修改文件内容和文件元信息之前,将他们的修改先写到一个日志中(journal log)。这样的话,如果发生系统崩溃,就可以使用日志进行恢复。当然,写日志会对文件系统的性能有一定的影响。除了ext2之外,其它文件系统几乎都是日志文件系统。

日志文件系统的处理过程是:1)先写日志;2)然后写实际的文件系统;3)删除日志;

日志文件系统又可以分成三种类型:

1)日志模式(journal): 将所有的元数据和数据改变均写入日志,对性能影响最大;

2)预定模式(ordered): 只记录元数据的变化, 在数据写入磁盘后再修改元数据,对性能影响中等;

3)写回模式(writeback): 只记录元数据的修改变化,对数据修改顺序无要求,对性能影响最小;

我们可以在/etc/fstab 文件中修改文件系统的日志模式。

/dev/sdb1 /testfs ext3 defaults,data=writeback 0 0

Linux 常用文件系统:

ext4, ext4, XFS, ReiserFS, JFS

其中最常用的是 ext4, XFS. 其中redhat7/centos7将XFS作为默认的文件系统。在最新内核的测试中XFS性能也明显超过ext4。所以对于mysql服务器,最好选择使用 XFS 文件系统

关于 ssd上的ext4和xfs有一个比较:

https://www.percona.com/blog/2012/03/15/ext4-vs-xfs-on-ssd/

在rhel6.4之前ext4性能比xfs好,因为xfs有lock争用的bug。但是6.4开始,xfs的bug被fix了。所以xfs性能比ext4好。

在xfs的锁争用bug没有解决时:

    sync                      async
threads throughput throughput
XFS ext4 XFS ext4
1.90/124k 1.41/92k 1.72/112k 1.41/92k
1.01/64k 1.65/108k 0.97/62k 1.65/108k
0.27/17k 1.55/102k 0.21/13k 1.55/102k
0.13/8k 1.45/95k 0.15/9k 1.45/95k
0.12/7k 1.45/95k 0.12/7k 1.45/95k

It’s pretty clear from these results that lock contention is killing XFS as the thread count grows. ext4 performance shows that it uses exclusive locking as well, but it is not degrading like XFS is due to different lock types being used.

但是当xfs的锁争用bug解决之后:

    sync                      async
threads throughput throughput
vanilla patched vanilla patched
1.90/124k 1.83/120k 1.72/112k 1.69/111k
1.01/64k 2.85/185k 0.97/62k 2.57/168k
0.27/17k 3.68/241k 0.21/13k 3.41/223k
0.13/8k 4.42/290k 0.15/9k 4.16/273k
0.12/7k 4.95/325k 0.12/7k 4.86/319k

Throughput scales with thread count – each thread runs at 100% CPU utilsation, and XFS gets up to 3x as much throughput as ext4 does. So, basically, XFS is still the file system you want for direct IO。

挂在文件时的优化(noatime,nodiratime):

mount –t ext4 –o rw,noatime,nodiratime /dev/sda6 /data

noatime 会有0-10%的性能提升,一般平均会有3%的性能提升。

noatime:

Do not update inode access times on this filesystem (e.g, for faster access on the news spool to speed up news servers).

nodiratime:

Do not update directory inode access times on this filesystem.

noatime,nodiratime的配置也可以在/etc/fstab中进行。

注意:XFS挂载超过1T分区时,需要加入挂载参数inode64

大意就是xfs文件系统会把inode存储在磁盘最开始的这1T空间里,如果这部分空间被完全填满了,那么就会出现磁盘空间不足的错误提示了。解决办法就是在挂载时,指定 inode64 选项:

mount -o remount -o noatime,nodiratime,inode64,nobarrier /dev/sdb1 /backup

参考:http://imysql.cn/2013/02/21/using-xfs-with-large-partition-for-backup.html

MySQL 调优基础(三) Linux文件系统的更多相关文章

  1. MySQL 调优基础(四) Linux 磁盘IO

    1. IO处理过程 磁盘IO经常会成为系统的一个瓶颈,特别是对于运行数据库的系统而言.数据从磁盘读取到内存,在到CPU缓存和寄存器,然后进行处理,最后写回磁盘,中间要经过很多的过程,下图是一个以wri ...

  2. MySQL 调优基础(五) Linux网络

    1. TCP/IP模型 我们一般知道OSI的网络参考模型是分为7层:“应表会传网数物”——应用层,表示层,会话层,传输层,网络层,数据链路层,物理层.而实际的Linux网络层协议是参照了OSI标准,但 ...

  3. MySQL 调优基础(二) Linux内存管理

    进程的运行,必须使用内存.下图是Linux中进程中的内存的分布图: 其中最重要的 heap segment 和 stack segment.其它内存段基本是大小固定的.注意stack是向低地址增长的, ...

  4. MySQL 调优基础:Linux内存管理 Linux文件系统 Linux 磁盘IO Linux网络

    http://www.cnblogs.com/digdeep/category/739915.html

  5. MySQL 调优基础(一) CPU与进程

    一般而言,MySQL 的调优可以分为两个层面,一个是在MySQL层面上进行的调优,比如SQL改写,索引的添加,MySQL各种参数的配置:另一个层面是从操作系统的层面和硬件的层面来进行调优.操作系统的层 ...

  6. mysql调优 基础

    MySQL调优可以从几个方面来做: 1. 架构层:做从库,实现读写分离: 2.系统层次:增加内存:给磁盘做raid0或者raid5以增加磁盘的读写速度:可以重新挂载磁盘,并加上noatime参数,这样 ...

  7. MySQL调优基础, 与hikari数据库连接池配合

    1.根据硬件配置系统参数 wait_timeout  非交互连接的最大存活时间, 10-30min max_connections   全局最大连接数 默认100 根据情况调整 back_log   ...

  8. MySQL调优系列基础篇

    前言 有一段时间没有写博客了,整天都在忙,上班,录制课程,恰巧最近一段时间比较清闲,打算弄弄MYSQL数据库. 关于MySQL数据库,这里就不做过多的介绍,开源.免费等特性深受各个互联网行业喜爱,尤其 ...

  9. mysql监控、性能调优及三范式理解

    原文:mysql监控.性能调优及三范式理解 1监控 工具:sp on mysql     sp系列可监控各种数据库 2调优 2.1 DB层操作与调优 2.1.1.开启慢查询 在My.cnf文件中添加如 ...

随机推荐

  1. java-spring-mvc_上傳下載文件配置及controller方法

    下载: 1.在spring-mvc中配置(用于100M以下的文件下载) <bean class="org.springframework.web.servlet.mvc.annotat ...

  2. mysql易混淆知识点

    1,join 和 union join连接属于表之间的水平操作,而union 是表之间的垂直操作.简单讲就是水平操作主要是为了获得列数据,垂直操作是为了获得行数据 cross  join        ...

  3. spring 的自建request请求

    public String myRequest() throws IOException, URISyntaxException{                String url="ht ...

  4. 线程(三)__Interrupt 、setDaemon()、join

    一.wait和sleep区别? 1.wait可以指定也可以不指定.sleep必须指定时间. 2.在同步中时,对cpu的执行权和锁的处理不同.它们都能将线程处于冻结状态. wait:释放执行权,释放锁. ...

  5. 我最常用的几个Xcode快键键

    ⌘(command) ⏎(return) ⌥(option/alt) ⇧(shift) ⌃(control/ctrl) 快速打开文件 ⌘ + ⇧ + O(字母) 快速搜索文本 ⌘ + ⇧ + F 分栏 ...

  6. asp.net C#发送邮件类

    很久前写的一个简单邮件发送类分享给大家: using System; using System.Data; using System.Configuration; using System.Web; ...

  7. <转>iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!

    原文地址:http://blog.csdn.net/xiaominghimi/article/details/6937097 //——2012-12-11日更新   获取"产品付费数量等于0 ...

  8. AndRoid studio创建APP图标

    打开---File----New----Image asset 注意:在design页面可能没有image asset选项!必须在其他编辑页面! 这就打开了图标设置页面,找到自己想要的图标就好!下面框 ...

  9. Android根据字符串加载Activity和图片

    根据传入的字符串跳转Activity Intent intent = new Intent(context,Class.forName("com.packname.Activity" ...

  10. Android studio修改Logcat颜色

    Android studio默认的Logcat配色不利于阅读,我们可以修改自定义自己的颜色配置