成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

基于SSD固態硬盤的數據庫性能優化

數據庫
今天我們要介紹的數據庫性能優化方法,是SSD固態硬盤的優化手段,希望對大家有所幫助。

NOR和NAND

NOR和NAND都是閃存技術的一種,NOR是Intel公司開發的,它有點類似于內存,允許通過地址直接訪問任何一個內存單元,缺點是:密度低(容量?。?,寫入和擦除的速度很慢。NAND是東芝公司開發的,它密度高(容量大),寫入和擦除的速度都很快,但是必須通過特定的IO接口經過地址轉換之后才可以訪問,有些類似于磁盤。

我們現在廣泛使用的U盤,SD卡,SSD都屬于NAND類型,廠商將flash memory封裝成為不同的接口,比如Intel的SSD就是采用了SATA的接口,訪問與普通SATA磁盤一樣,還有一些企業級的閃存卡,比如FusionIO,則封裝為PCIe接口。

SLC和MLC

SLC是單極單元,MLC是多級單元,兩者的差異在于每單元存儲的數據量(密度),SLC每單元只存儲一位,只包含0和1兩個電壓符,MLC每單元可以存儲兩位,包含四個電壓符(00,01,10,11)。顯然,MLC的存儲容量比SLC大,但是SLC更簡單可靠,SLC讀取和寫入的速度都比MLC更快,而且SLC比MLC更耐用,MLC每單元可擦除1w次,而SLC可擦除10w次,所以,企業級的閃存產品一般都選用SLC,這也是為什么企業級產品比家用產品貴很多的原因。

SSD的技術特點

SSD與傳統磁盤相比,***是沒有機械裝置,第二是由磁介質改為了電介質。在SSD內部有一個FTL(Flash Transalation Layer),它相當于磁盤中的控制器,主要功能就是作地址映射,將flash memory的物理地址映射為磁盤的LBA邏輯地址,并提供給OS作透明訪問。

SSD沒有傳統磁盤的尋道時間和延遲時間,所以SSD可以提供非常高的隨機讀取能力,這是它的***優勢,SLC類型的SSD通??梢蕴峁┏^35000的IOPS,傳統15k的SAS磁盤,最多也只能達到160個IOPS,這對于傳統磁盤來說幾乎就是個天文數字。SSD連續讀的能力相比普通磁盤優勢并不明顯,因為連續讀對于傳統磁盤來說,并不需要尋道時間,15k的SAS磁盤,連續讀的吞吐能力可以達到130MB,而SLC類型的SSD可以達到170-200MB,我們看到在吞吐量方面,SSD雖然比傳統磁盤高一些,但優勢雖然并不明顯。

SSD的寫操作比較特殊,SSD的最小寫入單元為4KB,稱為頁(page),當寫入空白位置時可以按照4KB的單位寫入,但是如果需要改寫某個單元時,則需要一個額外的擦除(erase)動作,擦除的單位一般是128個page(512KB),每個擦除單元稱為塊(block)。如果向一個空白的page寫入信息時,可以直接寫入而無需擦除,但是如果需要改寫某個存儲單元(page)的數據,必須首先將整個block讀入緩存,然后修改數據,并擦除整個block的數據,***將整個block寫入,很顯然,SSD改寫數據的代價很高,SSD的這個特性,我們稱之為erase-before-write。

經過測試,SLC SSD的隨即寫性能可以達到3000個左右的IOPS,連續寫的吞吐量可以達到170MB,這個數據還是比傳統磁盤高出不少。但是,隨著SSD的不斷寫入,當越來越多的數據需要被改寫時,寫的性能就會逐步下降。經過我們的測試,SLC在這個方面要明顯好于MLC,在長時間寫入后,MLC隨機寫IO下降得非常厲害,而SLC表現則比較穩定。為了解決這個問題,各個廠商都有很多策略來防止寫性能下降的問題。

wear leveling

因為SSD存在“寫磨損”的問題,當某個單元長時間被反復擦寫時(比如Oracle redo),不僅會造成寫入的性能問題,而且會大大縮短SSD的使用壽命,所以必須設計一個均衡負載的算法來保證SSD的每個單元能夠被均衡的使用,這就是wear leveling,稱為損耗均衡算法。

Wear leveling也是SSD內部的FTL實現的,它通過數據遷移來達到均衡損耗的目的。Wear leveling依賴于SSD中的一部分保留空間,基本原理是在SSD中設置了兩個block pool,一個是free block pool(空閑池),一個是數據池(data block pool),當需要改寫某個page時(如果寫入原有位置,必須先擦除整個block,然后才能寫入數據),并不寫入原有位置(不需要擦除的動作),而是從空閑池中取出新的block,將現有的數據和需要改寫的數據合并為新的block,一起寫入新的空白block,原有的block被標識為invalid狀態(等待被擦除回收),新的block則進入數據池。后臺任務會定時從data block中取出無效數據的block,擦除后回收到空閑池中。這樣做的好處在于,一是不會反復擦寫同一個block,二是寫入的速度會比較快(省略了擦除的動作)。

Wear leveling分為兩種:動態損耗均衡和靜態損耗均衡,兩者的原理一致,區別在于動態算法只會處理動態數據,比如數據改寫時才會觸發數據遷移的動作,對靜態數據不起作用,而靜態算法可以均衡靜態數據,當后臺任務發現損耗很低的靜態數據塊時,將其遷移到其他數據庫塊上,將這些塊放入空閑池中使用。從均衡的效果來看,靜態算法要好于動態算法,因為幾乎所有的block都可以被均衡的使用,SSD的壽命會大大延長,但是靜態算法的缺點是當數據遷移時,可能會導致寫性能下降。

寫入放大

因為SSD的erase-before-write的特性,所以就出現了一個寫入放大的概念,比如你想改寫4K的數據,必須首先將整個擦除塊(512KB)中的數據讀出到緩存中,改寫后,將整個塊一起寫入,這時你實際寫入了512KB的數據,寫入放大系數是128。寫入放大***的情況是1,就是不存在放大的情況。

Wear leveling算法可以有效緩解寫入放大的問題,但是不合理的算法依然會導致寫入放大,比如用戶需要寫入4k數據時,發現free block pool中沒有空白的block,這時就必須在data block pool中選擇一個包含無效數據的block,先讀入緩存中,改寫后,將整個塊一起寫入,采用wear leveling算法依然會存在寫入放大的問題。

通過為SSD預留更多空間,可以顯著緩解寫入放大導致的性能問題。根據我們的測試結果,MLC SSD在長時間的隨機寫入后,性能下降很明顯(隨機寫IOPS甚至降低到300)。如果為wear leveling預留更多空間,就可以顯著改善MLC SSD在長時間寫操作之后的性能下降問題,而且保留的空間越多,性能提升就越明顯。相比較而言,SLC SSD的性能要穩定很多(IOPS在長時間隨機寫后,隨機寫可以穩定在3000 IOPS),我想應該是SLC SSD的容量通常比較?。?2G和64G),而用于wear leveling的空間又比較大的原因。

數據庫IO特點分析

IO有四種類型:連續讀,隨機讀,隨機寫和連續寫,連續讀寫的IO size通常比較大(128KB-1MB),主要衡量吞吐量,而隨機讀寫的IO size比較小(小于8KB),主要衡量IOPS和響應時間。數據庫中的全表掃描是連續讀IO,索引訪問則是典型的隨機讀IO,日志文件是連續寫IO,而數據文件則是隨機寫IO。

數據庫系統基于傳統磁盤訪問特性來設計,***特點是日志文件采用sequential logging,數據庫中的日志文件,要求必須在事務提交時寫入到磁盤,對響應時間的要求很高,所以設計為順序寫入的方式,可以有效降低磁盤尋道花費的時間,減少延遲時間。日志文件的順序寫入,雖然是物理位置是連續的,但是并不同于傳統的連續寫類型,日志文件的IO size很小(通常小于4K),每個IO之間是獨立的(磁頭必須抬起來重新尋道,并等待磁盤轉動到相應的位置),而且間隔很短,數據庫通過log buffer(緩存)和group commit的方式(批量提交)來達到提高IO size的大小,并減少IO的次數,從而得到更小的響應延遲,所以日志文件的順序寫入可以被認為是“連續位置的隨機寫入”,更關注IOPS,而不是吞吐量。

數據文件采用in place uddate的方式,意思是數據文件的修改都是寫入到原來的位置,數據文件不同于日志文件,并不會在事務commit時寫入數據文件,只有當數據庫發現dirty buffer過多或者需要做checkpoint動作時,才會刷新這些dirty buffer到相應的位置,這是一個異步的過程,通常情況下,數據文件的隨機寫入對IO的要求并不是特別高,只要滿足checkpoint和dirty buffer的要求就可以了。

SSD的IO特點分析

1.隨機讀能力非常好,連續讀性能一般,但比普通SAS磁盤好。

2.不存在磁盤尋道的延遲時間,隨機寫和連續寫的響應延遲差異不大。

3.erase-before-write特性,造成寫入放大,影響寫入的性能。

4.寫磨損特性,采用wear leveling算法延長壽命,但同時會影響讀的性能。

5.讀和寫的IO響應延遲不對等(讀要大大好于寫),而普通磁盤讀和寫的IO響應延遲差異很小。

6.連續寫比隨機寫性能好,比如1M順序寫比128個8K的隨即寫要好很多,因為隨即寫會帶來大量的擦除。

基于SSD的上述特性,如果將數據庫全部放在SSD上,可能會有以下的問題:

1.日志文件sequential logging會反復擦寫同一位置,雖然有損耗均衡算法,但是長時間寫入依然會導致性能下降。

2.數據文件in place update會產生大量的隨機寫入,erase-before-write會產生寫入放大。

3.數據庫讀寫混合型應用,存在大量的隨機寫入,同時會影響讀的性能,產生大量的IO延遲。

基于SSD的數據庫優化法則

基于SSD的優化就是解決erase-before-write產生的寫入放大的問題,不同類型的IO分離,減少寫操作帶來的性能影響。

1.將sequential logging修改為In-page logging,避免對相同位置的反復擦寫。

2.通過緩存寫入的方式將大量的in-place update隨機寫入合并為少量順序寫入。

3.利用SSD隨機讀寫能力高的特點,減少寫增加讀,從而達到整體性能的提升。

In-page logging

In-page logging是基于SSD對數據庫sequential logging的一種優化方法,數據庫中的sequential logging對傳統磁盤是非常有利的,可以大大提高響應時間,但是對于SSD就是噩夢,因為需要對同一位置反復擦寫,而wear leveling算法雖然可以平衡負載,但是依然會影響性能,并產生大量的IO延遲。所以In-page logging將日志和數據合并,將日志順序寫入改為隨機寫入,基于SSD對隨機寫和連續寫IO響應延遲差異不大的特性,避免對同一位置反復擦寫,提高整體性能。

In-page logging基本原理:在data buffer中,有一個in-memory log sector的結構,類似于log buffer,每個log sector是與data block對應的。在data buffer中,data和log并不合并,只是在data block和log sector之間建立了對應關系,可以將某個data block的log分離出來。但是,在SSD底層的flash memory中,數據和日志是存放在同一個block(擦除單元),每個block都包含data page和log page。

當日志信息需要寫入的時候(log buffer空間不足或者事務提交),日志信息會寫入到flash memory對應的block中,也就是說日志信息是分布在很多不同的block中的,而每個block內的日志信息是append write,所以不需要擦除的動作。當某個block中的log sector寫滿的時候,這時會發生一個動作,將整個block中的信息讀出,然后應用block中的log sector,就可以得到***的數據,然后整個block寫入,這時,block中的log sector是空白的。

在in-page logging方法中,data buffer中的dirty block是不需要寫入到flash memory中的,就算dirty buffer需要被交換出去,也不需要將它們寫入flash memory中。當需要讀取***的數據,只要將block中的數據和日志信息合并,就可以得到***的數據。

In-page logging方法,將日志和數據放在同一個擦除單元內,減少了對flash相同位置的反復擦寫,而且不需要將dirty block寫入到flash中,大量減少了in-place update的隨機寫入和擦除的動作。雖然在讀取時,需要做一個merge的操作,但是因為數據和日志存放在一起,而且SSD的隨機讀取能力很高,in-page logging可以提高整體的性能。

SSD作為寫cache-append write
 

SSD可以作為磁盤的寫cache,因為SSD連續寫比隨機寫性能好,比如:1M順序寫比128個8K的隨機寫要好很多,我們可以將大量隨機寫合并成為少量順序寫,增加IO的大小,減少IO(擦除)的次數,提高寫入性能。這個方法與很多NoSQL產品的append write類似,即不改寫數據,只追加數據,需要時做合并處理。

基本原理:當dirty block需要寫入到數據文件時,并不直接更新原來的數據文件,而是首先進行IO合并,將很多個8K的dirty block合并為一個512KB的寫入單元,并采用append write的方式寫入到一個cache file中(保存在SSD上),避免了擦除的動作,提高了寫入性能。cache file中的數據采用循環的方式順序寫入,當cache file空間不足夠時,后臺進程會將cache file中的數據寫入到真正的數據文件中(保存在磁盤上),這時進行第二次IO合并,將cache file內的數據進行合并,整合成為少量的順序寫入,對于磁盤來說,最終的IO是1M的順序寫入,順序寫入只會影響吞吐量,而磁盤的吞吐量不會成為瓶頸,將IOPS的瓶頸轉化為吞吐量的瓶頸,從而提升了整體系統能力。

讀取數據時,必須首先讀取cache file,而cache file中的數據是無序存放的,為了快速檢索cache file中的數據,一般會在內存中為cache file建立一個索引,讀取數據時會先查詢這個索引,如果命中查詢cache file,如果沒有命中,再讀取data file(普通磁盤),所以,這種方法實際不僅僅是寫cache,同時也起到了讀cache的作用。

但是這種方法并不適合日志文件的寫cache,雖然日志文件也是append write,但是因為日志文件的IO size比較小,而且必須同步寫入,無法做合并處理,所以性能提升有限。

SSD作為讀cache-flashcache

因為大部分數據庫都是讀多寫少的類型,所以SSD作為數據庫flashcache是優化方案中最簡單的一種,它可以充分利用SSD讀性能的優勢,又避免了SSD寫入的性能問題。實現的方法有很多種,可以在讀取數據時,將數據同時寫入SSD,也可以在數據被刷出buffer時,寫入到SSD。讀取數據時,首先在buffer中查詢,然后在flashcache中查詢,***讀取datafile。

SSD作為flashcache與memcache作為數據庫外部cache的***區別在于,SSD掉電后數據是不丟失的,這也引起了另外一個思考,當數據庫發生故障重啟后,flashcache中的數據是有效還是無效?如果是有效的,那么就必須時刻保證flashcache中數據的一致性,如果是無效的,那么flashcache同樣面臨一個預熱的問題(這與memcache掉電后的問題一樣)。目前,據我所知,基本上都認為是無效的,因為要保持flashcache中數據的一致性,非常困難。

flashcache作為內存和磁盤之間的二級cache,除了性能的提升以外,從成本的角度看,SSD的價格介于memory和disk之間,作為兩者之間的一層cache,可以在性能和價格之間找到平衡。

總結

隨著SSD價格不斷降低,容量和性能不斷提升,SSD取代磁盤只是個時間問題。

原文鏈接:http://www.hellodba.net/2010/10/ssd-database-2.html

【編輯推薦】

  1. MySQL游標的使用筆記大全
  2. 對MySQL 存儲過程中亂碼的破解
  3. MySQL數據庫性能優化的實際操作方案
  4. MySQL備份之根據表備份概述
  5. MySQL臨時表的實際應用功能簡介
責任編輯:彭凡 來源: Hello DBA
相關推薦

2018-06-08 14:31:11

固態硬盤SSD

2023-06-28 09:48:51

SSD存儲

2018-09-05 12:10:07

固態硬盤SSD

2009-09-08 08:21:46

Windows 7固態硬盤

2021-02-04 11:59:10

硬盤SSD數據

2019-12-24 15:16:16

SSD固態硬盤CPU

2017-06-15 12:05:18

2018-03-19 09:35:24

機械硬盤固態硬盤混合硬盤

2024-10-30 09:42:43

固態硬盤SSD閃存

2018-09-18 10:29:44

SSD固態硬盤

2012-06-18 10:29:31

英特爾SSD硬盤

2018-11-26 14:55:33

固態硬盤SSD選購

2018-11-08 11:23:13

SSD固態硬盤

2021-07-01 10:45:08

硬盤數據庫性能

2013-09-17 10:32:08

Android性能優化數據庫

2018-11-05 12:15:46

固態硬盤AHCI

2011-05-20 10:30:20

ORACLE數據庫性能優化

2011-05-18 09:39:19

Oracle數據庫性能優化

2018-06-21 08:48:55

SSDNAND閃存

2021-01-31 17:50:41

數據庫查詢程序員
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美极品一区二区 | 亚洲国产精品一区二区久久 | 国产精品视频免费看 | 国产精品高潮呻吟久久av黑人 | 毛片免费在线 | 亚洲成在线观看 | 成人做爰www免费看视频网站 | 高清国产午夜精品久久久久久 | 亚洲欧美中文日韩在线v日本 | 精区3d动漫一品二品精区 | 亚洲区一 | 三级在线观看 | 欧美成人精品一区二区男人看 | a久久| 免费看黄视频网站 | www.av7788.com| 天堂网中文 | 一级做a爰片性色毛片 | 日日摸日日添日日躁av | 国产精品免费一区二区三区四区 | 色资源站| av免费网| 97国产精品视频人人做人人爱 | 国产精品福利网站 | 国产精品一区在线观看 | 亚洲国产精久久久久久久 | 亚洲精品一二三 | 成年人免费在线视频 | 国产日产精品一区二区三区四区 | 午夜影院在线观看免费 | 久久久久国产精品一区二区 | 99精品99| 成人av免费 | 久久精品成人 | 国产毛片久久久 | 一区二区在线不卡 | 亚洲欧美另类在线观看 | 欧美在线视频网站 | 国产高清精品一区二区三区 | 午夜精品一区二区三区在线视频 | 亚洲精品日韩一区二区电影 |