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

mysql狀態 status

編輯:關於MYSQL數據庫

最近看了看MySQL的狀態變量,感覺好多跟以前自己想象的不一樣。為了以後能及時發現自己的錯誤,就先記下來;
http://dev.MySQL.com/doc/refman/5.1/en/server-status-variables.Html
MySQL> show status;
Com_xxx 語句計數變量表示每個xxx 語句執行的次數。每類語句有一個狀態變量。例如,Com_delete和Com_insert分別統計DELETE 和INSERT語句執行的次數。然而,如果一個查詢的結果是從查詢緩存中得到的,這會增加Qcache_hits,而不是Com_select Connections                        4192
試圖連接到(不管是否成功)MySQL服務器的連接數。 Created_tmp_disk_tables            0 Created_tmp_files                  5
MySQLd創建的臨時文件個數    
Created_tmp_tables                 1
服務器執行語句時在內存上自動創建的臨時表的數量,如果Created_tmp_disk_tables較大,你可能要增加tmp_table_size值使臨時 表基於內存而不基於硬盤。 Flush_commands                     1
flush的執行個數     Handler_commit                     0     
Handler_delete                     0
從 表中delete行的次數,此參數與 Com_delete不一樣,只要執行delete,Com_delete就會增加,而Handler_delete只有當在表中刪除了行的時候才增加。 如果delete刪除沒有影響到表裡的任何行,則不會增加Handler_delete值
Handler_discover                   0     
Handler_prepare                    0     
Handler_read_first                 0
索引中第一條被讀的次數。這個表明。服務器正在進行全索引掃描 explain看的時候tpye類型為index    
Handler_read_key                   0
根據索引讀行的次數,如果較高,說明查詢使用了正確的表索引,explain看的時候tpye類型為const、eq_reg、ref、range、
Handler_read_next                  0
根據鍵順序來讀取下一行,如果你使用索引范圍(range)或執行索引(index)掃描,該值增加,增加的大小為查出來的行數,一般order by 鍵值 該值增加
Handler_read_prev                  0
根據鍵順序來讀取前一行, 基本上是用在ORDER BY ... DESC. 增加的大小為查出來的行數
Handler_read_rnd                   0
根據固定位置讀一行的請求數,當需要對非鍵值排序時,該值會增加或者需要MySQL掃描整個表時,該值會增加,增加的大小為查出來的行數
Handler_read_rnd_next              0 (select * from mrhao_order_info where address like '%AA%' order by address ,這個值會導致Handler_read_rn增加7,Handler_read_rnd_next 而這個會增加103840,
而select * from mrhao_order_info where address like '%AA%' Handler_read_rnd_next 這個會增加103840,而Handler_read_rnd不會增加) Handler_rollback                   0     
Handler_savepoint                  0     
Handler_savepoint_rollback         0     
Handler_update                     0     
Handler_write                      132
(以上handler同Handler_delete,只有影響了表裡的任何行,才會增加該值) Innodb_buffer_pool_pages_data      491   
Innodb_buffer_pool_pages_dirty     0     
Innodb_buffer_pool_pages_flushed   6050  
Innodb_buffer_pool_pages_free      0     
Innodb_buffer_pool_pages_latched   0     
Innodb_buffer_pool_pages_misc      21    
Innodb_buffer_pool_pages_total     512
data 包含數據的頁數(髒或者干淨的)dirty 當前的髒頁數。flushed 刷新的頁數 free 空頁數
latched 鎖定的頁數(由於這個數據很號資源,所以UNIV_DEBUG 系統上編譯使用) misc分配給行鎖或者
hash索引管理用的頁數 total 是總的頁數 total=data+free+misc(5.4上 1頁=16k) Innodb_buffer_pool_read_ahead_rnd 3288  
Innodb_buffer_pool_read_ahead_seq 31840
Innodb_buffer_pool_read_requests   3413220598
Innodb_buffer_pool_reads           104184
Innodb_buffer_pool_wait_free       0
Innodb_buffer_pool_write_requests 85786
read_ahead_rnd 表示在初始化innodb時,使用隨機預讀的個數,這個發生在對一個表有大量隨機掃描的查詢,read_ahead_seq 在初始化innodb時,使用順序預讀的個數,一般發生在全表順序掃描,(innodb有兩種預讀模式:隨機預讀方式跟順序預讀 http://dev.MySQL.com/doc/refman/5.0/en/innodb-disk-io.Html)       read_requests 邏輯讀請求的個數,reads 不在buffer pool 不得不從磁盤讀取的邏輯請求個數,wait_free,一般情況下,在後台像innodb buffer pool寫,然後,當需要讀或者創建時,而又沒有干淨的頁使用時,就需要等待頁面刷新,這個狀態就是等待實例進行計數, write_requests 為往buffer pool寫入的個數 Innodb_data_fsyncs                 32146
Innodb_data_pending_fsyncs         0     
Innodb_data_pending_reads          0     
Innodb_data_pending_writes         0     
Innodb_data_read                   1418334208
Innodb_data_reads                  146431
Innodb_data_writes                 34452
Innodb_data_written                212622848
read 從服務器開啟以來,innodb讀取的字節數。reads 服務器讀取的頁數 ,written innodb寫入的字節數 writes 服務器寫入的頁數(1頁16K)fsyncs fsyncs()操作數,pending_fsyncs 掛起的fsyncs()操作數 pending_reads 掛起的讀 pending_writes掛起的寫 Innodb_dblwr_pages_written         6050  
Innodb_dblwr_writes                3324
pages_written 雙寫操作已經寫好的頁數。 writes 已經執行的雙寫操作數量 Innodb_log_waits                   0     
Innodb_log_write_requests          2617  
Innodb_log_writes                  22335
Innodb_os_log_fsyncs               25566
Innodb_os_log_pending_fsyncs       0     
Innodb_os_log_pending_writes       0     
Innodb_os_log_written              12722176 Innodb_page_size                   16384
Innodb_pages_created               13    
Innodb_pages_read                  610723
Innodb_pages_written               6050
size編譯時,頁的大小,一般為16K created 新建的頁數 read 讀的頁數 written 寫的頁數 Innodb_row_lock_current_waits      0     
Innodb_row_lock_time               0     
Innodb_row_lock_time_avg           0     
Innodb_row_lock_time_max           0     
Innodb_row_lock_waits              0     
Innodb_rows_deleted                91    
Innodb_rows_inserted               824   
Innodb_rows_read                   1155270834
Innodb_rows_updated                337
deleted 刪除的行數 inserted 插入的行數 read掃描時的行數(測試發現不是讀取的行數) updated跟新的行數 以上數據只對innodb引擎,而com_ handler_是對所有引擎 Key_blocks_not_flushed             0     
Key_blocks_unused                  7150  
Key_blocks_used                    211   
Key_read_requests                  872516
Key_reads                          4553  
Key_write_requests                 7498  
Key_writes                         3768
Key_blocks_not_flushed 在 key cache中修改了,但是還沒有刷新到磁盤上的塊數,Key_blocks_unused     未使用的塊數(key_buffer控制),
Key_blocks_used     使用的塊數Key_read_requests 從cache中讀取的請求數,Key_reads   從磁盤讀取的塊數,用Key_reads/Key_read_requests來計算cache的miss rate
Key_write_requests 寫入cache的請求數,Key_writes 寫入磁盤的塊數
(注: 內存與磁盤交互的是塊數,而cache的請求數為操作的行數。myisam 中data 與index是文件是分離的,當insert 數據的時候,myisam會直接插入數據到磁盤,但不會立即插入index到磁盤上,而是直接插入key_buffer中,而不刷新到磁盤上,所以有時候 Key_blocks_not_flushed 與Key_write_requests 可能會很高,但Key_writes 確很低,可用“flush table 表名” 強制刷新index到磁盤上。如果大量的塊沒有flush到磁盤上,若服務器這時候出現故障,myisam會在下次重啟時,根據data文件重建 index文件,若沒有重建成功,可用”repair table 表名“修理表   ) Last_query_cost                    0.000000
查詢優化器計算的最後編譯的查詢的總成本,這個在對於同一語句,來對比不同優化器很有用,默認為0,該變量為session變量
Max_used_connections               22   Not_flushed_delayed_rows           0
等待寫入INSERT DELAY隊列的行數 Open_files           
Open_streams
Open_table_definitions
Open_tables
Opened_files
Opened_table_definitions
Opened_tables
Open_files 打開文件的個數,這個統計是服務器打開的正規文件的個數。不包括socket 及pipe。當打開myisam表數據時,他會增加兩個(數據文件與索引文件),當打開innodb表時,該值不增加,當打開的myisam表已另一個別 名打開時,Open_files只會增加一個。flush tables 會清空該值
Opened_files,當增加Open_files同時,他會已同樣大小增加該值。當table_open_cache增加,或者flush tables 時,該值是不會減少,但也不增加的。
Open_table_definitions 打開表時被cache的frm文件個數。
Open_tables 打開表的個數。
Opened_table_definitions 與 Opened_tables 的解釋與Opened_files差不多(跟網上說的只有當
table cache 到達table_open_cache時,才會增加Opened_files這值不一樣哦),以上狀態有global 跟session Prepared_stmt_count                0
當前prepared statements的個數,最大數會由變量max_prepared_stmt_count控制 ,當DEALLOCATE PREPARE時,改狀態值會減小   Qcache_free_blocks                 0     
Qcache_free_memory                 0     
Qcache_hits                        0     
Qcache_inserts                     0     
Qcache_lowmem_prunes               0     
Qcache_not_cached                  0     
Qcache_querIEs_in_cache            0     
Qcache_total_blocks                0
Qcache_total_blocks 顯示了所有的塊數(未使用的內存跟已使用),而Qcache_free_blocks 反映了未使用的塊數。如果Qcache_free_blocks很大(如果沒有內存碎片的話,應該為1),說明內存的碎片很多,內存的使用率會比較差,所 以這時雖然 Qcache_free_memory顯示還有剩余的內存,也可能無法使用,當插入新的query時就需要清除舊的,使得 Qcache_lowmem_prunes很高。可以使用
flush query cache重整內存,操作之後Qcache_free_blocks應該為1,因為所有未使用的內存都放在一起作為連續的一塊了   QuerIEs  
被服務器執行的語句個數,包括存儲過程裡的語句,也包括show status之類的  
Questions                          19483094
被服務器執行的語句個數, 但是不包括存儲過程裡面的語句 Rpl_status                         NULL (暫時未使用) Select_full_join                   0     
Select_full_range_join             0     
Select_range                       0     
Select_range_check                 0     
Select_scan                        1
有興趣可以看看下面內容
http://hackMySQL.com/selectandsort
在優化器explain中,顯示的第一個表或者唯一的一個表他會影響: Select_scan and Select_range,
第二個表或子表會影響: Select_full_join, Select_range_check, and Select_full_range_join
show session status like "select%";的值會按照以下規則來增加
1;Select_scan 當順序的從磁盤讀取時,會增加該值,如explain中第一個表的type" 列顯示ALL
EXPLAIN select * from t1,t2
2:Select_range 當explain中第一個表的type" 列顯示range時,該值增加
EXPLAIN select * from t1,t2 where t1.c1>7800 and t1.c1<8000 and t1.c1=t2.c1
3:Select_full_join explain當第二個表或子表的“type" 列顯示ALL
EXPLAIN select * from t1,t2 where t1.c1>7800 and t1.c1<8000 and t1.c2=t2.c2
4:Select_full_range_join explain的第二個表或子表為range時 該值增加
EXPLAIN select * from t1,t2 where t1.c1>7800 and t1.c1<8000 and t2.c1<1000 這個會增加Select_full_range_join 及Select_range
5:Select_range_check 的意思是不確定range的范圍,
如:EXPLAIN select * from t2,t1 where t2.c1<t1.c2;第二個表顯示:Range checked for each record (index map: 0x1)

Sort_merge_passes                  0     
Sort_range                         0     
Sort_rows                          0     
Sort_scan                          0
一般的,查詢sort都會經歷三個步驟
1. 查找where條件的值
2. 排序值
3. 讀排序後的行
當在第一步時增加Select_scan, 則第三步就會是 增加Sort_scan. 如果第一步是增加 Select_range,則第三步就是 增加Sort_range.
Sort_merge_passes 包括兩步。MySQL 首先會嘗試在內存中做排序,使用的內存大小由系統變量 Sort_buffer_size 決定,如果它的大小不夠把所有的記錄都讀到內存中,MySQL 就會把每次在內存中排序的結果存到臨時文件中,這時候會增加Sort_merge_passes。等 MySQL 找到所有記錄之後,再把臨時文件中的記錄做一次排序。實際上,MySQL 會用另一個臨時文件來存再次排序的結果,所以通常會看到 Sort_merge_passes 增加的數值是建臨時文件數的兩倍。因為用到了臨時文件,所以速度可能會比較慢,增加 Sort_buffer_size 會減少 Sort_merge_passes 和 創建臨時文件的次數。但盲目的增加 Sort_buffer_size 並不一定能提高速度, Slave_open_temp_tables             0     
Slave_retrIEd_transactions         0     
Slave_running                      OFF    Slow_launch_threads                0
The number of threads that have taken more than slow_launch_time seconds to create.    
Slow_querIEs                       0     
The number of querIEs that have taken more than long_query_time seconds. Table_locks_immediate              24364829
Table_locks_waited                 0     
Table_locks_immediate      立即獲得的表的鎖的次數。
Table_locks_waited         不能立即獲得的表的鎖的次數。 Threads_cached                     0     
Threads_connected                  12    
Threads_created                    4191  
Threads_running                    1  
Threads_cached        線程的緩存值,
Threads_connected     當前打開的連接的數量。
Threads_created       創建用來處理連接的線程數。如果Threads_created較大,你可能要增加thread_cache_size值。緩存訪問率的計算方法 Threads_created(新建的線程)/Connections(只要有線程連接,該值就增加)。
Threads_running   激活的(非睡眠狀態)線程數。 Uptime                             978671
The number of seconds that the server has been up.
Uptime_since_flush_status          978671
The number of seconds since the most recent FLUSH STATUS statement(FLUSH STATUS,是把當前的session值加到global上,並重置key-cache及把Max_used_connections值變為當前的連接 數).

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved