LAMP系統(tǒng)MySQL數(shù)據(jù)庫服務(wù)器優(yōu)化技巧:替換有問題的硬件
LAMP系統(tǒng)MySQL數(shù)據(jù)庫服務(wù)器優(yōu)化技巧:替換有問題的硬件
替換有問題的硬件通常是我們的***考慮,主要原因是數(shù)據(jù)庫會占用大量資源。不過這種解決方案也就僅限于此了。實際上,您通??梢宰屩醒胩幚砥?CPU)或磁盤速度加倍,也可以讓內(nèi)存增大 4 到 8 倍。
記錄慢速查詢
在一個 SQL 服務(wù)器中,數(shù)據(jù)表都是保存在磁盤上的。索引為服務(wù)器提供了一種在表中查找特定數(shù)據(jù)行的方法,而不用搜索整個表。當(dāng)必須要搜索整個表時,就稱為表掃描。通常來說,您可能只希望獲得表中數(shù)據(jù)的一個子集,因此全表掃描會浪費大量的磁盤 I/O,因此也就會浪費大量時間。當(dāng)必須對數(shù)據(jù)進行連接時,這個問題就更加復(fù)雜了,因為必須要對連接兩端的多行數(shù)據(jù)進行比較。
當(dāng)然,表掃描并不總是會帶來問題;有時讀取整個表反而會比從中挑選出一部分數(shù)據(jù)更加有效(服務(wù)器進程中查詢規(guī)劃器用來作出這些決定)。如果索引的使用效率很低,或者根本就不能使用索引,則會減慢查詢速度,而且隨著服務(wù)器上的負載和表大小的增加,這個問題會變得更加顯著。執(zhí)行時間超過給定時間范圍的查詢就稱為慢速查詢。
您可以配置 mysqld 將這些慢速查詢記錄到適當(dāng)命名的慢速查詢?nèi)罩局?。管理員然后會查看這個日志來幫助他們確定應(yīng)用程序中有哪些部分需要進一步調(diào)查。清單 1 給出了要啟用慢速查詢?nèi)罩拘枰?my.cnf 中所做的配置。
清單 1. 啟用 MySQL 慢速查詢?nèi)罩?/p>
- [mysqld]
- enable the slow query log, default 10 seconds
- log-slow-queries
- log queries taking longer than 5 seconds
- long_query_time = 5
- log queries that don't use indexes even if they take less than long_query_time
- MySQL 4.1 and newer only
- log-queries-not-using-indexes
這三個設(shè)置一起使用,可以記錄執(zhí)行時間超過 5 秒和沒有使用索引的查詢。請注意有關(guān) log-queries-not-using-indexes 的警告:您必須使用 MySQL 4.1 或更高版本。慢速查詢?nèi)罩径急4嬖?MySQL 數(shù)據(jù)目錄中,名為 hostname-slow.log。如果希望使用一個不同的名字或路徑,可以在 my.cnf 中使用 log-slow-queries = /new/path/to/file 實現(xiàn)此目的。
閱讀慢速查詢?nèi)罩?**是通過 mysqldumpslow 命令進行。指定日志文件的路徑,就可以看到一個慢速查詢的排序后的列表,并且還顯示了它們在日志文件中出現(xiàn)的次數(shù)。一個非常有用的特性是 mysqldumpslow 在比較結(jié)果之前,會刪除任何用戶指定的數(shù)據(jù),因此對同一個查詢的不同調(diào)用被計為一次;這可以幫助找出需要工作量最多的查詢。
【編輯推薦】