程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> Mysql狀態變量性能調優

Mysql狀態變量性能調優

編輯:關於MYSQL數據庫

Mysql狀態變量通過”show global status”(自MySQL上次啟動以來的統計)獲取,重要的參數包括各種SQL執行頻率,索引使用情況、鎖資源使用情況等。

長時間運行的Mysql服務器,運行flush status;可以重置一些計數器優化性能。例如DB服務器是4核16G內存,通過狀態變量,可以優化MySQL靜態變量和SQL:   參數 說明 基本情況   Connections 連接服務器(不管是否成功)的次數 Uptime 服務器工作時間 Max_used_connections 同時使用的最大連接數量 Open_tables 當前打開的表的數量。 Opened_tables 已經打開的表的數量。調優靜態變量表緩存數table_cache:如果open_tables接近table_cache,並且opened_tables不斷增長,就需要增加table_cache的值。 table_cache是所有線程打開的表的數目(一個表使用2個文件描述符),表數量多,就要大一些。增大該值可以增加MySQLd需要的文件描述符的數量。根據數據庫系統中表數量來決定該值,如2048。 線程使用情況   Threads_cached 線程緩存內的線程數 Threads_connected 當前打開的線程數 Threads_created 創建過的線程數。調優靜態變量線程緩存數thread_cache:如果該值增加很快,當前thread_cache_size的值可能太小。緩存訪問率是Threads_created/Connections。服務器應緩存多少線程以便重新使用。當客戶端斷開連接時,如果線程少於thread_cache_size,則客戶端的線程被放入緩存,一般配置8。 Threads_running 運行(非睡眠)狀態的線程數 查詢緩存   Qcache_free_blocks 緩存中相鄰內存塊的個數。數目大說明可能有碎片。調優方法:FLUSH QUERY CACHE;會對緩存中的碎片進行整理,從而得到一個空閒塊,如果flush運行的時間很長,說明緩存太大了,可以適當調小靜態變量query_cache_size的值。 Qcache_free_memory 緩存中剩余的內存。調優靜態參數query_cache_size:如果剩余內存不足,可以增加該值,如設置query_cache_size=64M Qcache_hits 查詢緩存命中次數,該值越大越好 Qcache_inserts 插入查詢緩存的次數。緩存命中率 = 1 C Qcache_hits/ Qcache_inserts。80%以上的查詢緩存命中率就算合格。 Qcache_lowmem_prunes 查詢緩存過低的次數。緩存出現內存不足並且必須要進行清理以便為更多查詢提供空間的次數。這個數字最好長時間來看;如果這個數字在不斷增長,就表示可能碎片非常嚴重,或者內存很少。(上面的free_blocks 和 free_memory 可以告訴您屬於哪種情況)。 Qcache_not_cached 不適合進行緩存的查詢的數量,通常是由於這些查詢不是 SELECT 語句。 Qcache_querIEs_in_cache 當前緩存的查詢(和響應)的數量。 Qcache_total_blocks 緩存中塊的數量。 SQL執行頻率   Com_select 執行select操作次數 Com_insert 執行insert操作次數 Com_update 執行update操作次數 Com_delete 執行delete操作次數 Com_commit 事務執行commit操作次數 Comm_rollback 事務執行rollback操作次數。如果回滾頻繁,就說明程序存在某些問題。 Slow_querIEs 慢查詢的次數。調優SQL性能:如果該值增加很快,需要分析慢查詢日志,針對查詢SQL優化。 Innodb_rows_read 執行select返回的行數。以下幾個InnoDB的。 Innodb_rows_inserted 執行insert操作的行數。通過這幾個參數,可以知道數據庫是查詢為主還是插入為主。 Innodb_rows_updated 執行update操作的行數 Innodb_rows_deleted 執行delete操作的行數 Sort_merge_passes 排序算法已經執行的合並的數量。調優靜態變量sort_buffer_size:如果該值很大,說明排序緩沖區太小,如設置sort_buffer_size = 5M 當 MySQL 必須要進行排序時,就會在從磁盤上讀取數據時分配一個排序緩沖區來存放這些數據行。如果要排序的數據太大,那麼數據就必須保存到磁盤上的臨時文件中,並再次進行排序。 索引使用情況   Handler_read_first 使用全索引掃描的次數。如SELECT col1 FROM foo,假定col1有索引 Handler_read_key 使用索引次數,該值越高越好。 Handler_read_next 按照鍵順序讀下一行的請求數。使用索引描述時,從數據文件取數據的次數 Handler_read_prev 使用索引描述時,按索引倒序從數據文件取數據的次數。一般是order by/desc查詢 Handler_read_rnd 查詢直接操作數據文件的次數,有可能未使用索引 Handler_read_rnd_next 在數據文件中讀下一行的請求數。若該值非常大,說明使用了大量的表掃描,索引使用率不高或沒有使用索引。Handler_read_rnd_next/Com_select是表掃描比率,如果該值超過 4000,就應該調優靜態參數read_buffer_size。如read_buffer_size=1M,若超過8M,那麼就要優化SQL了。 鎖使用情況   Innodb_row_lock_current_waits 當前等待行鎖的行數 Innodb_row_lock_time 行鎖定用的總時間(ms) Innodb_row_lock_time_avg 行鎖定的平均時間(ms)。該值大,說明鎖沖突大 Innodb_row_lock_time_max 行鎖定的最長時間(ms) Innodb_row_lock_waits 行鎖定必須等待的時間(ms)。該值大,說明鎖沖突大  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved