這份投影片「Performance Tuning EC2 Instances」講了不少 Netflix 在 EC2 上各種調校的經驗。
有些比較一般性,可以用在實體機器上,另外還有一些是在 vm 裡的調校。
幹壞事是進步最大的原動力
這份投影片「Performance Tuning EC2 Instances」講了不少 Netflix 在 EC2 上各種調校的經驗。
有些比較一般性,可以用在實體機器上,另外還有一些是在 vm 裡的調校。
Oracle 的梶山隆輔在 COSCUP 2014 的投影片:「MySQL Performance Tuning at COSCUP 2014」:
推薦的主力在 MySQL 5.6,這點 Percona 的人也已經宣傳過很多次了:
MySQL 5.6 的改善很大,尤其是針對 InnoDB 相關的改善。在 MySQL 5.5 上還會有 CPU 吃不滿的情況,在 MySQL 5.6 好很多。
Percona 的人針對 Linux 平台跑 MySQL 的建議:「Linux performance tuning tips for MySQL」。
檔案系統方面建議用 ext4 或是 xfs,記得要用 noatime
。(我建議再加上 nodiratime
)
然後 i/o schedular 建議用 deadline 或是 noop,這點可以參考之前寫的「關於 Linux 的 Disk I/O 調整...」。
記憶體的部份要處理 swap 與 NUMA 的控制,然後 CPU 的部份要把自動調整速度的功能關掉 (可以省電,不過對忙碌的資料庫應該用不到)。
看起來是比較一般性的方向,不過應該是蠻好用的建議 :p
在 Zite 上看到這篇介紹 MySQL 效能調教的方式:「Ten ways to improve the performance of large tables in MySQL」。
這邊就順著作者的建議一路寫下去。
作者也是大力推薦用 InnoDB 解決問題。
InnoDB 有個特別的功能 (相較於 MyISAM 而言。這個功能在 MySQL 5.5 預設就是開啟的) 是 change buffering,會延遲寫入 non-unique secondary index,讓多筆 secondary index 合併起來一起寫,這會改善寫入的效能。
Partition 對於 index 的大小也會有幫助。InnoDB 的壓縮功能也是必備項目 (除非你的 Use case 很極端),減少資料量就直接減少 i/o 並且拉高 hitrate。
再大量寫入資料時依照順序寫入會讓 InnoDB 寫入的順序僅可能連續。由於 InnoDB 的特性 (clustered index),這樣可以讓寫入速度變快很多。
避免使用 UNIQUE key,因為 UNIQUE 的特性會犧牲很多效能...
因為 secondary index 是指到 PRIMARY KEY 的值,所以 PRIMARY KEY 的值僅可能單純,以 INT 或是 BIGINT 為佳。
第一次大量倒資料進系統時,可以先倒 data 以及 PRIMARY KEY 就好 (如上所說的,要依照 PRIMARY KEY 的順序倒進去),等倒完後再建立 secondary index,這樣速度會快很多。
最後兩項就是,記憶體愈大愈好,硬碟愈快愈好,如果用 SSD 是可行的方案就用 :p
2007 年的「Innodb Performance Optimization Basics」這篇是以當時的環境寫的 (MySQL 5.0)。過了六年,出了 MySQL 5.1、5.5,目前新版是 5.6。
於是就冒出這篇 2013 年版:「InnoDB performance optimization basics (updated)」。
主要是新的科技與技術讓 InnoDB 有更多選擇可以用。SSD 的發明讓 i/o 效率更好,而檔案系統的改善使得 ext4 開始被大家接受。
另外 InnoDB 自己的改善也能夠充分發揮現代硬體的能力,尤其是對多核心的延展能力。
這篇該講的都有講到,文末雖然打自家廣告推薦 Percona Server with XtraDB,不過這的確是個好東西。
先前在「Percona 要講進階的 MySQL Query Tuning...」提到 Percona 所辦的 Webniar「Advanced MySQL Query Tuning」的投影片放出來了:「Advanced MySQL Query Tuning」。
這份內容需要 B+Tree 操作的背景知識才能了解。裡面講了很多 GROUP BY
與 ORDER BY
混用時的 index 技巧,以及各種奇怪的 hack 方式。
內容很有用,能吸收多少就看個人造化 :p
看到「MySQL Webinar: Advanced Query Tuning」這個 Webinar,要講的主題看起來不賴:
1. GROUP BY and ORDER BY optimization
2. MySQL temporary tables and filesort
3. Using covered indexes to optimize your queries
4. Loose and tight index scans in MySQL
事後花時間來看投影片應該就夠了 :p