數(shù)據(jù)庫的性能取決于很多因素稠歉,比如:表,查詢续捂,和配置垦垂。配置就是最簡單的算法,用于調整程序邏輯牙瓢,以便適應更多場景劫拗。優(yōu)化主要從如下幾個方面進行:
- 硬件層面
- 數(shù)據(jù)庫層面
- 可移植和性能的平衡
硬件層面
隨著數(shù)據(jù)庫的越來越忙碌,任何一個數(shù)據(jù)庫應用最終會受到硬件的制約矾克。一個DBA一定要評估是否可以通過調整應用或者重新配置服務器來避免瓶頸杨幼,是否需要更多硬件資源。系統(tǒng)瓶頸一般有如下幾個來源:
磁盤尋址
磁盤上尋找一塊數(shù)據(jù)的時間聂渊。在現(xiàn)在的磁盤中差购,平均時間通常小于10ms,所以我們可以尋找100次在1s內汉嗽。這個時間對于新磁盤有小幅度提高欲逃,對單表的優(yōu)化非常難。優(yōu)化尋找數(shù)據(jù)的時間是將數(shù)據(jù)分布到多個磁盤饼暑。磁盤讀寫
當磁盤到達正確的位置稳析,我們需要讀寫數(shù)據(jù)。現(xiàn)在磁盤中弓叛,一個磁盤吞吐至少10-20MB/S彰居。你可以通過并行讀取多個磁盤。CPU周期
當數(shù)據(jù)在內存的時候撰筷,我們?yōu)榱说玫浇Y果來處理數(shù)據(jù)陈惰。大量的大表是主要的因素。對于小表毕籽,完全不是問題抬闯。主存帶寬
當CPU需要更多數(shù)據(jù),而不是命中CPU自帶的緩存关筒。主存帶寬就是一個瓶頸溶握,多數(shù)系統(tǒng)基本不會是這個瓶頸。
數(shù)據(jù)庫層面
- 表結構的合理性蒸播。列的數(shù)據(jù)類型的合理性睡榆,一個表中列的合理性。比如:多更新數(shù)據(jù)應該設計多表(少列)袍榆,分析大量數(shù)據(jù)則設計成少表(多列)胀屿。
- 合理的索引。索引的數(shù)據(jù)結構偉B樹蜡塌,查詢效率很高碉纳。而且Mysql的鎖的機的粒度就是基于索引。
- 對于行的格式設定馏艾。Mysql的行的設置模式有:COMPACT,REDUNDANT,DYNAMIC,COMPRESSED劳曹。引擎Innodb默認COMPACT。
- 正確的鎖策略琅摩。分為共享模式和排他模式铁孵,選用Innodb引擎性能更好。
- 配置緩存合適的大小房资。具體就是配置InnoDB buffer pool合適的大小蜕劝。
可移植和性能的平衡
編寫高新能的SQL語句(Mysql 特殊SQL方言)和可移植的SQL語句需要進行取舍。