導讀
數據庫性能優化涉及到系統硬件和軟件的方方面面,本文討論的主要是編譯和配置優化、服務器參數調整、如何選用合適的表類型,以及如何用數據庫內建的命令輔助分析和優化性能,特別是如何用EXPLAIN輔助優化查詢的性能。 原文出處:
許多新手往往把重新編譯源代碼看成是一種無可避免的災禍,其實編譯源代碼還能對程序的最終性能起到顯著的影響。編譯過程可以用不同流水線上裝配同樣型號的汽車比擬:第一條流水線由素質較低的工人操作,裝配程序未能盡善盡美,零件裝配誤差較大;第二條流水線由高素質的技術工人操作,汽車裝配程序合理,且利用最好的工具保證產品的高質量。雖然兩條流水線上裝配出來的汽車外觀一模一樣,但兩種汽車的性能表現卻可能大不相同。對于編譯器來說情況也完全相似,有些編譯器裝配出來的程序要比其他編譯器的更好。
編譯時考慮所有可用的選項也是極其重要的。很可能某些編譯器的默認選項值不能符合要求,或者,為了滿足應用的特定需求,我們需要指定一些特殊的編譯選項。正如MySQL文檔所指出的,只要采用了更好的編譯器或者使用更合理的編譯選項,應用性能的提高程度可以達到10-30%。
既然如此,編譯時具體應該注意哪些問題才能讓MySQL數據庫運行得更快呢?
▲ 使用pgcc編譯器
如果系統使用的是奔騰處理器,那么pgcc(Pentium GCC)正是為這些系統下運行的程序提供的專用編譯器。pgcc是gcc編譯器()的奔騰優化版,用pgcc編譯MySQL代碼可以讓整體性能提高10%以上!關于pgcc的更多信息,請參見。當然,如果系統使用的不是奔騰處理器,采用這種方法提高MySQL的運行速度就不合適了,因為正如其名字所示,pgcc是專門為奔騰系統提供的。
▲ 把mysqld編譯成靜態模式
以不帶共享庫的形式編譯mysqld同樣可以提高性能。在配置行加入下面這個選項可以將mysqld編譯成靜態模式:
% >./configure -with-mysqld-ldflags=-all-static [--其他配置選項]
▲ 配置示例
下面的配置命令經常用于提高MySQL的性能:
% >CFLAGS="-O6 -mpentiumpro -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O6
-mpentiumpro -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti"
./configure --prefix=/usr/local --enable-assembler --with-mysqld-ldflags=-all-static
--disable-shared
詳細解釋每個gcc選項的作用已經超出了本文的范圍,請訪問gcc的說明文檔了解這些信息()。注意不要拘泥于這個例子,請在命令行執行man gcc仔細了解每一個gcc選項的含義。