1. 程式人生 > >Mysql怎麽判斷繁忙 checkpoint機制 innodb的主要參數

Mysql怎麽判斷繁忙 checkpoint機制 innodb的主要參數

查看 merge ODB 存儲引擎 cti 回滾 base rap cpc

Mysql怎麽判斷繁忙,innodb的主要參數,checkpoint機制,show engine innodb status 2018年07月13日 15:45:36 anzhen0429 閱讀數:295 show engine innodb status G
  • 四個參數能反應出來什麽
Checkpoint詳解
  • 引子
  • check point是做什麽的
  • 作用
  • Checkpoint所做的事情
  • checkpoint分類
  • checkpoint的具體解釋
    • Sharp Checkpoint完全檢查點
    • Fuzzy Checkpoint模糊檢查點
      • Fuzzy checkpoint工作過程
      • Fuzzy Checkpoint又分為4種
        • 1Master Thread Checkpoint
        • 2FLUSH_LRU_LIST Checkpoint
        • 3AsyncSync Flush list Checkpoint
        • 4Dirty Page too much Checkpoint
能夠觸發寫操作的一些因素
  • 常規性寫入操作影響不大
  • flush 列表太大
  • 可以覆蓋的日誌太少了影響大
控制寫入操作
  • 控制每次寫入的量
  • 如何來確認系統的寫入操作是大還是小
  • 參數innodb_fast_shutdown臟頁刷新控制參數
  • 恢復參數 innodb_force_recovery
前滾和回滾數據庫性能監控
  • 性能指標
壓力測試的工具
  • TPCCMySQL 小工具的使用
數據庫性能相關指標小結
  • show glabal status like wait
  • show glabal status like thread
    • Threads_running和 thread_concurrency的關系
    • max_connection允許的最大連接數
  • show glabal status like abor
  • show glabal status like question
  • show glabal status like que
    • Com_stmt_execute累積的SQL語句的執行數量
  • show glabal status like full
  • show glabal status like scan
  • show glabal status like slow
  • show glabal status like read
  • show glabal status like write
  • show glabal status like log
  • show glabal status like commit
  • show glabal status like Com
  • show glabal status like disk
  • show glabal status like max
  • show glabal status like page
  • show glabal status like fsync
  • show global status like dbl


show engine innodb status \G

  1. mysql> show engine innodb status \G
  2. ---LOG
  3. (Innodb 事務日誌相關信息,包括當前的日誌序列號(Log sequence number),已經刷新同步到那個序列號,最近的check point到那個序列號了。除此之外,還顯示了系統從啟動到現在已經做了多少次check point,多少次日誌刷新。)
  4. ---(註:小括號為官方解釋。)
  5. Log sequence number 2560255(當前的日誌序列號,log buffer中已經寫入的LSN值,//字節,日誌生成的最新位置,最新位置出現在log buffer中)
  6. Log flushed up to 2560255(刷新到日誌重做日誌文件的lsn,已經刷新到redo logfile的LSN值//字節,日誌已經寫入到log file的位置,1-2=log buffer日誌量,最好是<=1M)
  7. Pages flushed up to 2560255(寫入磁盤的臟頁的lsn。記錄在checkpoint中//字節,臟頁的數量(日誌字節數來衡量),2-3=臟頁的數量(日誌字節為單位))
  8. Last checkpoint at 2560246(刷新到磁盤的lsn,最近一次checkpoint時的LSN值//字節,共享表空間上的日誌記錄點,最後一次檢查點,及崩潰恢復時指定的起點,3-4就是崩潰恢復多跑的日誌,值越大說明需要提升checkpoint的跟進速度)
  9. 0 pending(掛起) log flushes, 0 pending chkp writes
  10. 10 log i/o‘s done, 0.00 log i/o‘s/second

解析:

  • Log sequence number:日誌序列號:現在已經產生到的日誌量(字節)
    • 不同時刻的lsn的值的差值/時間差==日誌的產生速度
  • Log flushed up to:刷出去了多少日誌
    • Log sequence number - Log flushed up to== 當前logbuffer的值
    • 所以,此值應<<1M
    • 不同時刻的差值/時間間隔==日誌的寫入速度
  • Pages flushed up to
    • Log sequence number - Pages flushed up to 值很小,說明臟頁寫入的很快
  • Last checkpoint at:檢查點。系統啟動的時候,日誌恢復的起點,肯定比Pfut的值低。防止系統崩
    • Log flushed up to - Last checkpoint at == 系統要恢復的日誌數
    • Pages flushed up to - Last checkpoint at == checkpoint的跟進速度,如果大的話,說明checkpoint需要增大。

技術分享圖片

問:有5個2個G的日誌,Log flushed up to - Pages flushed up to 的值必須保證至少是多大?
答:6個G。因為,當前用著一個,必須保證想覆蓋的下一個是寫進去的,所以,只能是3個日誌沒寫進去,即6個G。


四個參數能反應出來什麽

1.日誌的生成速度?

  • 不同時刻的Log sequence number的值的差/時間差==每秒生成的日誌量

2.日誌的寫入速度?

  • Log flushed up to

3.臟頁的寫入速度?

  • Log flushed up to - Pages flushed up to ==臟頁的寫入速度

4.數據庫的啟動時間是多少?

  • 啟動時要回滾的日誌數

Checkpoint詳解

引子

checkpoint是一個內部事件,這個事件激活以後會觸發數據庫寫進程(DBWR)將數據緩沖(DATABUFFER CACHE)中的臟數據塊寫出到數據文件中。

check point是做什麽的

在數據庫系統中,寫日誌和寫數據文件是數據庫中IO消耗最大的兩種操作,在這兩種操作中寫數據文件屬於分散寫,寫日誌文件是順序寫,因此為了保證數據庫的性能,通常數據庫都是保證在提交(commit)完成之前要先保證日誌都被寫入到日誌文件中,而臟數據塊則保存在數據緩存(buffer cache)中再不定期的分批寫入到數據文件中。也就是說日誌寫入和提交操作是同步的,而數據寫入和提交操作是不同步的。這樣就存在一個問題,當一個數據庫崩潰的時候並不能保證緩存裏面的臟數據全部寫入到數據文件中,這樣在實例啟動的時候就要使用日誌文件進行恢復操作,將數據庫恢復到崩潰之前的狀態,保證數據的一致性。檢查點是這個過程中的重要機制,通過它來確定,恢復時哪些重做日誌應該被掃描並應用於恢復

一般所說的checkpoint是一個數據庫事件(event),checkpoint事件由checkpoint進程(LGWR/CKPT進程)發出,當checkpoint事件發生時DBWn會將臟塊寫入到磁盤中,同時數據文件和控制文件的文件頭也會被更新以記錄checkpoint信息。

作用

checkpoint主要2個作用:

  • 保證數據庫的一致性,這是指將臟數據寫入到硬盤,保證內存和硬盤上的數據是一樣的;
  • 縮短實例恢復的時間,實例恢復要把實例異常關閉前沒有寫出到硬盤的臟數據通過日誌進行恢復。如果臟塊過多,實例恢復的時間也會很長,檢查點的發生可以減少臟塊的數量,從而提高實例恢復的時間。

    通俗的說checkpoint就像word的自動保存一樣。

Checkpoint所做的事情

將緩沖池(buffer pool)中的臟頁刷回磁盤。每次刷新多少頁到磁盤,每次從哪裏取臟頁,以及什麽時間觸發Checkpoint。在InnoDB存儲引擎內部,Checkpoint負責這些事。

checkpoint分類

有2種Checkpoint:

  • Sharp Checkpoint(完全檢查點)
  • Fuzzy Checkpoint(模糊檢查點)

checkpoint的具體解釋

1.Sharp Checkpoint(完全檢查點)

數據庫關閉時,會將所有的臟頁都刷新回磁盤,這是默認的工作方式。參數 innodb_fast_shutdown=1

2.Fuzzy Checkpoint(模糊檢查點)

但是若在數據庫運行時也使用完全檢查點,那數據庫的可用性就會受到很大影響。
所以,在InnoDB存儲引擎內部使用Fuzzy Checkpoint進行頁的刷新,即只刷新一部分臟頁,而不是將所有的臟頁刷回磁盤。

Fuzzy checkpoint工作過程

  • 先讀LRU list,把一部分臟頁(相對冷的)寫到磁盤上;
  • 再找Frush list,把最早臟的寫到磁盤上。(更新檢查點)

Fuzzy Checkpoint又分為4種

  • ①Master Thread Checkpoint
  • ②FLUSH_LRU_LIST Checkpoint
  • ③Async/Sync Flush Checkpoint(異步/同步 flush檢查點)
  • ④Dirty Page too much Checkpoint
1)Master Thread Checkpoint

對於Master Thread 中發生的Checkpoint,差不多以每秒或每十秒的速度從緩沖池的臟頁列表中刷新一定比例的頁回去磁盤。這個過程是異步的,即此時InnoDB存儲引擎可以進行其他的操作,用戶查詢線程不會阻塞。
–》即:常規性的fuzzy checkpoint,寫入操作不阻塞用戶線程

2)FLUSH_LRU_LIST Checkpoint

FLUSH_LRU_LIST Checkpoint是因為InnoDB存儲引擎需要保證LRU列表中需要有差不多100個空閑頁可供使用。在innodb1.1X版本以前,需要檢查LRU列表中是否有足夠的可用空間操作發生在用戶查詢線程中,顯然會阻塞用戶的查詢操作。若沒有100個可用空閑頁,那麽innodb會將LRU列表末端的頁移除。如果這些頁中有臟頁,那就要進行Checkpoint,而這些頁是來自LRU列表的,因此成為FLUSH_LRU_LIST Checkpoint。
–》即:Flush lru list checkpoint:flush list上的臟頁數量超過閾值;會阻塞用戶線程。

3)Async/Sync Flush list Checkpoint

(在數據庫的報錯日誌裏能夠看到!)
Async/Sync Flush list Checkpoint指的是重做日誌文件不可用的情況,這時需要強制將一些頁刷新回磁盤,而此時臟頁是從臟頁列表中選取的。若將已經寫入到redo log的LSN(Log sequence number)記作redo_lsn,將已經刷新回磁盤最新頁的LSN記為checkpoint_lsn,則可定義:
redo_lsn - checkpoint_lsn == checkpoint_age
又定義:
async_water_mark==75% * total_redo_log_file_size
sync_water_mark==90% * total_redo_log_file_size

假設每個redo log的大小是1G,並且定義兩個redo log,則redo log總共2G。
則,async_water_mark=1.5G,sync_water_mark=1.8G。則:

  • checkpoint_age< async_water_mark 時,不需要刷新任何臟頁到磁盤;
  • ② **async_water_mark < checkpoint_age<
    sync_water_mark**(即:有25%的日誌能被覆蓋時) 時,觸發Async Flush,從Async Flush
    列表中刷新足夠的臟頁回磁盤。最終滿足①;
  • checkpoint_age > sync_water_mark
    時(即有90%的日誌能被覆蓋時),極少發生,除非設置的redo log太小,並且在進行類似LOAD DATA的BULK
    INSERT操作。此時觸發Sync Flush操作,從Flush列表中刷新足夠的臟頁回磁盤,使得刷新後滿足①。

註意:在較早版本的innodb中,Async Flush list Checkpoint會阻塞發現問題的用戶查詢線程,而Sync Flush list Checkpoint會阻塞所有的用戶查詢線程,並且等待臟頁刷新完成。
但在5.6版本(即innodb1.2x版本)開始,這部分的刷新操作同樣放入到了單獨的Page Cleaner Thread中,所以不會再阻塞用戶查詢線程了。

技術分享圖片

4)Dirty Page too much Checkpoint

即臟頁的數量太多,導致innodb存儲引擎強制進行 檢查點。
目的:還是為了保證buffer pool緩沖池中有足夠的可用的頁。
可由參數 innodb_max_dirty_pages_pct 控制。

技術分享圖片

innodb_max_dirty_pages_pct參數官方文檔解釋:

技術分享圖片

innodb_max_dirty_pages_pct_lwm參數解釋:

技術分享圖片

發現,該參數值默認為75,即:當buffer pool中臟頁的數量占據75%時,強制進行Checkpoint,刷新一部分的臟頁到磁盤。
(在innodb1.0x以前,該參數默認是90,之後的版本都為75。)


能夠觸發寫操作的一些因素

1. 常規性寫入操作:(影響不大)

  • 1.master thread
  • 2.io write 寫入線程
  • 3.每次寫入的量 –》怎麽控制? 增加寫入線程的數量。

2. flush 列表太大

會觸發對用戶線程的阻塞
技術分享圖片
增加後:頻繁的寫。(影響不大)

3. 可以覆蓋的日誌太少了:(影響大)

  • 增加日誌的大小和組的數量
  • 避免同步和異步
  • 臟頁的總量【一般調成90%】(影響大)

技術分享圖片

防止因為寫入操作而導致系統hang住!


控制寫入操作

1.控制每次寫入的量

  • 1.innodb_io_capacity(可以調節每次寫入的數據量)
    • 假設我們使用閃盤,io可以達到50萬iops
    • 【IOPS:Input/Output Operations Per Second,即每秒進行讀寫(I/O)操作的次數,多用於數據庫等場合,衡量隨機訪問的性能。】
      200,300,400,500
      看一下臟頁的數量是否還是過多(指標)
  • 2.innodb_lru_scan_depth
    • 每次查找臟頁的深度
  • 3.調整log file的大小和組數
  • 4.臟頁的比例:75%(默認)、90%(推薦)(但系統崩潰的時候恢復時會比較慢)…

如何來確認系統的寫入操作是大還是小

1、如何來調整寫入這個操作?

  • innodb_io_capacity(容量)–》調大可加大臟頁寫入速度
  • innodb_lru_scan_depth –》調大可加大臟頁寫入速度
  • 增加log file組數和大小
  • 加大或者縮小innodb_max_dirty_pages_pct

2、為什麽增大或者減小寫入操作?

  • 1.我們要確認系統是寫入還是讀取為主的系統(調不調)
    如果是以寫入為主的系統,就需要加大上面的相關參數。
  • 2.觀察我們的系統的io狀況【iostat -x 1】【%util達到70%左右、w/s也很好,說明參數調的很好】
    來確認調整的合理程度。(調多少)
  • 3.通過double write 寫入來監控我們的系統的寫入壓力夠不夠(讓寫入壓力大一些好)

技術分享圖片
(如果w/s太大,就是寫的太快,此時就應降低寫功能)

wrqm/s 反映的是double write的功能
InnoDB_dblwr_writes:寫的次數
InnoDB_dblwr_pages_written:寫的頁數
pages:writes的值能夠看一次寫多少頁】

  • 4.通過日誌產生速度和臟頁刷新速度的差值
  • 5.臟頁和pool的比值(看此時臟頁的數量大小)

參數innodb_fast_shutdown臟頁刷新控制參數

在關閉時,參數innodb_fast_shutdown影響著表的存儲引擎為innodb的行為。該參數可取值為0、1、2,默認值為1。

  • 0:表示在MySQL數據庫關閉時,innodb需要完成所有的full purge()和merge(合並) insert buffer
    ,並且將所有的臟頁刷新回磁盤。這需要一段時間,有時甚至需要幾個小時來完成。如果在進行innodb升級時,必須將這個參數調為0,然後再關閉數據庫。
  • 1:是參數innodb_fast_shutdown的默認值,表示不需要完成上述的full purge和merge
    insert操作,但是在緩沖池中的一些數據臟頁還是會刷新回磁盤。
  • 2:表示不完成full purge和merge insert
    buffer操作,也不將緩沖池中的數據臟頁寫回磁盤,而是將日誌都寫入日誌文件。這樣不會有任何事務的丟失,但是下次MySQL數據庫啟動時,會進行恢復操作。

當正常關閉MySQL數據庫時,下次的啟動應該會非常“正常”。但是如果沒有正常地關閉數據庫,比如用kill 命令關閉數據庫,在MySQL數據庫運行中重啟了服務器,或者在關閉數據庫時,將參數innodb_fast_shutdown設為了2時,下次MySQL數據庫啟動時都會對InnoDB存儲引擎的表進行恢復操作。

恢復參數 innodb_force_recovery

參數 innodb_force_recovery 影響了整個innodb存儲引擎恢復的狀況。該參數值默認為0,代表當發生需要恢復時,進行所有的恢復操作,當不能進行有效恢復時,如數據頁發生了corruption(損壞),mysql數據庫可能發生宕機(crash),並把錯誤寫到錯誤日誌去。

但是,在某些情況下,可能並不需要進行完整的恢復操作,因為用戶自己知道怎麽恢復。比如在對一個表進行alter table操作時發生意外了,數據庫重啟時會對innodb表進行回滾操作,對於一個大表來說這需要很長時間,可能是幾個小時。這時用戶可以自行進行恢復,如可以把表刪除,從備份中重新導入數據到表,可能這些操作的速度要遠遠快於回滾操作。

參數innodb_force_recovery 還可以設置為6個非零值:1~6。大的數字包含了前面所有小數字表示的影響:

  • 1:SRV_FORCE_IGNORE_CORRUPT:忽略檢查到的corrupt頁。
  • 2:SRV_FORCE_NO_TRX_UNDO:阻止Master Thread 線程的運行,如Master Thread線程需要進行full purge操作,而這會導致crash。
  • 3:SRV_FORCE_NO_TRX_UNDO:不進行事務的回滾操作。
  • 4:SRV_FORCE_NO_IBUF_MERGE:不進行插入緩沖的合並操作。
  • 5:SRV_FORCE_NO_UNDO_LOG_SCAN:不查看撤銷日誌(undo log),InnoDB存儲引擎會將未提交的事務視為已提交。
  • 6:SRV_FORCE_NO_LOG_REDO:不進行前滾的操作。

需要註意:在設置了參數innodb_force_recovery大於0後,用戶可以對表進行select、create和drop操作,但insert、update和delete這類DML操作是不允許的。


前滾和回滾

如果系統因為執行了一個非常大的DML或者DDL操作,導致系統hang住,我們想斷掉這個操作,怎麽辦?
①kill thread –》要前滾
技術分享圖片

②kill process –》要回滾
技術分享圖片

數據庫性能監控

1.性能指標

怎麽來監控?
(1)通過show engine innodb status \G 來看log的部分:

  1. Log sequence number 2560255 (當前的日誌序列號)
  2. Log flushed up to 2560255 (刷新到日誌重做日誌文件的lsn)
  3. Pages flushed up to 2560255 (寫入磁盤的臟頁的lsn。記錄在checkpoint中)
  4. Last checkpoint at 2560246 (刷新到磁盤的lsn)
  5. 0 pending(掛起) log flushes, 0 pending chkp writes
  6. 10 log i/o‘s done, 0.00 log i/o‘s/second
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

(2)通過一些參數來看:

  • innodb_dblwr_pages_written:看寫的快慢
  • Com_select
  • Com_delete
  • Com_update -》增刪改查的統計量
  • Com_commit -》提交的事務數
  • InnoDB_dblwr_writes:寫的次數
  • InnoDB_dblwr_pages_written:寫的頁數
    【pages:writes的值能夠看一次寫多少頁】

(3)iostat
觀察系統的io狀況的命令

壓力測試的工具

  • 測IO的:測出IOPS–》fifo、orion等
  • 測網絡的:測出吞吐量–》傳包
  • 測數據庫

    • tpcc-mysql :它自己建立業務系統,模擬業務操作,進行壓力測試。
    • loadrunner:可以模擬我們的真實的生產系統,進行壓力測試。(業務部門做的,需要開發編程等…)
    • tcpcopy:引流進行壓力測試。

TPCCMySQL 小工具的使用

README手冊:

  1. 1.Build binaries
  2. cd scr ; make ( you should have mysql_config available in $PATH)
  3. 2.Load data
  4. create database mysqladmin create tpcc1000
  5. create tables mysql tpcc1000 < create_table.sql
  6. create indexes and FK ( this step can be done after loading data) mysql tpcc1000 < add_fkey_idx.sql
  7. ④ populate data
  8. 1)simple step tpcc_load -h127.0.0.1 -d tpcc1000 -u root -p "" -w 1000 |hostname:port| |dbname| |user| |password| |WAREHOUSES| ref. tpcc_load --help for all options
  9. 2)load data in parallel check load.sh script
  10. 3.start benchmark
  11. ①./tpcc_start -h127.0.0.1 -P3306 -dtpcc1000 -uroot -w10 -c32 -r10 -l10800
  12. ②|hostname| |port| |dbname| |user| |WAREHOUSES| |CONNECTIONS| |WARMUP TIME| |BENCHMARK TIME|
  13. ③ref. tpcc_start --help for all options
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

常用參數:

  • -w 10 –》加載10個數據倉庫就不少了!(實驗用三四個就行!)
  • -h 往哪個地址
  • -d 哪個數據庫

技術分享圖片


數據庫性能相關指標小結

show glabal status like ‘%wait%’;
show glabal status like ‘%thread%’;
show glabal status like ‘%abor%’;
show glabal status like ‘%question%’;
show glabal status like ‘%que%’;
show glabal status like ‘%full%’;
show glabal status like ‘%scan%’;
show glabal status like ‘%slow%’;
show glabal status like ‘%read%’;
show glabal status like ‘%write%’;
show glabal status like ‘%log%’;
show glabal status like ‘%commit%’;
show glabal status like ‘%Com%’;
QPS
TPS
buffer hit
show glabal status like ‘%disk%’;
show glabal status like ‘%max%’;
show glabal status like ‘%page%’;
show glabal status like ‘%fsync%’;

show status 看的是運行狀態,是不能調的!
show variables 看的是變量,可以調!

上面這些參數的詳解:

1.show glabal status like ‘%wait%’;

技術分享圖片

Innodb_buffer_pool_wait_free:buffer pool沒有空閑內存了。【如果每秒增長的值比較高 –》能覆蓋的磁盤太少了!即 臟頁太多!!】
【臟頁太多的一個最經典的指標!!!】
Innodb_log_waits:因log buffer不足導致等待的次數。

2.show glabal status like ‘%thread%’;

技術分享圖片

  • Threads_cache:在緩存池子裏緩存了幾個。例如先建立20個線程放在池子裏,當短連接上來之後,就分配給它,用完就釋放
  • Threads_connected:當前的連接數
  • Threads_created:系統一共累計建立了多少線程,若此值很大,則系統頻繁的建立和斷開線程!則 thread_cache_size小了,容易幹(溢出)!
  • Threads_running:當前活躍的線程的數量。一共有多少個想幹活的。

當created的值很大時:
show variables like ‘%thread%’;

技術分享圖片

看到thread_cache_size的值為9。假設有100個線程上來了,緩存池子緩存了9個,忽然斷開。則需要新建立91個線程。
所以,當thread_cache_size增大,可理解為池子增多了。則Threads_created的數量就會降下來了。
thread_concurrency:真正在幹活的數量。(截的圖上沒有…)
48core*2個線程==96個線程 –》cpu能夠服務的線程數

Threads_running和 thread_concurrency的關系

  • ①running的數<64,就把concurrency設置為0
  • ②running值>>128,就把concurrency設置為128(最大值)
  • ③running值∈(10,200)–》嘗試調整:concurrency
    先調成60:然後算tps和qps;然後80,若發現tps和qps上升了,則好;再100,若發現tps或qps下降了,則降低,調成80就好。

我們有個限制:concurrency<=cpu的core *2/4 –》(4是能並發的處理4個線程)

max_connection:允許的最大連接數

默認151。最好調成三四百。
所以,當Threads_created 等於151時,就該調max_connection了。

3.show glabal status like ‘%abor%’;

被異常終止的連接的數量。

技術分享圖片

Aborted_connection的值很大時,說明被異常終止的連接的數量很多。

4.show glabal status like ‘%question%’;

描述數據庫的處理能力。

技術分享圖片

5.show glabal status like ‘%que%’;

Queries:sql查詢(增刪改)的數量。

技術分享圖片

Com_stmt_execute:累積的SQL語句的執行數量。

【發現Queryes的值與它差不多】

技術分享圖片

6.show glabal status like ‘%full%’;

技術分享圖片

select_full_join:應用到其他表,沒有使用索引的連接的數量;
select_full_range_join:應用到其他表,在引用的表中使用範圍搜索的連接的數量。

7.show glabal status like ‘%scan%’;

技術分享圖片

Select_scan:系統全表掃描的累計值。

8.show glabal status like ‘%slow%’;

技術分享圖片

Slow_queries:慢查詢(後面會講)的數量。

技術分享圖片

slow_launch_time:2秒。
一個SQL語句的執行時間超過2秒–》認為是一個慢sql,就記錄在/mysql/data/slowmysql.log,同時slow_queries的值+1

9.show glabal status like ‘%read%’;

read往往意味著物理讀。

技術分享圖片

  • Innodb_buffer_pool_reads:在buffer pool裏找值沒找到發生物理讀的累積次數。【不同時刻的差值/間隔==buffer pool每秒發生的物理讀】
  • Innodb_buffer_pool_read_ahead:預讀 數是169。此值如果高的時候,就是全表掃描。
  • Innodb_buffer_pool_read_requests:innodb_buffer 中總的請求數。
    • (buffer hit)命中率==(requests-reads)/requests
  • Innodb_data_pending_reads:掛起數。數據庫系統裏面曾經出現的IO請求,但由於IO已經滿了,就會出現pending,被掛起了。

10.show glabal status like ‘%write%’;

寫請求。

技術分享圖片

  • Innodb_buffer_pool_write_requests:寫請求的總數。
  • Innodb_dblwr_writes:double write 寫的次數。(寫臟頁)
  • innodb_log_writes:日誌寫的次數。【寫負載一般關註兩點:寫臟頁、日誌寫】
  • innodb_os_log_pending_writes:日誌掛起的次數,【大了就說明:寫功能可能壞了–》cache的電池】

11.show glabal status like ‘%log%’;

技術分享圖片

Innodb_log_waits:先往log buffer裏寫,logfile裏寫redo log時,如果滿了,就會有等待。

12.show glabal status like ‘%commit%’;

技術分享圖片

Com_commit的提交數量。與rollback一起,可以算 命中率。

13.show glabal status like ‘%Com%’;

關於累計值。

技術分享圖片

經常關註的幾個:

  • Com_commit:執行的commit的數量;
  • Com_delete:執行的刪除數量;
  • Com_insert:執行的插入數量;
  • Com_select:執行的查詢數量;
  • Com_stmt_execute:總的sql執行的數量。
  • QPS:不同時刻的Questions的差值/時間差
    • QPS:Query Per Second,每秒查詢率
  • TPS:(Com_rollbacl+Com_commit)/時間差
    • TPS:Transaction Per Second,每秒事務處理量。

14.show glabal status like ‘%disk%’;

技術分享圖片

15.show glabal status like ‘%max%’;

技術分享圖片

  • ①Connection_errors_max_connections的值>0:因為超過了最大連接數而導致的錯誤,應該保持是0才正常。
  • ②Max_used_connections:一定<<事務的Max_connections

16.show glabal status like ‘%page%’;

技術分享圖片

  • Innodb_buffer_pool_pages_tocal:innodb buffer pool的總大小;
  • Innodb_buffer_pool_pages_dirty:臟頁的數量
  • Innodb_dblwr_pages_written:double write 的字節數

17.show glabal status like ‘%fsync%’;

文件系統。

技術分享圖片

  • Innodb_data_fsyncs:是物理寫。跳過文件系統的緩存,直接往磁盤寫。一般指日誌。

一般是:數據先寫到文件系統的緩存,然後再寫到磁盤!

  • Innodb_data_pending_fsyncs:寫日誌的時候的物理寫。
  • Innodb_os_log_pending_fsyncs:redo log的pending fsyncs() 次數

18.show global status like ‘%dbl%’;

判斷數據庫系統繁忙度。

技術分享圖片
(現在的比值是21:1,意思就是每次寫,寫21個頁。)
註意比值:當written/writes比值為128:1時,就是寫操作比較繁忙,壓力比較大。
小於128時,就是不繁忙。

為什麽是128:1就是繁忙的?(圖解:)
技術分享圖片

  • 0

  • 2

  • 收藏
  • 分享
  • 下一篇
    1. show engine innodb status \G
      1. 四個參數能反應出來什麽
    2. Checkpoint詳解
      1. 引子
      2. check point是做什麽的
      3. 作用
      4. Checkpoint所做的事情
      5. checkpoint分類
      6. checkpoint的具體解釋
        1. Sharp Checkpoint(完全檢查點)
        2. Fuzzy Checkpoint(模糊檢查點)
    3. 能夠觸發寫操作的一些因素
      1. 常規性寫入操作:(影響不大)
      2. flush 列表太大
      3. 可以覆蓋的日誌太少了:(影響大)
    4. 控制寫入操作
      1. 控制每次寫入的量
      2. 如何來確認系統的寫入操作是大還是小
      3. 參數innodb_fast_shutdown臟頁刷新控制參數
      4. 恢復參數 innodb_force_recovery
    5. 前滾和回滾
    6. 數據庫性能監控
      1. 性能指標
    7. 壓力測試的工具
      1. TPCCMySQL 小工具的使用
    8. 數據庫性能相關指標小結
      1. show glabal status like ‘%wait%’;
      2. show glabal status like ‘%thread%’;
        1. Threads_running和 thread_concurrency的關系
        2. max_connection:允許的最大連接數
      3. show glabal status like ‘%abor%’;
      4. show glabal status like ‘%question%’;
      5. show glabal status like ‘%que%’;
        1. Com_stmt_execute:累積的SQL語句的執行數量。
      6. show glabal status like ‘%full%’;
      7. show glabal status like ‘%scan%’;
      8. show glabal status like ‘%slow%’;
      9. show glabal status like ‘%read%’;
      10. show glabal status like ‘%write%’;
      11. show glabal status like ‘%log%’;
      12. show glabal status like ‘%commit%’;
      13. show glabal status like ‘%Com%’;
      14. show glabal status like ‘%disk%’;
      15. show glabal status like ‘%max%’;
      16. show glabal status like ‘%page%’;
      17. show glabal status like ‘%fsync%’;
      18. show global status like ‘%dbl%’;

MySQL-Checkpoint

Mysql怎麽判斷繁忙 checkpoint機制 innodb的主要參數