好大的风

2010年01月28日

固态盘(SSD)分析与评估

Filed under: 未分类 — 好大的风 @ 1:46 下午

本文对传统机械磁盘和固态磁盘进行了对比测试,并对测试结果进行了分析,测试案例主要侧重于事务型数据库应用。
测试结论对于存储设备的采购具有一定参考意义。
由于作者技术水平有限以及测试时间仓卒,难免出现谬误,欢迎读者对本文中的观点提出建议和意见。

一,机械磁盘与固态磁盘

传统磁盘属于机械式磁盘,是目前计算机系统中有限的几个机械部件之一。
机械式磁盘在顺序访问时,速度还可以接受,一般在30-100MB/s。
寻道时间是目前机械磁盘的一个主要瓶颈。一般机械磁盘的寻道时间在5-20ms左右。
这导致机械磁盘随机读取的性能不高,这也是事务型数据库应用系统的主要性能瓶颈之一。

数据库系统访问磁盘时,大部分属于随机访问,所以事务型数据库的性能表现与存储设备的IOPS和访问延迟指标紧密相关。
数据库的关键数据结构Btree的主要目的之一便在于降低随机访问磁盘的频度。

目前提高存储设备IOPS的途径主要是使用磁盘阵列,多块磁盘同时提供访问,例如目前的SAN存储设备,
实践中每块机械磁盘的IOPS大概在200左右,这样14块硬盘的阵列,大约可以提供2500左右的IOPS。
但延迟时间依然没有改善,与一块磁盘基本一致。

固态磁盘的存储介质为半导体芯片,属于纯电子设备,所以固态磁盘在IOPS和访问延迟方面具有革命性的优势。

鉴于事务型数据库系统对于存储设备的IOPS和访问延迟很敏感,所以此次评估的侧重于这两个指标。

二,测试工具简介

sysbench是一个多功能、多线程的性能测试工具,可以评估CPU,内存,线程并发,存储和事务型数据库等方面的性能表现。

根据数据库访问存储的特点,测试过程中,采取以下参数:

–max-requests=500000
测试过程IO访问次数,为了保证数据平坦的分布,避免缓存的影响,此处应尽量设置大一些。

–test=fileio
进行文件IO测试,目前的生产环境中MySQL数据库使用ext3文件系统。

–num-threads=8
IO线程,目前MySQL数据库中的IO线程一般为4-8个。

–file-total-size=40G
测试文件总量,理论上,文件量越大越能够避免缓存的影响,真实体现存储的性能,但目前送测的固态磁盘设备容量只有50G,所以这里选择40G。

–file-test-mode=rndrd
–file-test-mode=rndwr
测试模式为随机读取,或者随机写入,随机访问存储是数据库应用的特点。

–file-extra-flags=direct
使用direct模式打开文件,最大程度避免缓存对与测试结果的影响。

默认情况,sysbench使用单次IO请求SIZE为16K。

三,存储设备的关键参数设置。

1,RAID级别设置
目前认为,RAID 1 最适合数据库应用,已经另有文章专门论述这一观点。

2,Write Back与Write Though
由于送测设备提供的硬件RAID卡上面具备后背电池,
所以可以打开Write Back,理论上可以提高写入性能,降低单次写入IO的延迟。
这个与缓存的容量密切相关,当打开写入缓存后,读取缓存的容量会相应下降。
经过咨询厂商,一般情况默认写入缓存占总缓存容量的一半。

3,Strip Size
一般认为,Strip Size设置与应用单次IO请求大小相同时,性能最好。

四,测试用例

结合实际使用的经验,本次评估准备了以下测试用例:

1,机械磁盘与固态磁盘的读取对比

机械磁盘为两块250G SAS硬盘,使用硬件RAID卡,RAID级别为RAID 1,Strip Size为16K,Write Back模式。
固态磁盘为两块50G SATA接口固态磁盘,使用硬件RAID卡,RAID级别为RAID 1,Strip Size为16K,Write Back模式。
sysbench的各项参数为:
–max-requests=500000
–test=fileio
–num-threads=8
–file-total-size=40G
–file-test-mode=rndrd
–file-extra-flags=direct

机械磁盘与固态磁盘的写入对比

机械磁盘为两块250G SAS接口硬盘,使用硬件RAID卡,RAID级别为RAID 1,Strip Size为16K,Write Back模式。
固态磁盘为两块50G SATA接口固态磁盘,使用硬件RAID卡,RAID级别为RAID 1,Strip Size为16K,Write Back模式。
sysbench的各项参数为:
–max-requests=500000
–test=fileio
–num-threads=8
–file-total-size=40G
–file-test-mode=rndwr
–file-extra-flags=direct

Write Back与Write Through的写入对比

固态磁盘为两块50G SATA接口固态磁盘,使用硬件RAID卡,RAID级别为RAID 1,Strip Size为16K 。
sysbench的各项参数为:
–max-requests=500000
–test=fileio
–num-threads=8
–file-total-size=40G
–file-test-mode=rndwr
–file-extra-flags=direct

8K,16K,64K Strip Size的读取对比

固态磁盘为两块50G SATA接口固态磁盘,使用硬件RAID卡,RAID级别为RAID 1,Write Back模式 。
sysbench的各项参数为:
–max-requests=500000
–test=fileio
–num-threads=8
–file-total-size=40G
–file-test-mode=rndrd
–file-extra-flags=direct

8K,16K,64K Strip Size的写入对比

固态磁盘为两块50G SATA接口固态磁盘,使用硬件RAID卡,RAID级别为RAID 1,Write Back模式 。
sysbench的各项参数为:
–max-requests=500000
–test=fileio
–num-threads=8
–file-total-size=40G
–file-test-mode=rndwr
–file-extra-flags=direct

以上所有测试用例的操作系统为:RHEL 5.2 。
uname -a 运行结果:
Linux 固态磁盘 2.6.18-92.el5 #1 SMP Tue Apr 29 13:16:15 EDT 2008 x86_64 x86_64 x86_64 GNU/Linux
sysbench的版本:
sysbench 0.4.12: multi-threaded system evaluation benchmark

五,测试结果数据对比:

1,机械磁盘与固态磁盘的读取对比

机械磁盘IOPS: 460.18 Requests/sec
固态磁盘IOPS: 9362.76 Requests/sec

机械磁盘访问延迟: 17.38ms
固态磁盘访问延迟: 0.85ms

2,机械磁盘与固态磁盘的写入对比

机械磁盘IOPS: 201.67 Requests/sec
固态磁盘IOPS: 1963.89 Requests/sec

机械磁盘访问延迟: 35.93ms
固态磁盘访问延迟: 3.70ms

3,Write Back与Write Through的写入对比

Write BackIOPS: 1963.89 Requests/sec
Write ThroughIOPS: 1777.16 Requests/sec

Write Back访问延迟: 3.70ms
Write Through访问延迟: 3.49ms

4,8K,16K,64K Strip Size的读取对比

8K IOPS: 8876.86 Requests/sec
16K IOPS: 9362.76 Requests/sec
64K IOPS: 9753.22 Requests/sec

8K 访问延迟: 0.90ms
16K 访问延迟: 0.85ms
64K 访问延迟: 0.82ms

5,8K,16K,64K Strip Size的写入对比

8K IOPS: 1720.81 Requests/sec
16K IOPS: 1963.89 Requests/sec
64K IOPS: 1944.75 Requests/sec

8K 访问延迟: 3.71ms
16K 访问延迟: 3.70ms
64K 访问延迟: 3.26ms

以上测试结果数据均为多次测试数据的中间值。

六,测试总结:

1,固态磁盘的随机读取性能高出机械硬盘20倍以上。
2,固态磁盘在随机写入性能高出机械硬盘10倍以上。
3,Write Back与Write Through对性能的影响与缓存的容量相关,对于写入较多的应用,推荐打开Write Back。
4,较小的Strip Size对于性能不利,推荐设置为16K或以上。

固态磁盘的出现,为数据库应用的存储带来了革命性的改观。

机械磁盘IOPS的劣势可以通过磁盘阵列的方式,使用多块磁盘来弥补,
但机械磁盘的访问延迟时间的问题,是无法弥补的,这是根本技术上的限制。

从目前厂商提供的设备来看,目前送测的容量设备容量仅有50G。
现在较高配置的服务器,有64G甚至更多的内存,相对来说,固态磁盘50G的容量太小。
随着工艺的改进和垂直记录技术的产生,机械磁盘在容量方面有很大的进展,目前单碟容量已经高达500G。
所以固态磁盘在容量上处于劣势。

ZFS提供了一种应用场景,将大容量的机械磁盘用于数据存储,将性能优异的固态磁盘用于缓存,
这样可以达到优势互补,实践的效果也很不错。

由于测试时间有限,未对固态磁盘设备的稳定性和寿命进行测试。

七,参考测试信息:

本次测试过程中,还对Solaris系统和FreeBSD系统进行了非正式评估,以下是简要结论:

Solaris ZFS系统:

在IOPS方面,固态磁盘比机械磁盘快10倍。
在延迟方面,固态磁盘比机械磁盘快25倍。

在IOPS和延迟方面,Strip与Mirror不相上下。
在IOPS和延迟方面,Strip、Mirror均比单盘快1倍。

在使用机械磁盘作为数据设备,固态磁盘作为缓存设备时,IOPS与延迟 和单盘固态磁盘不相上下。
(当数据容量远远超过缓存设备容量时,性能会明显下降)

FreeBSD系统:

简单测试了FreeBSD下的ZFS效果:
1, IOPS同Solaris下相差不多(两块固态磁盘硬件RAID1的IOPS在3000左右)。
2, 当Strip Size取16K时,IOPS下降很多,当取1M时,同64K相差无几。
3, 貌似FreeBSD下的ZFS重启后需要手工mount。

FreeBSD UFS测试情况,两块固态磁盘 HARDWARE RAID1,1M strip size:

IOPS居然高达14000,比Linux下最好的情况还高出40%,我怀疑是缓存的影响。
(因UFS不支持direct模式,但在Linux下同样的测试用例,最高到10000)。

2010年01月26日

论技术评审的意义

Filed under: 未分类 — 好大的风 @ 12:22 下午

我看到最近公司部门结构说明中,已经没有明确的系统架构评审组了。
在我的印象中,自从门户技术部成立以来,系统架构评审组从未真正发挥作用,已经名存实亡。

系统架构评审组没有发挥作用的几个原因:

1,项目实施过程中没有明确指定系统架构师角色。

根据实践经验,我认为系统架构师在是一个非常重要的角色,其主要职能如下:
系统架构师首先负责需求分析,要与产品设计人员进行充分沟通,分解出系统的主要结构。
如果在系统分析过程中发现有任何问题,都需要与产品人员说明,在必要情况下,对需求做出修正。
在需求确认后,进行技术设计,对系统进行功能、模块划分,识别主要技术要点,评估开发周期。
在技术设计完成并经过内部讨论后,将需求分析以及技术设计提交系统架构评审组,进行技术评审。
在技术评审通过后,进入开发阶段,此时系统架构师很可能是核心开发人员之一。
负责对开发过程中遇到的非预期问题进行协调解决,保证项目按时保质完成。
系统架构师要在整个项目过程中与产品设计人员、系统工程师、数据库工程师、网络工程师保持紧密联系。
系统架构师是整个项目的核心角色,需要对项目有全局的把握。

2,项目领导以时间紧、任务急为理由规避系统架构评审的过程。

目前的项目都会在没有经过完整技术评估的情况下,对项目时间进行确认。
根据实践经验,技术评审不会耽搁很长时间,在系统架构师准备充分的情况下,一个小时足矣。
即便是仅持续一周时间的项目,一个小时的技术评审也是能够挤出来的。

没有经过技术评审,技术方案的可行性没有保障。
在实施过程中发现问题后,只能采取掩饰的措施,导致最终产品的可维护性降低。

3,领导没有明确要求进行技术评审。

目前没有制度来明确说明 项目实施过程中需要进行技术评审。

我认为有必要推行技术设计评审制度,系统架构评审的重要意义在于:

1,技术设计公开化,有利于各支持部门了解情况,达到信息对称。

2,避免技术霸权、领导霸权的现象。

3,尽早发现潜在的技术设计缺陷,并尽快修正。

4,技术成员之间取长补短,提高整体团队的技术水平。

技术评审的过程同样是一个技术交流的过程,在这个过程中,如果大家深入交换意见,充分讨论,必将能够收获颇丰。

2010年01月25日

新年书籍推荐

Filed under: 未分类 — 好大的风 @ 10:57 上午

新的一年,总结了一下之前读过的书,有很多值得一读再读,也有不少翻过几页后就昏昏欲睡。
以下是我认为不错的数据库相关的书籍,我迫不及待的想和大家分享。

一,《数据库系统概念》,主要介绍关系数据库理论。

http://www.amazon.cn/mn/detailApp/ref=sr_1_2?_encoding=UTF8&s=books&qid=1264382410&asin=B0011CEY12&sr=8-2

中文版翻译的不错,如果英语水平好,可以读英文版:

http://www.amazon.cn/mn/detailApp/ref=sr_1_4?_encoding=UTF8&s=books&qid=1264382410&asin=B00114NQ8C&sr=8-4

此书对关系数据库的基本概念进行了详细的讲解,包括范式、Btree等。
读此书时可能略觉枯燥,要理论联系实际,反复理解。
之前我对数据库索引为何使用Btree这个复杂的数据结构很是困惑,看完此书相关章节后,豁然开朗。

第五版中英文版国内都已经引进,价格50元左右。
美国Amazon上第六版价格是131.8美元,国内不到10美元的价格算是很便宜了。

http://www.amazon.com/Database-System-Concepts-Abraham-Silberschatz/dp/0073523321/ref=sr_1_1?ie=UTF8&s=books&qid=1264382795&sr=8-1

二,《MySQL 5.1 Reference Manual》,MySQL权威指南。

http://dev.mysql.com/doc/refman/5.1/en/

一定要看在线、英文版,此手册语言浅显,内容充实,包罗万象,结构清晰,还有热心网友的评论补充。
对MySQL的相关应用有任何疑惑,都可以查找此手册的对应章节,其搜索功能也很不错。

在线版本免费浏览,很好的资源,非常推荐经常浏览。
此书适合开发、运维人和任何对MySQL感兴趣的同学仔细研读。

三,《High Performance MySQL 2nd Edition》,进阶参考。

http://www.amazon.cn/mn/detailApp/ref=sr_1_1?_encoding=UTF8&s=books&qid=1264383593&asin=B002BNKSFQ&sr=1-1

此书可谓Bible级别的进阶参考书,书的内容理论联系实际,生动活泼,语言简洁优雅,
当有一定的实践经验后,再读此书,经常不禁为之拍案叫绝。
我经常在晚上睡前诵读此书,每天十页左右,每次都感觉很有收获。

目前只有英文版,强烈推荐英文版,不要等国内的翻译版。
另外,一定要认准是 第二版。
目前国内引进的英文版价格60元左右,美国Amazon价格31美元左右。

四,《Oracle Database Concepts》,Oracle 数据库相关概念。

http://download.oracle.com/docs/cd/E11882_01/server.112/e10713/toc.htm

对于Oracle数据库,我研究还不是很深入,正在努力学习。
这本书对于Oracle的理解很有帮助,深入浅出的讲解了Oracle的各种概念,例如SGA,PGA等。
Oracle的官方文档极其丰富,而且免费。
同样,边看书边实践的效果最好。

五,《How to Become an Exceptional DBA, 2nd Edition》如何成为杰出DBA?

此书我最近正在读,是一本很有煽动性的书,读完每个章节后都会让你有热血沸腾的感觉。
书只有一百多页,语言简炼。
对于DBA职业生涯过程中需要面临的种种问题进行了详细的阐述,积极向上。
我觉得此书不仅仅针对DBA,对于每个希望Exceptional的同学都适用。

以上推荐的书都是我读过并且认为不错的书,希望大家在新的一年多读书,读好书。
一本好书带来的自身价值提升,远远比它的价格要高的多。

Powered by WordPress