1.query_cache_size
select 查詢mysql後,會把查詢結構緩存為sql文本,當同樣的sql再次查詢時,直接從緩存中取數據返回。
Qcache_lowmem_prunes的值非常大,則表明經常出現緩沖不夠的情況,同時Qcache_hits的值非常大,則表明查詢緩沖使用非常頻繁,此時需要增加緩沖大小Qcache_hits的值不大,則表明你的查詢重復率很低,這種情況下使用查詢緩沖反而會影響效率,那麼可以考慮不用查詢緩沖
缺陷:
mysql在利用query_cache工作時,要求該語句涉及的表這段時間內沒有發生變化。假如數據有更新,首先會把所有的query_cache設為失效,然後更新。
如果query_cache_size過大,查詢比較多,失效也會很慢,更新或insert也會慢。
2.key_buffer_size
只對myisam表起作用
key_buffer_size指定索引緩沖區的大小,它決定索引處理的速度,尤其是索引讀的速度。
通過檢查狀態值Key_read_requests和Key_reads,可以知道key_buffer_size設置是否合理
key_read_requests總的讀取請求,key_keys為磁盤請求次數,也就是 key_read_requests/key_reads越小越好
3.table_open_cache(5.1以前版本為table_cache)
table_open_cache指定表高速緩存的大小。每當MySQL訪問一個表時,如果在表緩沖區中還有空間,該表就被打開並放入其中,這樣可以更快地訪問表內容
通過檢查峰值時間的狀態值Open_tables和Opened_tables,可以決定是否需要增加table_open_cache的值。如果你發現open_tables等於table_open_cache,並且opened_tables在不斷增長,那麼你就需要增加table_open_cache的值了
4.log_bin
二進制日志,從庫可以 關閉,關閉掉大概能提高1%的性能。
5.max_connections
最大連接數
6.back_bog
back_log值指出在MySQL暫時停止回答新請求之前的短時間內多少個請求可以被存在堆棧中。只有如果期望在一個短時間內有很多連接,你需要增加它,換句話說,這值對到來的TCP/IP連接的偵聽隊列的大小.
7.thread_cache
mySQL裡面為了提高客戶端請求創建連接過程的性能,提供了一個連接池也就是Thread_Cache池,將空閒的連接線程放在連接池中,而不是立即銷毀.這樣的好處就是,當又有一個新的請求的時候,mysql不會立即去創建連接線程,而是先去Thread_Cache中去查找空閒的連接線程,如果存在則直接使用,不存在才創建新的連接線程.
thread_cache_size
Thread_Cache中存放的最大連接線程數.在短連接的應用中Thread_Cache的功效非常明顯
thread_stack
每個連接被創建的時候,mysql分配給它的內存.這個值一般認為默認就可以應用於大部分場景了
thread_cache命中率計算
show variables like 'thread%';show status like '%connections%';show status like '%thread%'
公式為:thread_cache_hit=(connections-thread_create)/connections*100%
8.log-slave-update
主從架構時,從庫需要保持和主庫相同的二進制時使用(默認從庫是不需要開啟二進制日志)
9。sync_binlog
如果為正,當每個sync_binlog寫入該二進制日志後,MySQL服務器將它的二進制日志同步到硬盤上
為0不與硬盤同步,為1與硬盤同步,mysql崩潰最多丟失一個語句或事務。
10.記錄慢日志,分析
slow-query-log-file
long-query-time
設置時間為1s即可
通過explain分析
語法:explain [extended] select ... from ...where
如果使用了extended ,那麼在執行完explain語句後,可以使用show warnings語句查詢相應的優化信息。
type: ALL 代表全表掃描
key: NULL 沒有用到索引
Extra: Using where; Using filesort 沒有使用索引排序
-----------------------------
type: range說明沒有全表掃描
Extra: Using where 說明沒有文件排序
10.鎖
show status like 'table%';
Table_locks_immediate表示立即釋放表鎖數,Table_locks_waited表示需要等待的表鎖數
如果Table_locks_waited的值比較高,則說明存在著較嚴重的表級鎖爭用情況。這時,需要我們對應用做進一步的檢查,來確定問題所在
11.innodb_buffer_pool_size
緩沖innodb數據和索引的內存緩沖區大小,這個值越高,需要的磁盤i/o越少
12.innodb_flush_log_at_trx_commit
0:表示每秒將日志緩沖寫入到日志文件,並且將日志文件刷新到磁盤。
1:每個事務提交時,日志緩沖寫入日志文件,刷新到磁盤
2:每個提交,日志緩存寫入日志文件,但部隊日志文件做到磁盤刷新
默認為1,也是最安全的
本文出自 “二號” 博客