performance tuning

51
Performance Tuning by qiuzhiwei

Upload: tommy-chiu

Post on 03-Jun-2015

1.455 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Performance tuning

Performance Tuning

by qiuzhiwei

Page 2: Performance tuning

文件系统:XFS

XFS,一种高性能的日志文件系统,最早于1993年,由Silicon Graphics为他们的IRIX操作系统而开发,是IRIX 5.3版的默认档案系统。2000年5月,Silicon Graphics以GNU通用公共许可证释出这套系统的源代码,之后被移植到Linux 内核上。XFS 特别擅长处理大文件,同时提供平滑的数据传输。

Page 3: Performance tuning

IOZONE:EXT* VS XFS

Page 4: Performance tuning
Page 5: Performance tuning
Page 6: Performance tuning

MySQL数据库几个主要的访问模式:

Page 7: Performance tuning

MySQL数据库几个主要的访问模式:

a)同步读取InnoDB存储引擎页面输入;

Page 8: Performance tuning

MySQL数据库几个主要的访问模式:

a)同步读取InnoDB存储引擎页面输入;

b)异步写入InnoDB存储引擎页面输出;

Page 9: Performance tuning

MySQL数据库几个主要的访问模式:

a)同步读取InnoDB存储引擎页面输入;

b)异步写入InnoDB存储引擎页面输出;

c)同步改写InnoDB存储引擎事务日志;

Page 10: Performance tuning

MySQL数据库几个主要的访问模式:

a)同步读取InnoDB存储引擎页面输入;

b)异步写入InnoDB存储引擎页面输出;

c)同步改写InnoDB存储引擎事务日志;

d)同步添加MySQL数据库二进制日志。

Page 11: Performance tuning

在高性能环境中,重要的是选择一个在以上四种访问模式下都能提高效率的文件系统。如果这是一个读写密集型系统,要求XFS能够有效的刷新页面,就像支持挂起每个索引节点(或文件)的写操作。XFS的元数据效率能够使同步写操作的速度高于其他文件系统。

直到最近,XFS成为唯一的大型Linux文件系统,支持文件对齐。InnoDB数据文件块大小是固定的,条纹边界上对齐可能会增加额外的5%以上的 I/O性能。一般来说,XFS能够使大多数工程支持并行工作负载,多个分配组允许元数据操作的并行方式,而不仅数据。另外,生产系统还有其他的操作问题, 例如如果表文件被使用,想要尽快断开链接,DROP TABLE和其他文件remoavls(如TRUNCATE)才不会使整个操作拖延太久。XFS文件系统是更好的选择。

Page 12: Performance tuning

XFS的主要特性包括:

a)数据完全性

采用XFS文件系统,当意想不到的宕机发生后,

首先,由于文件系统开启了日志功能,所以你磁

盘上的文件不再会意外宕机而遭到破坏了。不论

目前文件系统上存储的文件与数据有多少,文件

系统都可以根据所记录的日志在很短的时间内迅

速恢复磁盘文件内容。

Page 13: Performance tuning

XFS的主要特性包括:

b)传输特性

XFS文件系统采用优化算法,日志记录对整体文件操作影响非常小。XFS查询与分配存储空间非常快。xfs文件系统能连续提供快速的反应时间。曾经对XFS、JFS、Ext3、ReiserFS文件系统进行过测试,XFS文件文件系统的性能表现相当出众。

Page 14: Performance tuning

XFS的主要特性包括:

c)可扩展性

XFS 是一个全64-bit的文件系统,它可以支持上百万

T字节的存储空间。对特大文件及小尺寸文件的支持

都表现出众,支持特大数量的目录。最大可支持的文

件大 小为263 = 9 x 1018 = 9 exabytes,最大文件系

统尺寸为18 exabytes。XFS使用高的表结构(B+树),保证了文件系统可以快速搜索与快速空间分配。XFS能够持续提供高速操作,文件系统的性能不受目录

中目录及文件数量的限制。

Page 15: Performance tuning

XFS的主要特性包括:

d)传输带宽

XFS 能以接近裸设备I/O的性能存储数据。在单个文件系统的测试中,其吞吐量最高可达7GB每秒,对单个文件的读写操作,其吞吐量可达4GB每秒。

Page 16: Performance tuning

格式化参数:

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)

Page 17: Performance tuning

挂载参数:

mount -o defaults,rw,noatime,nodiratime,noikeep,nobarrier,allocsize=8M,attr2,largeio,inode64,swalloc /dev/sdb1 /u01

Page 18: Performance tuning

RAID:

独立磁盘冗余数组(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余数组(RAID, Redundant Array of Inexpensive Disks),简称硬盘阵列。其基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵、容量巨大的硬盘。

Page 19: Performance tuning

对于数据库应用:

raid可以提供数据备份技术、扩展存储空间和

提高存储性能。关于raid 0,raid 1,raid0+1,raid1+0,raid 5这些理论基础不重复提及,自行

google。对于数据库应用,通常我们换选择raid1+0。他

在磁盘空间成本和安全性方面和raid5差不多,但

是在性能方面(IOPS)却明显优越于raid5,所以对

于OLTP系统,我们一般使用raid1+0。

Page 20: Performance tuning

Cache:

对于一块中高端的RAID,缓存是必不可少的。一

般raid卡使用的DDR2内存颗粒,和我们的内存条几

乎相同,adaptec的缓存叫DRAM,根据硬件技术的

发展DDR3肯定会跟上的。

说到缓存技术就必须说一下两种缓存模式。

write through: 系统的写入请求直接写入硬盘,安全

性很高,性能很低。write back: 系统的写入请求先存放到缓存,再根据

时机统一回写到硬盘中,由于缓存的写速度远远高

于磁盘,所以这种方式性能可以大大提高。

Page 21: Performance tuning

BBWC:为了挖掘更好的RAID写入性能,DBA肯定想打开write back功

能,让数据库飞起来。但是这个时候出现了一个非常严重的安全问

题,就是突然断电导致数据丢失的问题(上面提过raid卡使用的是

RAM存储器,断电丢失数据,但是系统层已经认为这些数据已经写

入硬盘,所以系统层不能提供任何保护措施),数据丢失肯定是不能

接收的。那该如何呢?

针对这个问题出现了BBWC–Battery-Backed Write Cache.BBWC的核心就是BBU电池备份单元,它就是一块锂电池,在系统

开机的情况下处于充电状态,一旦遇到断电,就会给缓存提供刷新

所需的电流,保持数据不丢失,直到下次开机时把数据写回到磁盘

上。有的BBU和raid卡的内存做在一个模块上,有些是raid卡通过一

个连接线连接一个电池

Page 22: Performance tuning

BBWC的缺点:

Page 23: Performance tuning

BBWC的缺点:

1、每隔1-2年需要跟换电池,维护麻烦,管理员容易

忘记这个事情,如果机器不很远的机房单独去机房

换电池,成本就高了。

Page 24: Performance tuning

BBWC的缺点:

1、每隔1-2年需要跟换电池,维护麻烦,管理员容易

忘记这个事情,如果机器不很远的机房单独去机房

换电池,成本就高了。

2、更换电池需要停机,并且需要把机器下架,拆开。

Page 25: Performance tuning

BBWC的缺点:

1、每隔1-2年需要跟换电池,维护麻烦,管理员容易

忘记这个事情,如果机器不很远的机房单独去机房

换电池,成本就高了。

2、更换电池需要停机,并且需要把机器下架,拆开。

3、由于电池也是一个故障点,所以需要管理员花更

多的时间来关心电磁的工作情况

Page 26: Performance tuning

BBWC的缺点:

1、每隔1-2年需要跟换电池,维护麻烦,管理员容易

忘记这个事情,如果机器不很远的机房单独去机房

换电池,成本就高了。

2、更换电池需要停机,并且需要把机器下架,拆开。

3、由于电池也是一个故障点,所以需要管理员花更

多的时间来关心电池的工作情况

4、电池能够提供的供电时间最多72小时,初始化需

要充电数小时才能使用

Page 27: Performance tuning

BBWC的缺点:

1、每隔1-2年需要跟换电池,维护麻烦,管理员容易

忘记这个事情,如果机器不很远的机房单独去机房

换电池,成本就高了。

2、更换电池需要停机,并且需要把机器下架,拆开。

3、由于电池也是一个故障点,所以需要管理员花更

多的时间来关心电池的工作情况

4、电池能够提供的供电时间最多72小时,初始化需

要充电数小时才能使用

5、电池不环保

Page 28: Performance tuning

FBWC:

针对BBWC的缺点,出现了FBWC –Flash-Based Write Cache。

FBWC的原理就是再系统以外停电的时候,利

用一组“超级电容”中存储的电量,在较短的时间

内(大约1分钟),将缓存中的数据备份到RAID卡上

的大容量FLASH闪存中,知道下次开机再把数据

回写到硬盘中。

FBWC和BBWC几乎完成的目的是一样的,但

是实现方式不同。

Page 29: Performance tuning

FBWC的优点:

Page 30: Performance tuning

FBWC的优点:

针对BBWC的缺点,出现了FBWC–Flash-Based Write Cache。

FBWC的原理就是再系统以外停电的时候,利

用一组“超级电容”中存储的电量,在较短的时间

内(大约1分钟),将缓存中的数据备份到RAID卡上

的大容量FLASH闪存中,知道下次开机再把数据

回写到硬盘中。

FBWC和BBWC几乎完成的目的是一样的,但

是实现方式不同。

Page 31: Performance tuning

RAID配置:

Page 32: Performance tuning

RAID配置:

a.条带大小:

在RAID配置时,提交装机申请时指定,flashcache设置条带大小为1M.SAS盘采用默认64K

Page 33: Performance tuning

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

Page 34: Performance tuning

RAID配置:

设置电池断电依然使用cache;不使用磁盘cache;不进行预读;设置cache策略为WB;direct模式

ssd设置cache策略为WT/opt/MegaRAID/MegaCli -LDSetProp -WT -Lall -aALL

Page 35: Performance tuning

Linux system:

Page 36: Performance tuning

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

Page 37: Performance tuning

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。

Page 38: Performance tuning

Linux system:减少预读:

/sys/block/sdb/queue/read_ahead_kb,默认

128,调整为16

增大队列:

/sys/block/sdb/queue/nr_requests,默认128,调整为512

Page 39: Performance tuning

Linux system:

b.ulimit限制

打开文件限制。open file limit 。目前为10240

max locked memory限制。Unlimited

Page 40: Performance tuning

Linux system:

c.大页使用以及内存swap使用大页的系统,为连接和操作系统预留8G

以上。

sysctl.conf增加swappness=0

Page 41: Performance tuning

Numactl:

Page 42: Performance tuning

Numactl:

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

Page 43: Performance tuning

Numactl:

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

1.缺省(default):总是在本地节点分配(分配在

当前进程运行的节点上);

Page 44: Performance tuning

Numactl:

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

1.缺省(default):总是在本地节点分配(分配在

当前进程运行的节点上);

2.绑定(bind):强制分配到指定节点上;

Page 45: Performance tuning

Numactl:

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

1.缺省(default):总是在本地节点分配(分配在

当前进程运行的节点上);

2.绑定(bind):强制分配到指定节点上;

3.交叉(interleave):在所有节点或者指定的节

点上交织分配;

Page 46: Performance tuning

Numactl:

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

1.缺省(default):总是在本地节点分配(分配在

当前进程运行的节点上);

2.绑定(bind):强制分配到指定节点上;

3.交叉(interleave):在所有节点或者指定的节

点上交织分配;

4.优先(preferred):在指定节点上分配,失败则

在其他节点上分配。

Page 47: Performance tuning

Numactl:

因为NUMA默认的内存分配策略是优先在进程所在CPU的本地内存中分配,会导致CPU节点之间内存分配不均衡,当某个CPU节点的内存不足时,会导致swap产生,而不是从远程节点分配内存。这就是所谓的swap insanity现象。

Page 48: Performance tuning

Numactl:

MySQL采用了线程模式,对于NUMA特性的支持并不好,如果单机只运行一个MySQL实例,我们可以选择关闭NUMA,关闭的方法有三种:1.硬件层,在BIOS中设置关闭;2.OS内核,启动时设置numa=off;3.可以用numactl命令将内存分配策略修改为interleave(交叉),有些硬件可以在BIOS中设置

Page 49: Performance tuning

Numactl:

如果单机运行多个MySQL实例,我们可以将MySQL绑定在不同的CPU节点上,并且采用绑定的内存分配策略,强制在本节点内分配内存,这样既可以充分利用硬件的NUMA特性,又避免了单实例MySQL对多核CPU利用率不高的问题。

Page 50: Performance tuning

Q&A?

Page 51: Performance tuning

Thanks !!!

gtalk:[email protected]:[email protected]