淘寶海量數(shù)據(jù)庫之克服隨機(jī)IO難題
磁盤隨機(jī) IO 性能常常是數(shù)據(jù)庫性能的決定因素,即使是 15000RPM 的 SAS 盤,單盤也很難超過 300IOPS ,對于傳統(tǒng)關(guān)系數(shù)據(jù)庫,磁盤隨機(jī) IO 是個多年的老大難問題,目前尚無令人滿意的解決方案,數(shù)據(jù)庫如何抵抗隨機(jī)IO的問題、方法與現(xiàn)實一文中提到了一些關(guān)于此問題進(jìn)展。
與傳統(tǒng)磁盤相比, SSD 固態(tài)盤提供了非常好的隨機(jī)讀性能,單盤可達(dá) 35000IOPS (4KB) 甚至更高,并提供 512MB/s 或以上的讀出帶寬。但通常 SSD 盤的隨機(jī)寫性能甚至比一般磁盤更差,這是因為,盡管 SSD 的讀和寫都以 4KB 頁 (page) 為單位,但 SSD 寫入前需要先擦除已有內(nèi)容,而擦除以塊 (block) 為單位,一個塊 (block) 通常是 128 個連續(xù)的頁 (page) ,即 512KB 。假如寫入的頁 (page) 內(nèi)有內(nèi)容,即使是寫入一個字節(jié), SSD 也需要把整個 128 頁 (512KB) 內(nèi)容先讀到內(nèi)存,與要寫入的內(nèi)容融合,擦除這 128 頁所在的塊 (block) ,然后再重新寫入整個 512KB 數(shù)據(jù),這就是 SSD 盤的寫入放到效應(yīng)。
“ SSD 的寫入放大 - Write amplification ”
假設(shè)每次隨機(jī)寫入 1KB ,即便 SSD 能夠提供 1K 次 / 秒的隨機(jī)寫入能力,根據(jù)上面的分析,對應(yīng)的寫入放大將把 SSD 的 512MB/s 的讀出帶寬全部消耗掉,也就是說,這種情況下, SSD 已經(jīng)無法提供讀服務(wù)。因此,在傳統(tǒng)關(guān)系數(shù)據(jù)庫中,普通 SSD 難以獲得令人滿意的性能。
淘寶海量數(shù)據(jù)庫 OceanBase 采用與經(jīng)典關(guān)系數(shù)據(jù)庫不同的設(shè)計: OceanBase既 實現(xiàn)了增刪改在內(nèi)的跨行跨表寫事務(wù),又完全摒棄了隨機(jī)寫,除了操作日志 (commit log) 總是順序追加寫入到普通 SAS 盤上,剩下的寫請求就是對響應(yīng)時間要求不是很高的批量順序?qū)懀?SSD 盤完全可以輕松應(yīng)對,而許多響應(yīng)查詢請求的隨機(jī)讀,更可以充分發(fā)揮 SSD 良好的隨機(jī)讀性能 。
從測試結(jié)果來看, OceanBase 在一臺裝有多塊 SSD 盤的服務(wù)器上獲得了數(shù)萬 QPS 的查詢性能 ( 大約是所有 SSD 盤的聚合 QPS 的 40% 左右,因此還有提升空間 ) ,這使得一臺裝備 SSD 盤的服務(wù)器可以提供 5-10 臺同樣配置但裝備 15000RPM SAS 盤的服務(wù)器。盡管 SSD 盤大約是同樣容量的 SAS 盤價格的 3~4 倍,在 OceanBase 數(shù)據(jù)庫環(huán)境下,由于機(jī)器數(shù)量的大幅度減少,不僅機(jī)器采購成本降低了,機(jī)架、網(wǎng)絡(luò)帶寬等運維費用更是大幅度降低,總體成本也降低很多。
此外,由于 SSD 盤的功耗 ( 約 0.06W-3.5W) 明顯低于 SAS 盤 (12W-15W , 3.5”) ,因此能源消耗的降低更多。
【編輯推薦】
- 數(shù)據(jù)庫如何抵抗隨機(jī)IO的問題、方法與現(xiàn)實
- 一步一步設(shè)計你的數(shù)據(jù)庫之不可輕視的需求分析
- 養(yǎng)成一個SQL好習(xí)慣帶來一筆大財富
- MySQL中創(chuàng)建及優(yōu)化索引組織結(jié)構(gòu)的思路