1、 Key buffer
A、 參數(shù)key_buffer_size只對myisam引擎的表起作用;
B、 它決定索引處理的速度,尤其是索引讀的速度;
C、 評估 這個參數(shù)是否設(shè)置合理 可以檢查兩個狀態(tài)值 show status like ‘%key_read%’;
D、 Key_read_requests代表 總的請求數(shù),key_reads代表讀取磁盤數(shù);
E、 key_reads / key_read_requests應(yīng)該盡可能的低,至少是1:100,1:1000更好;
F、 另外一個估計key_buffer_size的辦法 把你數(shù)據(jù)庫的每個表的索引所占空間大小加起來看看。
2、 Query cache
A、 query cache主要是將SELECT語句和查詢結(jié)果存放在該緩沖區(qū);
B、 參數(shù)query_cache_size 的設(shè)置合理性可以檢查db的狀態(tài):show status like ‘%qcache%’
C、 參數(shù)query_cache_type指定是否使用查詢緩沖;
D、 設(shè)置參數(shù): query_cache_size = 32M
query_cache_type= 1
E、 一段時間后服務(wù)器狀態(tài)值:
Qcache queries in cache 12737 表明目前緩存的條數(shù)
Qcache inserts 20649006
Qcache hits 79060095 看來重復(fù)查詢率還挺高的
Qcache lowmem PRunes 617913 有這么多次出現(xiàn)緩存過低的情況
Qcache not cached 189896
Qcache free memory 18573912 目前剩余緩存空間
Qcache free blocks 5328 這個數(shù)字似乎有點大 碎片不少
Qcache total blocks 30953
F、 結(jié)果表明:query cache值需要設(shè)置的更大一些;
G、 Qcache_free_blocks,如果該值非常大,則表明緩沖區(qū)中碎片很多
H、 Qcache_lowmem_prunes的值非常大,則表明經(jīng)常出現(xiàn)緩沖不夠的情況,同時Qcache_hits的值非常大,則表明查詢緩沖使用非常頻繁,此時需要增加緩沖大小Qcache_hits的值不大,則表明你的查詢重復(fù)率很低,這種情況下使用查詢緩沖反而會影響效率,那么可以考慮不用查詢緩沖。此外,在SELECT語句中加入SQL_NO_CACHE可以明確表示不使用查詢緩沖。
3、 Table cache
A、 table_cache指定表高速緩存的大小;
B、 每當MySQL訪問一個表時,如果在表緩沖區(qū)中還有空間,該表就被打開并放入其中,這樣可以更快地訪問表內(nèi)容;
C、 通過檢查峰值時間的狀態(tài)值Open_tables和Opened_tables,可以決定是否需要增加table_cache的值。如果你發(fā)現(xiàn)open_tables等于table_cache,并且opened_tables在不斷增長,那么你就需要增加table_cache的值了;
D、 注意,不能盲目地把table_cache設(shè)置成很大的值。如果設(shè)置得太高,可能會造成文件描述符不足,從而造成性能不穩(wěn)定或者連接失敗。
4、 Innodb buffer
A、 innodb_buffer_pool_size - 這對Innodb表來說非常重要。Innodb相比MyISAM表對緩沖更為敏感。MyISAM可以在默認的 key_buffer_size 設(shè)置下運行的可以,然而Innodb在默認的 innodb_buffer_pool_size 設(shè)置下卻跟蝸牛似的。
B、 由于Innodb把數(shù)據(jù)和索引都緩存起來,無需留給操作系統(tǒng)太多的MySQL數(shù)據(jù)庫內(nèi)存,因此如果只需要用Innodb的話則可以設(shè)置它高達 70-80% 的可用內(nèi)存。
C、 如果你的數(shù)據(jù)量不大,并且不會暴增,那么無需把 innodb_buffer_pool_size 設(shè)置的太大了。
D、 innodb_log_file_size 在高寫入負載尤其是大數(shù)據(jù)集的情況下很重要。這個值越大則性能相對越高,但是要注意到可能會增加恢復(fù)時間。我經(jīng)常設(shè)置為 64-512MB,跟據(jù)服務(wù)器大小而異。innodb_log_buffer_size 默認的設(shè)置在中等強度寫入負載以及較短事務(wù)的情況下,服務(wù)器性能還可以。
E、 innodb_flush_logs_at_trx_commit 是否為Innodb比MyISAM慢1000倍而頭大?看來也許你忘了修改這個參數(shù)了。默認值是 1,這意味著每次提交的更新事務(wù)(或者每個事務(wù)之外的語句)都會刷新到磁盤中,而這相當耗費資源,尤其是沒有電池備用緩存時。很多應(yīng)用程序,尤其是從 MyISAM轉(zhuǎn)變過來的那些,把它的值設(shè)置為 2 就可以了,也就是不把日志刷新到磁盤上,而只刷新到操作系統(tǒng)的緩存上。日志仍然會每秒刷新到磁盤中去,因此通常不會丟失每秒1-2次更新的消耗。如果設(shè)置為 0 就快很多了,不過也相對不安全了。MySQL服務(wù)器崩潰時就會丟失一些事務(wù)。設(shè)置為 2 指揮丟失刷新到操作系統(tǒng)緩存的那部分事務(wù)。
新聞熱點
疑難解答
圖片精選