from: http://blog.sina.com.cn/s/blog_3fc85e260100qwv8.html
磁盘随机
IO
性能常常是数据库性能的决定因素,即使是
15000RPM
的
SAS
盘,单盘也很难超过
300IOPS
,对于传统关系数据库,磁盘随机
IO
是个多年的老大难问题,目前尚无令人满意的解决方案,风轻扬的博客
(
数据库如何抵抗随机
IO
:问题、方法与现实,
http://wangyuanzju.blog.163.com/blog/static/13029201132154010987/
)
一文中提到了一些关于此问题进展。
与传统磁盘相比,
SSD
固态盘提供了非常好的随机读性能,单盘可达
35000IOPS (4KB)
甚至更高,并提供
512MB/s
或以上的读出带宽。但通常
SSD
盘的随机写性能甚至比一般磁盘更差,这是因为,尽管
SSD
的读和写都以
4KB
页
(page)
为单位,但
SSD
写入前需要先擦除已有内容,而擦除以块
(block)
为单位,一个块
(block)
通常是
128
个连续的页
(page)
,即
512KB
。假如写入的页
(page)
内有内容,即使是写入一个字节,
SSD
也需要把整个
128
页
(512KB)
内容先读到内存,与要写入的内容融合,擦除这
128
页所在的块
(block)
,然后再重新写入整个
512KB
数据,这就是
SSD
盘的写入放到效应。
(
图片来自于“
SSD
的写入放大
- Write
amplification
”,
http://iqalantam.blog.163.com/blog/static/5393552201121481111304/)
假设每次随机写入
1KB
,即便
SSD
能够提供
1K
次
/
秒的随机写入能力,根据上面的分析,对应的写入放大将把
SSD
的
512MB/s
的读出带宽全部消耗掉,也就是说,这种情况下,
SSD
已经无法提供读服务。因此,在传统关系数据库中,普通
SSD
难以获得令人满意的性能。
淘宝海量数据库
OceanBase
采用与经典关系数据库不同的设计:
OceanBase既
实现了增删改在内的跨行跨表写事务,又完全摒弃了随机写,除了操作日志
(commit log)
总是顺序追加写入到普通
SAS
盘上,剩下的写请求就是对响应时间要求不是很高的批量顺序写,
SSD
盘完全可以轻松应对,而许多响应查询请求的随机读,更可以充分发挥
SSD
良好的随机读性能
。
从测试结果来看,
OceanBase
在一台装有多块
SSD
盘的服务器上获得了数万
QPS
的查询性能
(
大约是所有
SSD
盘的聚合
QPS
的
40%
左右,因此还有提升空间
)
,这使得一台装备
SSD
盘的服务器可以提供
5-10
台同样配置但装备
15000RPM SAS
盘的服务器。尽管
SSD
盘大约是同样容量的
SAS
盘价格的
3~4
倍,在
OceanBase
数据库环境下,由于机器数量的大幅度减少,不仅机器采购成本降低了,机架、网络带宽等运维费用更是大幅度降低,总体成本也降低很多。
此外,由于
SSD
盘的功耗
(
约
0.06W-3.5W)
明显低于
SAS
盘
(12W-15W
,
3.5”)
,因此能源消耗的降低更多。