mysql較為重要的狀態變數

myownstars發表於2013-06-27

Innodb_log_waits

log buffer不足導致等待的次數

相關引數:

Innodb_os_log_pending_fsyncsredo logpending fsync()次數  



Threads_connected      

當前open的執行緒數

相關引數:

Threads_created:建立的執行緒數,值過大可增加thread_cache_size

Threads_running:正在執行的執行緒數

Threads_cachedcached的執行緒數

Connections:試圖登入mysql的連線數,threads_created/connections用以計算cache miss rate

Max_used_connections:自啟動以來最大併發連線數


Created_tmp_disk_tables

建立的on-disk臨時表數量

即便internal temp table初始建於記憶體中,當其大於min(tmp_table_size,max_heap_table_size)時,會自動轉換為MyiSAM表存入磁碟

可將其與created_tmp_tables比較以確認是否有改進的餘地

相關引數:

Created_tmp_filesmysqld建立的臨時檔案數

Created_tmp_tables:執行語句過程中生成的internal臨時表數量

http://space.itpub.net/15480802/viewspace-757553  

 

Handler_read_first       

讀取索引第一個entry的次數,如果該指標很高說明系統進行了大量的full index scan,例如select col1 from foo(col1列有索引)

相關引數:

Handler_read_key:透過key值讀取行的次數,說明query很好的利用了索引

Handler_read_last(5.6新變數)讀取索引最後key的次數,order by desc使用

Handler_read_prev:主要用於order by desc

Handler_read_next:依據key順序讀取下一行,index range scan或者non-unique indexcol1 = const操作

Handler_read_rnd:依據fixed pos讀取行的次數

Handler_read_rnd_next:讀取當前下一行,大量全表掃描時此值會比較高



Innodb_buffer_pool_wait_free              

說明buffer pool沒有空閒記憶體了,有多種原因,最常見的是Buffer pool太;

Buffer pool採用LRU演算法:

所有buffer塊位於同一列表,其中後3/8old,每當新讀入一個資料塊時,先從隊尾移除同等塊數然後插入到old子列的頭部,如再次訪問該塊則將其移至new子列的頭部

Innodb_buffer_pool_size:  buffer pool大小

Innodb_buffer_pool_instances: buffer pool數量,buffer pool至少為1G時才能生效

Innodb_old_blocks_pct: 範圍– 95, 預設為373/8,指定old子列的比重

Innodb_old_blocks_time: ms為單位,新插入old子列的buffer塊必須等待指定時間後才能移入new列,適用於one-time scan頻繁的操作,以避免經常訪問的資料塊被剔出buffer pool

http://space.itpub.net/15480802/viewspace-755582  



Key_reads         

MyiSAM索引塊從磁碟讀入key cache的次數,此係物理讀

相關引數:

Key_read_requests:向key cache請求讀次數,key_reads/key_read_requests可以計算cache miss rate

Key_write_requests:向key cache寫請求次數

Key_writes:從key cache向磁碟寫block次數

5.5僅支援一個結構化變數,即key cache,其包含4個部件

Key_buffer_size

Key_cache_block_size:單個塊大小,預設1k

Key_cache_division_limitwarm子列的百分比(預設100)key cache buffer列表的分隔點,用於分隔hostwarm子列表

Key_cache_age_threshold:頁在hot子列中的生命週期,值越小則越快的移至warm列表

預設採用LRU演算法,也支援名為中間點插入機制midpoint insertion strategy

索引頁剛讀入key cache時,被放在warm列的尾部,被訪問3次後則移到hot列尾並迴圈移動,如果在hot列頭閒置連續N次都沒訪問到,則會被移到warm列頭,成為被剔出cache的首選;

N= block no* key_cache_age_threshold/100

http://space.itpub.net/15480802/viewspace-755582  



Open_tables

開啟表的數量,如果此值很小而open_table_cache過大,則可適當調小後者

相關引數:

Opened_files:透過my_open()開啟過的檔案數

Opened_table_definitions:被cached過的.frm檔案數量

Opend_tables:被開啟過的表數量,如果此值太大有可能table_open_cache過小所致

Open_files:當前open的檔案數(不包括socket/pipe)

Open_table_definition:當前cached.frm數量

5.6.6新加table_open_cache_hits/table_open_cache_misses

Table_definition_cache:儲存frm檔案,不同於open_table_cacheper-thread,這些檔案可被所有執行緒共享;5.1引入;

MyISAM不同,InnoDBopen tableopen file並無直接聯絡,即開啟frm表時其相應的ibd檔案可能處於關閉狀態;

InnoDB只會用到table_definiton_cache,不會使用table_open_cache

frm檔案儲存於table_definition_cache中,而idb則由innodb_open_files決定(前提是開啟了innodb_file_per_table)

除此之外,innodb還在記憶體中維護一個data dictionary,用於記錄所有訪問過的表,即便表已經關閉了也不釋放,show innodb status會顯示該部分記憶體大小;

如果這兩個引數設定過大,有可能會消耗較多記憶體

  



Select_full_join              

執行表掃描的joins數量(沒有使用索引)

相關引數:

Select_full_range_join:對referenced表使用rangejoins數量

Select_range:第一個表使用rangesjoin數量,通常即便很高也不會引起效能問題

Select_range_check:沒有使用keyjoin數量(The number of joins without keys that check for key usage after each row),如果不等於0則需仔細檢查表的索引

Select_scan:第一個表使用full scanjoin數量



Slow_queries

Slow query的數量(執行時間超過long_query_time)

 

Uptime               

自系統啟動以來的秒數



Com_xxx

記錄xxx的執行次數,比如com_delete記錄delete執行次數,com_commit事務提交數

TPS=(com_commit + com_rollback)/seconds

QPS=queries/seconds

注:透過query cache完成的selectqcache_hits記錄,而非com_select

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-764968/,如需轉載,請註明出處,否則將追究法律責任。

相關文章