8.mysql為什么會抖一下2022-02-20

主要有四個原因:mysql的內(nèi)存滿了、redo log日志滿了、空閑時間、重啟數(shù)據(jù)庫。

一、分析以下四種原因?qū)π阅艿挠绊?/h4>

這種影響在實際線上環(huán)境主要是內(nèi)存和redo log 日志對性能的影響。

1.InnoDB用緩沖池(pool buffer)管理內(nèi)存,緩沖池中內(nèi)存頁有哪三種狀態(tài)?

(1)沒有使用
(2)使用了有臟內(nèi)存頁(臟內(nèi)存頁:內(nèi)存的數(shù)據(jù)和磁盤數(shù)據(jù)不一致的內(nèi)存頁)
(3)使用了是干凈頁

2.簡單說說在內(nèi)存滿了的時候會怎么處理?

當(dāng)內(nèi)存滿了時,如果內(nèi)存中有查詢的數(shù)據(jù)頁,就直接返回;沒有的話就要淘汰掉最久不使用的數(shù)據(jù)頁,被淘汰的數(shù)據(jù)頁如果是臟頁,還會把臟頁持久化的磁盤后,空出的內(nèi)存才能使用。

flush一個臟頁時是否使用連坐機制怎么設(shè)置?
innodb_flush_neighbors = 1 時會使用連坐機制,一般是機械磁盤使用,連坐意思就是當(dāng)有數(shù)據(jù)頁是臟頁需要持久化后,會判斷相鄰的數(shù)據(jù)頁是否為臟頁,持久化的操作會連續(xù)下去,直到?jīng)]有臟頁為止。
innodb_flush_neighbors = 0 時,不會觸發(fā)連坐機制,一般時ssd固態(tài)硬盤使用,因為IOPS(io每秒輸入輸出量)并不是瓶頸。

二、flush臟頁的策略

1.innodb_io_capacity

innodb_io_capacity是InnoDB刷臟頁的速度。

引擎怎么控速度的?
引擎怎么控速度主要需要考慮兩個因素:一是臟頁的比例,二是磁盤的io效率。
選出F1(N)和F2(M)的較大值記錄為R

flush速度 = innodb_io_capacity * R%

2.怎么得到臟頁比例和磁盤io?

innodb_max_dirty_pages_pct:是臟頁比例的上限,默認(rèn)值是75%。InnoDB會根據(jù)當(dāng)前臟頁的比例N,根據(jù)函數(shù)算法的得到F1(N);

innoDB 每次寫入的日志都有一個序號,當(dāng)前寫入的序號跟 checkpoint 對應(yīng)的序號之間的差值M,根據(jù)函數(shù)算法的得到F2(M);

三、思考題

一個內(nèi)存配置為 128GB、innodb_io_capacity 設(shè)置為 20000 的大規(guī)格實例,正常會建議你將 redo log 設(shè)置成 4 個 1GB 的文件。但如果你在配置的時候不慎將 redo log 設(shè)置成了 1 個 100M 的文件,會發(fā)生什么情況呢?又為什么會出現(xiàn)這樣的情況呢?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容