《方法一》
mysqlcheck -a -c -o -r --all-databases -uroot -p 即可最佳化所有db
參數的意義如下:
-a = Analyse given tables.
-c = Check table for errors
-o = Optimise table
-r = Can fix almost anything except unique keys that aren't unique
《方法二》
/usr/bin/myisamchk -s /var/lib/mysql/*/*.MYI
阿杰老師補充說明 :
s, --sort-index
-r index_num, --sort-records=index_num
-a, --analyze
- stop mysql
- 找到 mysql 安裝目錄的 bin/myisamchk 工具,在命令行中輸入
/usr/bin/myisamchk -s /var/lib/mysql/*/*.MYI
- myisamchk 工具會重建資料表的索引
- start mysql
《方法三》
將mysql運作的nice值降低(調到-15)
《方法四》
認真調校 my.cnf
延伸閱讀
如何最佳化 MySQL 所有資料庫與表格的狀態 (使用script)
引用文章自
http://app.digitimes.com.tw/print.aspx?zNotesDocId=0000056690_A447905ZCKLBD7UL1YKO3
意欲達到迅速優化MySQL資料庫的效能,有一些相關的系統參數,算是系統管理人員的必修學分。
首先提到key_buffer_size部分。所謂key_buffer_size,係與索引塊的緩衝區大小息息相關,故將之設定為較大後,對於來自於所有用戶執行緒的讀寫處理能力,自然有所助益,但一旦設定的太大,反而會拖累系統的執行效能,因此對於key_buffer_size容量的設定,必須求取平衡;而系統的默認值為8MB,此時約可抓系統主機記憶體容量的1/5(註:假設伺服器具2GB記憶體,則以400MB為基準),據此加大key_buffer_size。
其次談到back_log。該數值的主要意義,係指MySQL暫時停止回應新請求之前的短暫時間內,可允許多少個請求,被存放於堆疊之中,因此,倘若用戶期望在1個短暫時間內,能夠連結到較多的請求數量,或在主機進程列表當中,發現到大量的等待連接進程時,則可把back_log值予以增加,但也不能將之無限上綱地擴大,因為作業系統對於接收TCP/IP連接的listen queue大小,畢竟有其上限,所以若將back_log調高到此一限制之上,反而會淪為無效設定;惟一般而言,系統所默認的back_log值為50,只要不把它調到10倍(亦即500)以上,通常不會有太大問題。
此外,若擔心系統所承受的同時上線使用人數過多,導致經常出現「Too many connections」錯誤的話,則可考量將max_connections數值從Default的100加以提高,調成512、甚至1024,應該都不成問題。至於interactive_timeout,係指系統在面對1個交互連接行為上,所產生的等待時間,以秒為單位,而系統默認值為28800,此時不妨將之調低,改為14400或7200都可,旨在降低其於交互連接過程中的等待秒數。
另一方面,系統管理員若懂得將sort_buffer數值予以增加,則系統在面對所有需要被排序的執行緒,即可個別分配較大的緩衝區,從而提升ORDER BY或GROUP BY的行進速度;一般來說,系統默認值僅2MB,可考慮提高到8MB或16MB。而在table_cache部分,則代表所有執行緒在開啟表單時,所能支撐的檔描述符總量,而MySQL每開啟1個表,便需要搭配2個檔描述符;系統默認值為64,可考慮調整為256或512。
對於record_buffer而言,倘若數值愈大,則每個刻正接受掃描的表單,便可分配到較大的緩衝區,從而加速順序掃描作業之運行,而系統默認值是128KB,可將之大幅調高到8MB或16MB無妨。