1. 默認存儲引擎更改為InnoDB
InnoDB作為成熟、高效的事務引擎,目前已經廣泛使用,但MySQL5.1之前的版本默認引擎均為MyISAM,此次MySQL5.5終於做到與時俱進,將默認數據庫存儲引擎改為InnoDB,並且引進了Innodb plugin 1.0.7。此次更新對數據庫的好處是顯而易見的:InnoDB的數據恢復時間從過去的一個甚至幾個小時,縮短到幾分鐘(InnoDB plugin 1.0.7,InnoDB plugin 1.1, 恢復時采用紅-黑樹)。InnoDB Plugin 支持數據壓縮存儲,節約存儲,提高內存命中率,並且支持adaptive flush checkpoint, 可以在某些場合避免數據庫出現突發性能瓶頸。
Multi Rollback Segments: 原來InnoDB只有一個Segment,同時只支持1023的並發。現已擴充到128個Segments,從而解決了高並發的限制。
2. 多核性能提升
Metadata Locking (MDL) Framework替換LOCK_open mutex (lock),使得MySQL5.1及過去版本在多核心處理器上的性能瓶頸得到解決,官方表示將繼續增強對MySQL多處理器支持,直至MySQL性能“不受處理器數量的限制”
3. 復制功能(Replication)加強
MySQL復制特性是互聯網公司應用非常廣泛的特性,作為MySQL最實用最簡單的擴展方式,過去的異步復制方式已經有些不上形勢,對某些用戶來說“異步復制”意味著極端情況下的數據風險,MySQL5.5將首次支持半同步(semi-sync replication)在MySQL的高可用方案中將產生更多更加可靠的方案。另外Slave fsync tunning;Relay log corruption recovery和Replication Heartbeat也將實現。
4. 增強表分區功能
MySQL 5.5的分區對用戶絕對是個好消息,更易於使用的增強功能,以及TRUNCATE PARTITION命令都可以為DBA節省大量的時間,有時對最終用戶亦如此:
1) 非整數列分區:任何使用過MySQL分區的人應該都遇到過不少問題,特別是面對非整數列分區時,MySQL 5.1只能處理整數列分區,如果你想在日期或字符串列上進行分區,你不得不使用函數對其進行轉換。很麻煩,而MySQL 5.5中新增了兩類分區方法,RANG和LIST分區法,同時在新的函數中增加了一個COLUMNS關鍵詞。在MySQL 5.1中使用分區另一個讓人頭痛的問題是date類型(即日期列),你不能直接使用它們,必須使用YEAR或TO_DAYS轉換這些列,但在MySQL 5.5中情況發生了很大的變化,現在在日期列上可以直接分區,並且方法也很簡單;
2) 多列分區:COLUMNS關鍵字現在允許字符串和日期列作為分區定義列,同時還允許使用多個列定義一個分區;
3) 可用性增強:truncate分區。分區最吸引人的一個功能是瞬間移除大量記錄的能力,DBA都喜歡將歷史記錄存儲到按日期分區的分區表中,這樣可以定期刪除過時的歷史數據。 但當你需要移除分區中的部分數據時,事情就不是那麼簡單了,刪除分區沒有問題,但如果是清空分區,就很頭痛了,要移除分區中的所有數據,但需要保留分區本身,你可以:使用DELETE語句,但我們知道DELETE語句的性能都很差。使用DROP PARTITION語句,緊跟著一個EORGANIZE PARTITIONS語句重新創建分區,但這樣做比前一個方法的成本要高出許多。MySQL 5.5引入了TRUNCATE PARTITION,它和DROP PARTITION語句有些類似,但它保留了分區本身,也就是說分區還可以重復利用。TRUNCATE PARTITION應該是DBA工具箱中的必備工具;
4) 更多微調功能:TO_SECONDS:分區增強包有一個新的函數處理DATE和DATETIME列,使用TO_SECONDS函數,你可以將日期/時間列轉換成自0年以來的秒數,如果你想使用小於1天的間隔進行分區,那麼這個函數就可以幫到你。
5. Insert Buffering 如果在buffer pool中沒找到數據,那麼直接buffer起來,避免額外的IO;Delete & Purge Buffering 跟插入一樣,如果buffer pool中沒有命中,先buffer起來,避免額外的IO。
6. Support for Native AIO on Linux