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表。服務器