點(diǎn)擊查看:全國(guó)計(jì)算機(jī)二級(jí)MySQL數(shù)據(jù)庫程序設(shè)計(jì)知識(shí)點(diǎn)匯總
Mysql的優(yōu)化方法
一、在編譯時(shí)優(yōu)化mysql
如果你從源代碼分發(fā)安裝mysql,要注意,編譯過程對(duì)以后的目標(biāo)程序性能有重要的影響,不同的編譯方式可能得到類似的目標(biāo)文件,但性能可能相差很大,因此,在編譯安裝mysql適應(yīng)仔細(xì)根據(jù)你的應(yīng)用類型選擇最可能好的編譯選項(xiàng)。這種定制的mysql可以為你的應(yīng)用提供最佳性能。
技巧:選用較好的編譯器和較好的編譯器選項(xiàng),這樣應(yīng)用可提高性能10-30%。(mysql文檔如是說)
1.1、使用pgcc(pentium gcc)編譯器
該編譯器針對(duì)運(yùn)行在奔騰處理器系統(tǒng)上的程序進(jìn)行優(yōu)化,用pgcc編譯mysql源代碼,總體性能可提高10%。當(dāng)然如果你的服務(wù)器不是用奔騰處理器,就不必用它了,因?yàn)樗菍楸简v系統(tǒng)設(shè)計(jì)的。
1.2、僅使用你想使用的字符集編譯mysql
mysql目前提供多達(dá)24種不同的字符集,為全球用戶以他們自己的語言插入或查看表中的數(shù)據(jù)。卻省情況下,mysql安裝所有者這些字符集,熱然而,最好的選擇是指選擇一種你需要的。如,禁止除latin1字符集以外的所有其它字符集:
------------------------------------------------------------------------------
%>./configure -with-extra-charsets=none [--other-configuration-options]
------------------------------------------------------------------------------
1.3、將mysqld編譯成靜態(tài)執(zhí)行文件
將mysqld編譯成靜態(tài)執(zhí)行文件而無需共享庫也能獲得更好的性能。通過在配置時(shí)指定下列選項(xiàng),可靜態(tài)編譯mysqld。
------------------------------------------------------------------------------
%>./configure -with-mysqld-ldflags=-all-static [--other-configuration-options]
------------------------------------------------------------------------------
1.4、配置樣本
下列配置命令常用于提高性能:
------------------------------------------------------------------------------
%>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
------------------------------------------------------------------------------
二、調(diào)整服務(wù)器
確保運(yùn)用正確的編譯固然重要,但這只是成功的第一步,配置眾多的mysql變量同樣對(duì)服務(wù)器的正常運(yùn)行起關(guān)鍵作用。你可以將這些變量的賦值存在一個(gè)配置文件中,以確保它們?cè)诿看螁?dòng)mysql時(shí)均起作用,這個(gè)配置文件就是my.cnf文件。
mysql已經(jīng)提供了幾個(gè)my.cnf文件的樣本,可在/usr/local/mysqld/share/mysql/目錄下找到。這些文件分別命名為my-small.cnf、 my-medium.cnf、my-large.cnf和my-huge.cnf,規(guī)模說明可在描述配置文件適用的系統(tǒng)類型標(biāo)題中找到。如果在只有相當(dāng)少內(nèi)存的系統(tǒng)上運(yùn)行mysql,而且只是偶爾的用一下,那么my-small.cnf會(huì)比較理想,因?yàn)樗頼ysqld只使用最少的資源。類似地,如果你計(jì)劃構(gòu)建電子商務(wù)超市,而且系統(tǒng)擁有2g內(nèi)存,那么你可能要用到mysql-huge.cnf文件了。為了利用這些文件中的一個(gè),你需要復(fù)制一個(gè)最適合需求的文件,改名為my.cnf。你可以選擇使用配置文件三種作用范圍的一種:
global:將my.cnf文件復(fù)制到服務(wù)器的/etc目錄下,這使得配置文件中的變量作用于全局,即對(duì)所有服務(wù)器上的mysql數(shù)據(jù)庫服務(wù)器有效。
local:將my.cnf文件復(fù)制到[mysql-install-dir]/var/目錄下,使得my.cnf作用于特定的服務(wù)器。[mysql-install-dir]表示mysql安裝目錄。
user:你可以再限制作用于特定的用戶,將my.cnf復(fù)制到用戶的根目錄下。
究竟如何設(shè)置my.cnf中的這些變量呢?更進(jìn)一步說,你可以設(shè)置哪一個(gè)變量。雖然所用變量對(duì)mysql服務(wù)器相對(duì)通用,每一個(gè)變量與mysql的的某些組件有更特定的關(guān)系。如變量max_connects歸在mysqld類別下。執(zhí)行下列命令即可知道:
------------------------------------------------------------------
%>/usr/local/mysql/libexec/mysqld --help
------------------------------------------------------------------
它顯示大量的選項(xiàng)及與mysqld相關(guān)的變量。你可以很容易地在該行文字之下找出變量:
-------------------------------------------------------------------
possible variables for option --set-variable (-o) are
-------------------------------------------------------------------
然后你可以如下設(shè)置my.cnf中的那些變量:
-------------------------------------------------------------------
set-variable = max_connections=100
-------------------------------------------------------------------
它設(shè)置mysql服務(wù)器的最大并發(fā)連接數(shù)為100。要確保在my.cnf文件中的[mysqld]標(biāo)題下插入變量設(shè)置。
三、表類型
很多mysql用戶可能很驚訝,mysql確實(shí)為用戶提供5種不同的表類型,稱為dbd、heap、isam、merge和myiasm。dbd歸為事務(wù)安全類,而其他為非事務(wù)安全類。
3.1、事務(wù)安全
dbd
berkeley db(dbd)表是支持事務(wù)處理的表,由sleepycat軟件公司開發(fā)。它提供mysql用戶期待已久的功能-事務(wù)控制。事務(wù)控制在任何數(shù)據(jù)庫系統(tǒng)中都是一個(gè)極有價(jià)值的功能,因?yàn)樗鼈兇_保一組命令能成功地執(zhí)行。
3.2、非事務(wù)安全
heap
heap表是mysql中存取數(shù)據(jù)最快的表。這是因?yàn)樗麄兪褂么鎯?chǔ)在動(dòng)態(tài)內(nèi)存中的一個(gè)哈希索引。另一個(gè)要點(diǎn)是如果mysql或服務(wù)器崩潰,數(shù)據(jù)將丟失。
isam
isam表是早期mysql版本的缺省表類型,直到myiasm開發(fā)出來。建議不要再使用它。
merge
merge是一個(gè)有趣的新類型,在3.23.25之后出現(xiàn)。一個(gè)merge表實(shí)際上是一個(gè)相同myisam表的集合,合并成一個(gè)表,主要是為了效率原因。這樣可以提高速度、搜索效率、修復(fù)效率并節(jié)省磁盤空間。
myiasm
這是mysql的缺省表類型。它基于iasm代碼,但有很多有用的擴(kuò)展。myiasm比較好的原因:
myiasm表小于iasm表,所以使用較少資源。
myiasm表在不同的平臺(tái)上二進(jìn)制層可移植。
更大的鍵碼尺寸,更大的鍵碼上限。
3.3、指定表類型
你可在創(chuàng)建表時(shí)指定表的類型。下例創(chuàng)建一個(gè)heap表:
--------------------------------------------------------------------
mysql>create table email_addresses type=heap (
->email char(55) not null,
->name char(30) not null,
->primary key(email) );
---------------------------------------------------------------------
bdb表需要一些配置工作。
3.4、更多的表類型
為了使mysql管理工作更有趣,即將發(fā)布的mysql 4.0將提供兩種新的表類型,稱為innobase和gemeni。
四、優(yōu)化工具
mysql服務(wù)器本身提供了幾條內(nèi)置命令用于幫助優(yōu)化。
4.1、show
你可能有興趣知道m(xù)ysql服務(wù)器究竟更了什么,下列命令給出一個(gè)總結(jié):
-----------------------------------
mysql>show status;
-----------------------------------
它給出了一個(gè)相當(dāng)長(zhǎng)的狀態(tài)變量及其值的列表。有些變量包含了異常終止客戶的數(shù)量、異常終止連接的數(shù)量、連接嘗試的次數(shù)、最大并發(fā)連接數(shù)和大量其他有用的信息。這些信息對(duì)找出系統(tǒng)問題和低效極具價(jià)值。
show還能做更多的事情。它可以顯示關(guān)于日志文件、特定數(shù)據(jù)庫、表、索引、進(jìn)程和權(quán)限表中有價(jià)值的信息。詳見mysql手冊(cè)。
4.2、explain
當(dāng)你面對(duì)select語句時(shí),explain解釋select命令如何被處理。這不僅對(duì)決定是否應(yīng)該增加一個(gè)索引,而且對(duì)決定一個(gè)復(fù)雜的join如何被mysql處理都是有幫助的。
4.3、optimize
optimize語句允許你恢復(fù)空間和合并數(shù)據(jù)文件碎片,對(duì)包含變長(zhǎng)行的表進(jìn)行了大量更新和刪除后,這樣做特別重要。optimize目前只工作于myiasm和bdb表。
微信搜索"考試吧"了解更多考試資訊、下載備考資料
相關(guān)推薦:
2018年9月全國(guó)計(jì)算機(jī)等級(jí)考試試題匯總(各科目)
2018年全國(guó)計(jì)算機(jī)等級(jí)考試必做試題匯總(各科目)
2018年全國(guó)計(jì)算機(jī)等級(jí)考試復(fù)習(xí)知識(shí)點(diǎn)匯總(各科目)
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |