
相较于IDE机械硬盘,SSD固态硬盘具有IO速度快、频率高的优点,非常适合存放Oracle数据库在线日志。但在Oracle官方文档中,又明确建议不要在SSD上存放在线日志,这是为什么呢?如何才能有效使用SSD提升数据库的速度?

在IT硬件生态中,核心的要素像CPU、内存,近些年无论是在性能还是质量上都已经有了大步的跨越,唯独在存储领域中仍然没有太大的提升。数据库系统中,对性能影响最为深远的莫过于存储了。也就是因为这个原因,近些年市面上出现了不少的内存数据库。本质上,这是试图使用内存来减少IO的压力,并提升系统性能。
近些年,出现了SSD固态硬盘。与传统的IDE机械硬盘相比,SSD固态硬盘具有IO速度快、频率高的优点。就目前来说,它的价格整体上偏高,还不适合在数据库存储中大规模的使用,这是其一。如果你是土豪,从来不差钱,从DBA的角度讲,也不建议大规模使用固态硬盘。毕竟,生产数据库数据安全第一,做小白鼠总归让人觉得心里不踏实。
在Oracle数据库中,有三种关于存储使用的场景,即数据文件存储、在线日志存储以及备份数据存储。这三种数据对存储的要求也不尽相同,数据文件存储强调性能和稳定、在线日志存储极度强调性能而备份数据存储只强调稳定就可以了。SSD的出现让我们看到使用SSD改善数据库性能瓶颈的一丝光明,尤其是在OLTP系统中。SSD表现出来的IO速度快、频率高的特性正是在线日志所极其需要的。我曾经经历过一个生产系统,在高峰时间段,数据库中近50%的等待都与日志的写入或切换有关。如果使用SSD作为在线日志的存储,这里的50%是完全可能不存在的。换言之,使用一块并不太大的SSD存储,就可以将系统性能提升50%,确实可以称得上是性价比非常高的一项改造。
然而,在Oracle官网MOS的文档中(文档 ID 1376916.1),它明确写道:
Do not putredo logs on Solid State Disk (SSD)
Althoughgenerally, Solid State Disks write performance is good on average, they mayendure write peaks which will highly increase waits on 'log file sync'. (Youmay want to test this, as there are cases where performance is acceptable onSSD)
意思大义是,SSD挺好,但你不要用。Oracle的官网文档并没有解释为什么不建议使用,这其实与SSD本身的特性有关。SSD固态硬盘闪存具有擦写次数限制的问题,这也是许多人诟病其寿命短的所在。闪存在写入数据时,使用的是FIFO轮循算法。闪存完全擦写一次叫做1次P/E,因此闪存的寿命就以P/E作单位。34nm的闪存芯片寿命约是5000次P/E,而25nm的寿命约是3000次P/E。
那么问题来了,到底用是不用?结论是,其实可以用。
首先,你需要估算出你当前系统每天产生的日志量。以100G大小的SSD存储来说,若每天产生50G在线日志,那就是每两天进行一次P/E。若每天产生100G在线日志,那就是每天进行一次P/E。
以一个3000次P/E寿命的SSD来说,足够支撑近10年时间了。其次,即便SSD的寿命到期了,想要更换也特别简单。日志数据是轮循覆盖写入的,不存在数据迁移的工作,只需要手工进行简单的切换即可。
由此,我们可以看出,只要进行合理的分析,使用SSD来提升数据库性能是一件事半功倍,投入小产出大的事情。MOS的权威固然需要正视,但只有正确理解才能为我所用。
欢迎关注公众号

欢迎关注微信号





