時(shí)間:2015-06-28 00:00:00 來(lái)源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評(píng)論(0)
對(duì)數(shù)據(jù)庫(kù)的管理常規(guī)就是進(jìn)行預(yù)防性的維護(hù),以及修復(fù)那些出現(xiàn)問(wèn)題的內(nèi)容。
進(jìn)行檢查和修復(fù)通常具有四個(gè)主要的任務(wù):
1. 對(duì)表進(jìn)行優(yōu)化
2. 對(duì)表進(jìn)行分析(分析并存儲(chǔ)MyISAM和BDB表中鍵的分布)
3. 對(duì)表進(jìn)行檢查(檢查表的錯(cuò)誤,并且為MyISAM更新鍵的統(tǒng)計(jì)內(nèi)容)
4. 對(duì)表進(jìn)行修復(fù)(修復(fù)被破壞的MyISAM表)
一、對(duì)表進(jìn)行優(yōu)化
優(yōu)化表有很多方式實(shí)現(xiàn): OPTIMIZE TABLE語(yǔ)句、mysqlcheck工具(服務(wù)器要運(yùn)行)或myisamchk(服務(wù)器沒(méi)有運(yùn)行或表中沒(méi)有交互)
為什么優(yōu)化?隨著MySQL的使用,包括BLOB和VARCHAR字節(jié)的表將變得比較繁冗,因?yàn)檫@些字段長(zhǎng)度不同,對(duì)記錄進(jìn)行插入、更新或刪除時(shí),會(huì)占有不同大小的空間,記錄就會(huì)變成碎片,且留下空閑的空間。像具有碎片的磁盤(pán),會(huì)降低性能,需要整理,因此要優(yōu)化。
1. 利用OPTIMIZE語(yǔ)句對(duì)表進(jìn)行優(yōu)化
# mysql>OPTIMIZE TABLE 表名
這樣就對(duì)表名進(jìn)行了優(yōu)化。
2. 利用mysqlcheck對(duì)表進(jìn)行優(yōu)化
mysqlcheck可進(jìn)行優(yōu)化外,還可執(zhí)行大量的檢查和修復(fù)任務(wù)。
# mysqlcheck -o 數(shù)據(jù)庫(kù)名 表名 -uroot -p111111 (一張表)
# mysqlcheck -o 數(shù)據(jù)庫(kù)名 表名1 表名2 -uroot -p111111 (多張表)
# mysqlcheck -o 數(shù)據(jù)庫(kù)名 -uroot -p111111 (對(duì)整個(gè)數(shù)據(jù)庫(kù))
3. 利用myisamchk對(duì)表進(jìn)行優(yōu)化
# myisamchk --quick --check-only-changed --sort-index --analyze 表名
# myisamchk -r 表名 (參數(shù)-r表示對(duì)表進(jìn)行修復(fù),同時(shí)也刪去了浪費(fèi)的空間)
# myisamchk -r /usr/local/mysql/data/testblog/article (指定表所在的路徑)
以上操作需在服務(wù)器關(guān)閉或沒(méi)有與服務(wù)器互操作的時(shí)候,可以使用myisamchk命令行工具(如果服務(wù)器正在運(yùn)行,那么在運(yùn)行這條語(yǔ)句之前利用mysqladmin flush-tables對(duì)表進(jìn)行刷新。需確保服務(wù)器沒(méi)有與表進(jìn)行互操作,否則會(huì)出現(xiàn)故障)。myisamchk是最老的方法。必須在正確位置上運(yùn)行myisamchk,或者指定表所在的路徑。
注意:在優(yōu)化過(guò)程中,表會(huì)被鎖住,因此不要在忙時(shí)進(jìn)行優(yōu)化操作。同樣,需要有足夠的空間才能進(jìn)行OPTIMIZE TABLE。如果沒(méi)有磁盤(pán)空間,MySQL將不能進(jìn)行優(yōu)化,表也無(wú)法使用。
優(yōu)化是對(duì)包含MyISAM表的數(shù)據(jù)庫(kù)的常規(guī)管理事務(wù)中一個(gè)重要環(huán)節(jié),應(yīng)該定期進(jìn)行。
二、對(duì)表進(jìn)行分析
對(duì)表的定期分析可以改善性能,且應(yīng)該成為常規(guī)維護(hù)工作的一部分。因?yàn)橥ㄟ^(guò)更新表的索引信息對(duì)表進(jìn)行分析,可改善數(shù)據(jù)庫(kù)性能。
有三種方法可以對(duì)表進(jìn)行分析:
1. 連接到MySQL時(shí),使用ANALYZE TABLE語(yǔ)句
2. 利用mysqlcheck命令行工具(服務(wù)器需要運(yùn)行,并且只對(duì)MyISAM表起作用)
3. 利用myisamchk命令行工具(服務(wù)器不應(yīng)該運(yùn)行,或無(wú)對(duì)所操作的表發(fā)生互操作)
# ANALYZE TABLE 表名;
# mysqlcheck -a 數(shù)據(jù)庫(kù)名 表名 -uroot -p111111
# mysqlcheck -a 數(shù)據(jù)庫(kù)名 表名1 表名2 -uroot -p111111
如果試圖對(duì)不支持分析操作的表進(jìn)行分析(如InnoDB),那操作將無(wú)法進(jìn)行
# myisamchk -a /usr/local/mysql/data/數(shù)據(jù)庫(kù)/表名
關(guān)鍵詞標(biāo)簽:mysql表優(yōu)化
相關(guān)閱讀
熱門(mén)文章 Xbox Game Pass 10款MySQL數(shù)據(jù)庫(kù)客戶端圖形界面管理工具推薦 MySQL常用維護(hù)管理工具 MySQL數(shù)據(jù)庫(kù)啟動(dòng)失敗1067進(jìn)程意外終止的解決辦法總結(jié)
人氣排行 10款MySQL數(shù)據(jù)庫(kù)客戶端圖形界面管理工具推薦 MySQL數(shù)據(jù)庫(kù)啟動(dòng)失敗1067進(jìn)程意外終止的解決辦法總結(jié) Mysql 1045錯(cuò)誤解決辦法 MySQL服務(wù)器進(jìn)程CPU占用100%解決辦法 MySQL導(dǎo)出導(dǎo)入命令的用例 MySQL連接字符串的實(shí)際操作步驟匯總 MySQL無(wú)法啟動(dòng)、無(wú)法停止各種解決方法總結(jié) 三種常用的MySQL建表語(yǔ)句