top
Loading...
7.5.4.編譯和鏈接怎樣影響MySQL的速度
7.5.4. 編譯和鏈接怎樣影響MySQL的速度

下列大多數測試是在Linux上并用MySQL基準進行的,但是它們能對其它操作系統和工作負載給出一些指示。

當你用-static鏈接時,可以得到最快的可執行文件。

Linux上,最好用pgcc-O3編譯服務器。為了用這些選項編譯“sql_yacc.cc”,需要大約200M內存,因為gccpgcc需要大量的內存使所有函數嵌入(inline)。在配置MySQL時,也應該設定CXX=gcc以避免包括libstdc++(它不需要)。請注意對于某些版本的pgcc,生成的二進制只能運行在真Pentium處理器上,即使你使用編譯器選項說明你想讓最終的代碼在所有x586-類處理器上工作(例如AMD)

只通過使用一個較好的編譯器或較好的編譯器選項,在應用中能得到10-30%的加速。如果你自己編譯SQL服務器,這特別重要!

當我們測試Cygnus CodeFusionFujitsu編譯器時,二者均還沒足夠不出錯來讓MySQL啟用優化進行編譯。

標準MySQL二進制分發編譯為支持所有字符集。當你自己編譯MySQL時,應只包括將使用的字符集的支持。通過configure--with-charset選項來控制。

這里是我們做過的一些測量表:

·         如果你使用pgcc并用-O6編譯,mysqld服務器比用gcc 2.95.211%

·         如果你動態地鏈接(沒有-static),在Linux中結果慢了13%。注意你仍能在客戶應用程序中使用動態鏈接MySQL庫。只有服務器對性能是關鍵的。

·         如果你用strip mysqld剝離mysqld二進制,生成的二進制可以快4%

·         對于在同一主機上運行的客戶與服務器之間的連接,如果你使用TCP/IP而非Unix套接字文件進行連接,結果慢7.5%(Unix中,如果你連接localhost主機,MySQL默認使用一個套接字文件)

·         對于從客戶到服務器的TCP/IP連接,從另一臺主機連接一臺遠程服務器要比連接同一主機上的服務器慢8-11%,即使通過100Mb/s以太網進行連接。

·         當使用安全連接運行我們的基準測試時(所有數據用內部SSL支持進行加密),性能比未加密連接慢55%

·         如果你用--with-debug=full編譯,大多數查詢慢20%。部分查詢時間會很長;例如,MySQL基準的運行要慢35%。如果你使用--with-debug(沒有=full),速度只下降15%。對于用--with-debug=full編譯的mysqld版本,可以用--skip-safemalloc選項啟動以便在運行時禁用內存檢查。執行速度則接近用--with-debug配置的時候。

·         Sun UltraSPARC-Iie上,用Forte 5.0編譯的服務器比用gcc 3.2編譯的要快4%

·         Sun UltraSPARC-Iie上,用Forte 5.0編譯的32位模式服務器比64位模式服務器要快4%

·         gcc 2.95.2編譯帶-mcpu=v8 -WaUltraSPARC,使用-xarch=v8plusa選項性能會提高4%

·         Solaris 2.5.1上,在單個處理器上MIT-pthreads比帶原生線程的Solaris8-12%。如果有更大的負載/cpus,差別應該更大。

·         Linux-x86上使用gcc編譯而不用幀指針(-fomit-frame-pointer or -fomit-frame-pointer -ffixed-ebp),可以使mysqld1-4%

MySQL AB提供的Linux上的二進制MySQL分發一般用pgcc編譯。我們必須返回到常規gcc,因為pgcc中有一個bug,使生成的二進制不能在AMD上運行。我們將繼續使用gcc直到該bug被解決。同時,如果你有一個非AMD機,你可以用pgcc編譯構建一個更快的二進制。標準MySQL Linux二進制是通過靜態鏈接,以使它更快并且更加易于移植。

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/optimization.html
北斗有巢氏 有巢氏北斗