performance tuning
TRANSCRIPT
Performance Tuning
by qiuzhiwei
文件系统:XFS
XFS,一种高性能的日志文件系统,最早于1993年,由Silicon Graphics为他们的IRIX操作系统而开发,是IRIX 5.3版的默认档案系统。2000年5月,Silicon Graphics以GNU通用公共许可证释出这套系统的源代码,之后被移植到Linux 内核上。XFS 特别擅长处理大文件,同时提供平滑的数据传输。
IOZONE:EXT* VS XFS
MySQL数据库几个主要的访问模式:
MySQL数据库几个主要的访问模式:
a)同步读取InnoDB存储引擎页面输入;
MySQL数据库几个主要的访问模式:
a)同步读取InnoDB存储引擎页面输入;
b)异步写入InnoDB存储引擎页面输出;
MySQL数据库几个主要的访问模式:
a)同步读取InnoDB存储引擎页面输入;
b)异步写入InnoDB存储引擎页面输出;
c)同步改写InnoDB存储引擎事务日志;
MySQL数据库几个主要的访问模式:
a)同步读取InnoDB存储引擎页面输入;
b)异步写入InnoDB存储引擎页面输出;
c)同步改写InnoDB存储引擎事务日志;
d)同步添加MySQL数据库二进制日志。
在高性能环境中,重要的是选择一个在以上四种访问模式下都能提高效率的文件系统。如果这是一个读写密集型系统,要求XFS能够有效的刷新页面,就像支持挂起每个索引节点(或文件)的写操作。XFS的元数据效率能够使同步写操作的速度高于其他文件系统。
直到最近,XFS成为唯一的大型Linux文件系统,支持文件对齐。InnoDB数据文件块大小是固定的,条纹边界上对齐可能会增加额外的5%以上的 I/O性能。一般来说,XFS能够使大多数工程支持并行工作负载,多个分配组允许元数据操作的并行方式,而不仅数据。另外,生产系统还有其他的操作问题, 例如如果表文件被使用,想要尽快断开链接,DROP TABLE和其他文件remoavls(如TRUNCATE)才不会使整个操作拖延太久。XFS文件系统是更好的选择。
XFS的主要特性包括:
a)数据完全性
采用XFS文件系统,当意想不到的宕机发生后,
首先,由于文件系统开启了日志功能,所以你磁
盘上的文件不再会意外宕机而遭到破坏了。不论
目前文件系统上存储的文件与数据有多少,文件
系统都可以根据所记录的日志在很短的时间内迅
速恢复磁盘文件内容。
XFS的主要特性包括:
b)传输特性
XFS文件系统采用优化算法,日志记录对整体文件操作影响非常小。XFS查询与分配存储空间非常快。xfs文件系统能连续提供快速的反应时间。曾经对XFS、JFS、Ext3、ReiserFS文件系统进行过测试,XFS文件文件系统的性能表现相当出众。
XFS的主要特性包括:
c)可扩展性
XFS 是一个全64-bit的文件系统,它可以支持上百万
T字节的存储空间。对特大文件及小尺寸文件的支持
都表现出众,支持特大数量的目录。最大可支持的文
件大 小为263 = 9 x 1018 = 9 exabytes,最大文件系
统尺寸为18 exabytes。XFS使用高的表结构(B+树),保证了文件系统可以快速搜索与快速空间分配。XFS能够持续提供高速操作,文件系统的性能不受目录
中目录及文件数量的限制。
XFS的主要特性包括:
d)传输带宽
XFS 能以接近裸设备I/O的性能存储数据。在单个文件系统的测试中,其吞吐量最高可达7GB每秒,对单个文件的读写操作,其吞吐量可达4GB每秒。
格式化参数:
mkfs.xfs -f -i size=512,attr=2 -l lazy-count=1 -d su =1m,sw=2 /dev/mapper/cachedev
(sas盘su使用64k,flashcache使用1m,sw为使用盘的数量,raid1 sw=2,raid sw=5)
挂载参数:
mount -o defaults,rw,noatime,nodiratime,noikeep,nobarrier,allocsize=8M,attr2,largeio,inode64,swalloc /dev/sdb1 /u01
RAID:
独立磁盘冗余数组(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余数组(RAID, Redundant Array of Inexpensive Disks),简称硬盘阵列。其基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵、容量巨大的硬盘。
对于数据库应用:
raid可以提供数据备份技术、扩展存储空间和
提高存储性能。关于raid 0,raid 1,raid0+1,raid1+0,raid 5这些理论基础不重复提及,自行
google。对于数据库应用,通常我们换选择raid1+0。他
在磁盘空间成本和安全性方面和raid5差不多,但
是在性能方面(IOPS)却明显优越于raid5,所以对
于OLTP系统,我们一般使用raid1+0。
Cache:
对于一块中高端的RAID,缓存是必不可少的。一
般raid卡使用的DDR2内存颗粒,和我们的内存条几
乎相同,adaptec的缓存叫DRAM,根据硬件技术的
发展DDR3肯定会跟上的。
说到缓存技术就必须说一下两种缓存模式。
write through: 系统的写入请求直接写入硬盘,安全
性很高,性能很低。write back: 系统的写入请求先存放到缓存,再根据
时机统一回写到硬盘中,由于缓存的写速度远远高
于磁盘,所以这种方式性能可以大大提高。
BBWC:为了挖掘更好的RAID写入性能,DBA肯定想打开write back功
能,让数据库飞起来。但是这个时候出现了一个非常严重的安全问
题,就是突然断电导致数据丢失的问题(上面提过raid卡使用的是
RAM存储器,断电丢失数据,但是系统层已经认为这些数据已经写
入硬盘,所以系统层不能提供任何保护措施),数据丢失肯定是不能
接收的。那该如何呢?
针对这个问题出现了BBWC–Battery-Backed Write Cache.BBWC的核心就是BBU电池备份单元,它就是一块锂电池,在系统
开机的情况下处于充电状态,一旦遇到断电,就会给缓存提供刷新
所需的电流,保持数据不丢失,直到下次开机时把数据写回到磁盘
上。有的BBU和raid卡的内存做在一个模块上,有些是raid卡通过一
个连接线连接一个电池
BBWC的缺点:
BBWC的缺点:
1、每隔1-2年需要跟换电池,维护麻烦,管理员容易
忘记这个事情,如果机器不很远的机房单独去机房
换电池,成本就高了。
BBWC的缺点:
1、每隔1-2年需要跟换电池,维护麻烦,管理员容易
忘记这个事情,如果机器不很远的机房单独去机房
换电池,成本就高了。
2、更换电池需要停机,并且需要把机器下架,拆开。
BBWC的缺点:
1、每隔1-2年需要跟换电池,维护麻烦,管理员容易
忘记这个事情,如果机器不很远的机房单独去机房
换电池,成本就高了。
2、更换电池需要停机,并且需要把机器下架,拆开。
3、由于电池也是一个故障点,所以需要管理员花更
多的时间来关心电磁的工作情况
BBWC的缺点:
1、每隔1-2年需要跟换电池,维护麻烦,管理员容易
忘记这个事情,如果机器不很远的机房单独去机房
换电池,成本就高了。
2、更换电池需要停机,并且需要把机器下架,拆开。
3、由于电池也是一个故障点,所以需要管理员花更
多的时间来关心电池的工作情况
4、电池能够提供的供电时间最多72小时,初始化需
要充电数小时才能使用
BBWC的缺点:
1、每隔1-2年需要跟换电池,维护麻烦,管理员容易
忘记这个事情,如果机器不很远的机房单独去机房
换电池,成本就高了。
2、更换电池需要停机,并且需要把机器下架,拆开。
3、由于电池也是一个故障点,所以需要管理员花更
多的时间来关心电池的工作情况
4、电池能够提供的供电时间最多72小时,初始化需
要充电数小时才能使用
5、电池不环保
FBWC:
针对BBWC的缺点,出现了FBWC –Flash-Based Write Cache。
FBWC的原理就是再系统以外停电的时候,利
用一组“超级电容”中存储的电量,在较短的时间
内(大约1分钟),将缓存中的数据备份到RAID卡上
的大容量FLASH闪存中,知道下次开机再把数据
回写到硬盘中。
FBWC和BBWC几乎完成的目的是一样的,但
是实现方式不同。
FBWC的优点:
FBWC的优点:
针对BBWC的缺点,出现了FBWC–Flash-Based Write Cache。
FBWC的原理就是再系统以外停电的时候,利
用一组“超级电容”中存储的电量,在较短的时间
内(大约1分钟),将缓存中的数据备份到RAID卡上
的大容量FLASH闪存中,知道下次开机再把数据
回写到硬盘中。
FBWC和BBWC几乎完成的目的是一样的,但
是实现方式不同。
RAID配置:
RAID配置:
a.条带大小:
在RAID配置时,提交装机申请时指定,flashcache设置条带大小为1M.SAS盘采用默认64K
RAID配置:
b.LSI raid卡配置
/opt/MegaRAID/Megacli/MegaCli -LDSetProp -CachedBadBBU -Lall -aALL/opt/MegaRAID/Megacli/MegaCli -LDSetProp -DisDskCache -Lall -aALL/opt/MegaRAID/Megacli/MegaCli -LDSetProp -NORA -Lall -aALL/opt/MegaRAID/Megacli/MegaCli -LDSetProp -WB -Lall -aALL/opt/MegaRAID/Megacli/MegaCli -LDSetProp -Direct -Lall -aALL
RAID配置:
设置电池断电依然使用cache;不使用磁盘cache;不进行预读;设置cache策略为WB;direct模式
ssd设置cache策略为WT/opt/MegaRAID/MegaCli -LDSetProp -WT -Lall -aALL
Linux system:
Linux system:
a.sys 文件系统设置echo ’16′ >/sys/block/sdb/queue/read_ahead_kbecho ’512′ > /sys/block/sdb/queue/nr_requestsecho ‘deadline’ >/sys/block/sdb/queue/schedulerecho ’16′ >/sys/block/sdc/queue/read_ahead_kbecho ’512′ > /sys/block/sdc/queue/nr_requestsecho ‘deadline’ >/sys/block/sdc/queue/scheduler
Linux system:Linux有四种IO调度算法:CFQ,Deadline,Anticipatory和
NOOP,CFQ是默认的IO调度算法。完全随机的访问环境下,
CFQ与Deadline,NOOP性能差异很小,但是一旦有大的连续
IO,CFQ可能会造成小IO的响应延时增加,所以数据库环境
建议修改为deadline算法,表现更稳定。
IO调度算法都是基于磁盘设计,所以减少磁头移动是最重
要的考虑因素之一,但是使用Flash存储设备之后,不再需要
考虑磁头移动的问题,可以使用NOOP算法。NOOP的含义就
是NonOperation,意味着不会做任何的IO优化,完全按照请
求来FIFO的方式来处理IO。
Linux system:减少预读:
/sys/block/sdb/queue/read_ahead_kb,默认
128,调整为16
增大队列:
/sys/block/sdb/queue/nr_requests,默认128,调整为512
Linux system:
b.ulimit限制
打开文件限制。open file limit 。目前为10240
max locked memory限制。Unlimited
Linux system:
c.大页使用以及内存swap使用大页的系统,为连接和操作系统预留8G
以上。
sysctl.conf增加swappness=0
Numactl:
Numactl:
NUMA的内存分配策略有四种:
Numactl:
NUMA的内存分配策略有四种:
1.缺省(default):总是在本地节点分配(分配在
当前进程运行的节点上);
Numactl:
NUMA的内存分配策略有四种:
1.缺省(default):总是在本地节点分配(分配在
当前进程运行的节点上);
2.绑定(bind):强制分配到指定节点上;
Numactl:
NUMA的内存分配策略有四种:
1.缺省(default):总是在本地节点分配(分配在
当前进程运行的节点上);
2.绑定(bind):强制分配到指定节点上;
3.交叉(interleave):在所有节点或者指定的节
点上交织分配;
Numactl:
NUMA的内存分配策略有四种:
1.缺省(default):总是在本地节点分配(分配在
当前进程运行的节点上);
2.绑定(bind):强制分配到指定节点上;
3.交叉(interleave):在所有节点或者指定的节
点上交织分配;
4.优先(preferred):在指定节点上分配,失败则
在其他节点上分配。
Numactl:
因为NUMA默认的内存分配策略是优先在进程所在CPU的本地内存中分配,会导致CPU节点之间内存分配不均衡,当某个CPU节点的内存不足时,会导致swap产生,而不是从远程节点分配内存。这就是所谓的swap insanity现象。
Numactl:
MySQL采用了线程模式,对于NUMA特性的支持并不好,如果单机只运行一个MySQL实例,我们可以选择关闭NUMA,关闭的方法有三种:1.硬件层,在BIOS中设置关闭;2.OS内核,启动时设置numa=off;3.可以用numactl命令将内存分配策略修改为interleave(交叉),有些硬件可以在BIOS中设置
Numactl:
如果单机运行多个MySQL实例,我们可以将MySQL绑定在不同的CPU节点上,并且采用绑定的内存分配策略,强制在本节点内分配内存,这样既可以充分利用硬件的NUMA特性,又避免了单实例MySQL对多核CPU利用率不高的问题。
Q&A?
Thanks !!!