MySQL編譯調整優化簡明指南

http://www.myfaq.com.cn/2005September/2005-09-13/206409.htmlhtml

 

1、在編譯時優 化MySQL
2、 調整服務器
3、表類型
mysql

1、在編譯時優化MySQL

若是你從源代碼分發安裝MySQL,要注意,編譯過程對之後的目標程序性能有重要的影 響,不一樣的編譯方式可能獲得相似的目標文件,但性能可能相差很大,所以,在編譯安裝MySQL適應仔細根據你的應用類型選擇最可能好的編譯選項。這種定製 的MySQL能夠爲你的應用提供最佳性能。

技巧:選用較好的編譯器和較好的編譯器選項,這樣應用可提升性能10-30%。(MySQL 文檔如是說)
sql

1、在編譯時優化MySQL

若是你 從源代碼分發安裝MySQL,要注意,編譯過程對之後的目標程序性能有重要的影響,不一樣的編譯方式可能獲得相似的目標文件,但性能可能相差很大,所以,在 編譯安裝MySQL適應仔細根據你的應用類型選擇最可能好的編譯選項。這種定製的MySQL能夠爲你的應用提供最佳性能。

技巧:選用較 好的編譯器和較好的編譯器選項,這樣應用可提升性能10-30%。(MySQL文檔如是說)

1.一、使用pgcc(Pentium GCC)編譯器

該編譯器(http://www.goof.com/pcg/)針對運行在奔騰處理器系統上的程序進行優化,用pgcc 編譯MySQL源代碼,整體性能可提升10%。固然若是你的服務器不是用奔騰處理器,就沒必要用它了,由於它是專爲奔騰系統設計的。

1.二、 僅使用你想使用的字符集編譯MySQL

MySQL目前提供多達24種不一樣的字符集,爲全球用戶以他們本身的語言插入或查看錶中的數據。 卻省狀況下,MySQL安裝全部者這些字符集,熱然而,最好的選擇是指選擇一種你須要的。如,禁止除Latin1字符集之外的全部其它字符集:

--------------------------------------------------------------------------------
%>./configure -with-extra-charsets=none [--other-configuration-options]
--------------------------------------------------------------------------------

1.三、將mysqld編譯成靜態執行文件

將mysqld編譯成靜態執行文件而無需共享庫也能得到更好的性能。經過 在配置時指定下列選項,可靜態編譯mysqld。

--------------------------------------------------------------------------------
%>./configure -with-mysqld-ldflags=-all-static [--other-configuration-options]
--------------------------------------------------------------------------------

1.四、配置樣本

下列配置命令經常使用於提升性能:

--------------------------------------------------------------------------------
%>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
數據庫

-------------------------------------------------------------------------------- 安全

2、調整服務器

確保運用正確的編譯當然重要,但這只是成功的第一步,配 置衆多的MySQL變量一樣對服務器的正常運行起關鍵做用。你能夠將這些變量的賦值存在一個配置文件中,以確保它們在每次啓動MySQL時均起做用,這個 配置文件就是my.cnf文件。

MySQL已經提供了幾個my.cnf文件的樣本,可在/usr/local/mysqld /share/mysql/目錄下找到。這些文件分別命名爲my-small.cnf、 my-medium.cnf、my-large.cnf和my-huge.cnf,規模說明可在描述配置文件適用的系統類型標題中找到。若是在只有至關少 內存的系統上運行MySQL,並且只是偶爾的用一下,那麼my-small.cnf會比較理想,由於它命令mysqld只使用最少的資源。相似地,若是你 計劃構建電子商務超市,並且系統擁有2G內存,那麼你可能要用到mysql-huge.cnf文件了。

爲了利用這些文件中的一個,你需 要複製一個最適合需求的文件,更名爲my.cnf。你能夠選擇使用配置文件三種做用範圍的一種:


Global: 將my.cnf文件複製到服務器的/etc目錄下,這使得配置文件中的變量做用於全局,即對全部服務器上的MySQL數據庫服務器有效。
Local: 將my.cnf文件複製到[MYSQL-INSTALL-DIR]/var/目錄下,使得my.cnf做用於特定的服務器。[MYSQL- INSTALL-DIR]表示MySQL安裝目錄。
User:你能夠再限制做用於特定的用戶,將my.cnf複製到用戶的根目錄下。
究 竟如何設置my.cnf中的這些變量呢?更進一步說,你能夠設置哪個變量。雖然所用變量對MySQL服務器相對通用,每個變量與MySQL的的某些組 件有更特定的關係。如變量max_connects歸在mysqld類別下。執行下列命令便可知道:

--------------------------------------------------------------------------------
%>/usr/local/mysql/libexec/mysqld --help
--------------------------------------------------------------------------------

它顯示大量的選項及與mysqld相關的變量。你能夠很容易地在該行文字之下找出變量:

--------------------------------------------------------------------------------
Possible variables for option --set-variable (-O) are
--------------------------------------------------------------------------------

而後你能夠以下設置my.cnf中的那些變量:

--------------------------------------------------------------------------------
set-variable = max_connections=100
--------------------------------------------------------------------------------

它設置MySQL服務器的最大併發鏈接數爲100。要確保在my.cnf文件中的[mysqld]標題下插入變量設置。
3、 表類型

不少MySQL用戶可能很驚訝,MySQL確實爲用戶提供5種不一樣的表類型,稱爲DBD、HEAP、ISAM、MERGE和 MyIASM。DBD歸爲事務安全類,而其餘爲非事務安全類。

3.一、事務安全

DBD
Berkeley DB(DBD)表是支持事務處理的表,由Sleepycat軟件公司(http://www.sleepycat.com)開發。它提供MySQL用戶期 待已久的功能-事務控制。事務控制在任何數據庫系統中都是一個極有價值的功能,由於它們確保一組命令能成功地執行。

3.二、非事務安全

HEAP

HEAP表是MySQL中存取數據最快的表。這是由於他們使用存儲在動態內存中的一個哈希索引。另外一個要點 是若是MySQL或服務器崩潰,數據將丟失。

ISAM

ISAM表是早期MySQL版本的缺省表類型,直到 MyIASM開發出來。建議不要再使用它。

MERGE

MERGE是一個有趣的新類型,在3.23.25以後出現。一 個MERGE表其實是一個相同MyISAM表的集合,合併成一個表,主要是爲了效率緣由。這樣能夠提升速度、搜索效率、修復效率並節省磁盤空間。

MyIASM

這是MySQL的缺省表類型。它基於IASM代碼,但有不少有用的擴展。MyIASM比較好的緣由:

MyIASM表 小於IASM表,因此使用較少資源。
MyIASM表在不一樣的平臺上二進制層可移植。
更大的鍵碼尺寸,更大的鍵碼上限。
3.三、 指定表類型

你可在建立表時指定表的類型。下例建立一個HEAP表:

--------------------------------------------------------------------------------

mysql>CREATE TABLE email_addresses TYPE=HEAP (
->email char(55) NOT NULL,
->name char(30) NOT NULL,
->PRIMARY KEY(email) );

--------------------------------------------------------------------------------

BDB表須要一些配置工做,參見http://www.mysql.com/doc/B/D/BDB_overview.html。

3.四、 更多的表類型

爲了使MySQL管理工做更有趣,即將發佈的MySQL 4.0將提供兩種新的表類型,稱爲Innobase和Gemeni。

四、優化工具

MySQL服務器自己提供了幾條內 置命令用於幫助優化。

4.一、SHOW

你可能有興趣知道MySQL服務器究竟更了什麼,下列命令給出一個總結:

--------------------------------------------------------------------------------
mysql>show status;
--------------------------------------------------------------------------------

它給出了一個至關長的狀態變量及其值的列表。有些變量包含了異常終止客戶的數量、異常終止鏈接的數量、鏈接嘗試的次數、最大併發鏈接數 和大量其餘有用的信息。這些信息對找出系統問題和低效極具價值。

SHOW還能作更多的事情。它能夠顯示關於日誌文件、特定數據庫、表、 索引、進程和權限表中有價值的信息。詳見MySQL手冊。

4.二、EXPLAIN

當你面對SELECT語句 時,EXPLAIN解釋SELECT命令如何被處理。這不只對決定是否應該增長一個索引,並且對決定一個複雜的Join如何被MySQL處理都是有幫助 的。

4.三、OPTIMIZE

OPTIMIZE語句容許你恢復空間和合並數據文件碎片,對包含變長行的表進行了大量 更新和刪除後,這樣作特別重要。OPTIMIZE目前只工做於MyIASM和BDB表。
服務器

相關文章
相關標籤/搜索