共計 4186 個字符,預計需要花費 11 分鐘才能閱讀完成。
這篇文章主要介紹“采集 MySQL 數據庫運行狀態數據的方法”,在日常操作中,相信很多人在采集 MySQL 數據庫運行狀態數據的方法問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”采集 MySQL 數據庫運行狀態數據的方法”的疑惑有所幫助!接下來,請跟著丸趣 TV 小編一起來學習吧!
狀態數據項
MySQL 數據庫系統提供了數據采集的命令:SHOW STATUS; 或者直接讀取虛擬數據庫 informat_schema 對象 GLOBAL_STATUS(注:5.1 及以上版本) 的數據,我們隊需要重點采集的數據進行一些類別劃分。
1) SQL 語句執行量
(1). Queries
MySQL 服務器執行的所有 SQL 語句次數,包過存儲過程執行的 SQL 語句,但是不包含命令 COM_PING 和 COM_STATISTICS 的執行次數;
(2). Questions
由客戶端發送給服務器端執行的所有 SQL 語句次數,但是不包含存儲過程執行的 SQL 語句,也不包含命令 COM_PING 和 COM_STATISTICS 的執行次數;
(3). Com_**** 統計
Com_insert mdash; 記錄 INSERT INTO TABLE tablename VALUES(hellip;) hellip; 語句執行的次數;
Com_insert_select mdash; 記錄 INSERT INTO TABLE tablename SELECT hellip; 語句執行的次數;
Com_delete mdash; 記錄 DELETE [FROM] tablename hellip; 語句執行的次數;
Com_delete_multi mdash; 記錄 DELETE [FROM] tablename1,tablename2 hellip; 語句執行的次數;
Com_select mdash; 記錄 SELECT hellip;FROM tablename1 hellip; 語句執行的次數;
Com_update mdash; 記錄 UPDATE tablename1 SET hellip; 語句執行的次數;
Com_update_multi mdash; 記錄 UPDATE tablename1,tabkename2 hellip; SET hellip; 語句執行的次數;
2) 查詢緩存
Qcache_hits mdash; 查詢語句命中查詢緩存的次數;
Qcache_inserts mdash; 查詢語句及記錄集加入到查詢緩存的數量;
Qcache_lowmem_prunes mdash; 因查詢緩內存容量不足,而不得不從查詢緩存中刪除的緩存記錄數;
Qcache_not_cached mdash; 從查詢緩存中沒有找到對應緩存 SQL 語句的 SELECT 查詢語句數量;
Qcache_queries_in_cache mdash; 有多少查詢語句正緩存在查詢緩存中;
3) MyISAM 引擎
Key_blocks_used mdash; 索引緩存區內塊使用量,通過記錄歷史數據可以找出內存塊使用情況;
Key_blocks_unused mdash; 索引緩存區內存未使用的量,可以推斷出有索引緩存區的使用率;
Key_read_requests mdash; 直接通過索引緩存區獲得相應的數據,也即數據庫邏輯讀 IO 的量;
Key_reads mdash; 無法通過索引緩存區獲得相應的數據,必須讀文件系統或磁盤上的數據,也
即數據庫物理讀的量;
Key_write_requests mdash; 直接通過修改索引緩存區中的索引值的邏輯寫 IO 量;
Key_writes mdash; 無法通過直接修改索引緩存區中的索引值完成,必須直接修改文件系統或磁
盤上數據的物理寫 IO 量;
4) InnoDB 引擎
Innodb_buffer_pool_read_ahead_rnd mdash; InnoDB 引擎后臺讀線程隨機性讀而產生的 IO 數量,一般發生在掃描一個表數據,以隨機性的方式;
Innodb_buffer_pool_read_ahead_seq mdash; InnoDB 引擎后臺讀線程順序讀而產生的 IO 數量,一般發生在順序全表掃描;
Innodb_buffer_pool_read_requests mdash; InnoDB 引擎數據的邏輯讀 IO 量;
Innodb_buffer_pool_reads mdash; InnoDB 引擎數據的物理讀 IO 量;
Innodb_buffer_pool_wait_free mdash; 當 Innodb_buffer_pool 中無可用的空閑內存塊,且需要讀或創建一個內存塊,則需要刷新一頁,再分配給需要的線程
進行寫操作,這個時候就會發生等待而計數。因為 InnoDB 引擎表的數據都都是在 InnoDB 內存緩存區中進行讀寫操作,
然后由后臺線程負責把數據寫到磁盤上。
Innodb_buffer_pool_write_requests mdash; InnoDB 引擎數據寫向 InnoDB_buffer_pool_size 的邏輯寫 IO 量;
Innodb_rows_deleted mdash; InnoDB 引擎表數據被刪除的行數;
Innodb_rows_inserted mdash; 向 InnoDB 引擎表增加的記錄行數;
Innodb_rows_updated mdash; InnoDB 引擎表數據被修改的行數;
Innodb_rows_read mdash; 讀取 InnoDB 引擎表中數據的行數,UPDATE、DELETE、OPTIMIZE 等會對數據表對象有數據讀取的操作,都被計算在其內;
5) 事務相關
Com_commit mdash; 支持事務的引擎,進行的事務提交次數;
Com_rollback mdash; 支持事務的引擎,進行的事務回滾次數;
6) 臨時表或文件
Created_tmp_files mdash; MySQL 系統創建的臨時文件數量總和,不包含顯示創建的臨時表,另外臨時文件轉換成臨時表的話,則不一定一一對應,
也不一定是三分之一的關系。若是系統隱患創建的臨時表,則都是 MyISAM 格式的,所以會有三個臨時文件; 若是指定
臨時表存儲引擎為 heap,則是一個臨時文件;
Created_tmp_disk_tables mdash; MySQL 系統創建基于磁盤上的臨時表數量,臨時默認創建都是基于內存中,若是超過 tmp_table_size 或
max_heap_table_size 的大小,則會轉化成基于磁盤的臨時表;
Created_tmp_tables mdash; MySQL 系統創建的不管基于磁盤的,還是基于內存的,該值都增加;
7) 其他
Bytes_sent mdash; MySQL 服務器端發送給客戶端的字節數;
Bytes_received mdash; 所有客戶端發送給 MySQL 服務器端的字節數;
Slow_queries mdash; SQL 語句執行時間大于 long_query_time 值的數量;
Sort_range mdash; SQL 語句使用范圍排序的數量;
Sort_rows mdash; SQL 語句引起數據排序的總行數;
Sort_scan mdash; 要進行數據排序而對表掃描的 SQL 執行次數;
Aborted_connects mdash; 客戶端異常崩潰而沒有正常關閉數據庫連接線程的數量;
Connections mdash; 客戶端嘗試與 MySQL 服務器端建立連接的次數,失敗的次數也算在其內;
Uptime mdash; mysqld 服務進程運行的時長,單位秒;
數據采集方式
狀態性能數據的采集,不管用何辦法都是執行 SHOW GLOBAL STATUS; 然后再對需要的數據項,通過 shell 腳本的方式獲得;
或者
雙擊代碼全選
1SELECT VARIABLE_NAME, VARIABLE_VALUE FROM information_schema. GLOBAL_STATUS WHERE VARIABLE_NAME IN (hellip;);
采集到的數據,我們還需要進行分類對待,一類數據項只為某個時間點的狀態值,另外一類數據項為累計的值
數據展示分析
針對腳本程序自動采集的數據,作部分數據截圖展示,以及把部分參數數據導成 CVS 格式,然后在 Windows 環境下繪制曲線圖的方式,以便直觀地對比分析,另外也可以自己開發一套程序或者借助其他繪圖工具的方式繪制趨勢圖。
針對采集的數據,對部分參數(三個參數:Com_update、Innodb_buffer_pool_reads、Innodb_buffer_pool_read_requests) 做一個圖形化分析的效果展示,我們可以通過 SQL 語句生成 cvs 格式的數據,比如針 對 Com_update 數據每秒平均執行次數的數據導出 SQL 語句:
雙擊代碼全選
6SELECT M.CreateDate,M.total_num/N.total_num INTO OUTFILE com_update.cvs FROM performance_innodb M INNER JOIN(SELECT total_num,CreateDate FROM performance_innodb WHERE statu_item= Uptime AND CreateDate = 2011-10-12 AND CreateDate 2011-10-13 AND host_port=3308) N ON M.CreateDate=N.CreateDate WHERE host_port=3308 and statu_item= Com_update and M.CreateDate = 2011-10-12 AND M.CreateDate 2011-10-13 ;
1) Performance_innodb 表數據
2) Com_update 數據曲線圖
3) Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests 曲線圖
備注:
MySQL 數據庫在跑熱之后,且需要操作的業務數據基本都存儲在內存中,為此 InnoDB 引擎表的物理 IO 讀 / 每秒 相比 InnoDB 引擎表的邏輯 IO 讀 / 每秒非常小,為此曲線圖中看到幾乎接近水平軸。
到此,關于“采集 MySQL 數據庫運行狀態數據的方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注丸趣 TV 網站,丸趣 TV 小編會繼續努力為大家帶來更多實用的文章!