濮阳杆衣贸易有限公司

主頁 > 知識(shí)庫 > MySQL延遲問題和數(shù)據(jù)刷盤策略流程分析

MySQL延遲問題和數(shù)據(jù)刷盤策略流程分析

熱門標(biāo)簽:在哪里申請(qǐng)400電話 常州網(wǎng)絡(luò)外呼系統(tǒng)開發(fā) 巫師三血與酒地圖標(biāo)注 銷售語音電話機(jī)器人 萊西市地圖標(biāo)注 安徽ai電話電銷機(jī)器人有效果嗎 外呼系統(tǒng)電銷受騙 走過哪個(gè)省地圖標(biāo)注 400電話申請(qǐng)信用卡

一、MySQL復(fù)制流程

官方文檔流程如下:

MySQL延遲問題和數(shù)據(jù)刷盤策略

1、絕對(duì)的延時(shí),相對(duì)的同步

2、純寫操作,線上標(biāo)準(zhǔn)配置下,從庫壓力大于主庫,最起碼從庫有relaylog的寫入。

二、MySQL延遲問題分析

1、主庫DML請(qǐng)求頻繁

原因:主庫并發(fā)寫入數(shù)據(jù),而從庫為單線程應(yīng)用日志,很容易造成relaylog堆積,產(chǎn)生延遲。

解決思路:做sharding,打散寫請(qǐng)求。考慮升級(jí)到MySQL5.7+,開啟基于邏輯時(shí)鐘的并行復(fù)制。

2、主庫執(zhí)行大事務(wù)

原因:類似主庫花費(fèi)很長時(shí)間更新了一張大表,在主從庫配置相近的情況下,從庫也需要花幾乎同樣的時(shí)間更新這張大表,此時(shí)從庫延遲開始堆積,后續(xù)的events無法更新。

解決思路:拆分大事務(wù),及時(shí)提交。

3、主庫對(duì)大表執(zhí)行DDL語句

原因:DDL未開始執(zhí)行,被阻塞,檢查到位點(diǎn)不變;DDL正在執(zhí)行,單線程應(yīng)用導(dǎo)致延遲增加,位點(diǎn)不變。

解決思路:找到被阻塞DDL或是寫操作的查詢,干掉該查詢,讓DDL正常在從庫上執(zhí)行;業(yè)務(wù)低峰期執(zhí)行,盡量使用支持OnlineDDL的高版本MySQL。

4、主從實(shí)例配置不一致

原因:硬件上:主庫實(shí)例服務(wù)器使用SSD,而從庫實(shí)例服務(wù)器使用普通SAS盤、cpu主頻不一致等;配置上:如RAID卡寫策略不一致,OS內(nèi)核參數(shù)設(shè)置不一致,MySQL落盤策略(innodb_flush_log_at_trx_commit和sync_binlog等)不一致等

解決思路:盡量統(tǒng)一DB機(jī)器的配置(包括硬件及選項(xiàng)參數(shù));甚至對(duì)于某些OLAP業(yè)務(wù),從庫實(shí)例硬件配置高于主庫等。

5、從庫自身壓力過大

原因:從庫執(zhí)行大量select請(qǐng)求,或業(yè)務(wù)大部分select請(qǐng)求被路由到從庫實(shí)例上,甚至大量OLAP業(yè)務(wù),或者從庫正在備份等,此時(shí)可能造成cpu負(fù)載過高,io利用率過高等,導(dǎo)致SQLThread應(yīng)用過慢。

解決思路:建立更多西安數(shù)據(jù)庫培訓(xùn)從庫,打散讀請(qǐng)求,降低現(xiàn)有從庫實(shí)例的壓力。

也可以調(diào)整innodb_flush_log_at_trx_commit=0和sync_binlog=0刷盤參數(shù)來緩解IO壓力來降低主從延遲。

三、大促期間CPU過高問題

現(xiàn)象:

高并發(fā)導(dǎo)致CPU負(fù)載過高,處理請(qǐng)求時(shí)間拉長,逐步積壓,最終導(dǎo)致服務(wù)不可用;大量的慢SQL導(dǎo)致CPU負(fù)載過高。

解決思路:

基本上是禁止或是慎重考慮數(shù)據(jù)庫主從切換,這個(gè)解決不了根本問題,需要研發(fā)配合根治SQL問題,也可以服務(wù)降級(jí),容器的話可以動(dòng)態(tài)擴(kuò)容CPU;和業(yè)務(wù)協(xié)商啟動(dòng)pt-kill查殺只讀慢SQL;查看是否可以通過增加一般索引或是聯(lián)合索引來解決慢SQL問題,但此時(shí)要考慮DDL對(duì)數(shù)據(jù)庫影響。

四、InnoDB刷盤策略

MySQL的innodb_flush_method這個(gè)參數(shù)控制著innodb數(shù)據(jù)文件及redolog的打開、刷寫模式,對(duì)于這個(gè)參數(shù),文檔上是這樣描述的:

有三個(gè)值:fdatasync(默認(rèn)),O_DSYNC,O_DIRECT

默認(rèn)是fdatasync,調(diào)用fsync()去刷數(shù)據(jù)文件與redolog的buffer

為O_DSYNC時(shí),innodb會(huì)使用O_SYNC方式打開和刷寫redolog,使用fsync()刷寫數(shù)據(jù)文件

為O_DIRECT時(shí),innodb使用O_DIRECT打開數(shù)據(jù)文件,使用fsync()刷寫數(shù)據(jù)文件跟redolog

首先文件的寫操作包括三步:open,write,flush

上面最常提到的fsync(intfd)函數(shù),該函數(shù)作用是flush時(shí)將與fd文件描述符所指文件有關(guān)的buffer刷寫到磁盤,并且flush完元數(shù)據(jù)信息(比如修改日期、創(chuàng)建日期等)才算flush成功。

使用O_DSYNC方式打開redo文件表示當(dāng)write日志時(shí),數(shù)據(jù)都write到磁盤,并且元數(shù)據(jù)也需要更新,才返回成功。

O_DIRECT則表示我們的write操作是從MySQLinnodbbuffer里直接向磁盤上寫。

這三種模式寫數(shù)據(jù)方式具體如下:

fdatasync模式:寫數(shù)據(jù)時(shí),write這一步并不需要真正寫到磁盤才算完成(可能寫入到操作系統(tǒng)buffer中就會(huì)返回完成),真正完成是flush操作,buffer交給操作系統(tǒng)去flush,并且文件的元數(shù)據(jù)信息也都需要更新到磁盤。

O_DSYNC模式:寫日志操作是在write這步完成,而數(shù)據(jù)文件的寫入是在flush這步通過fsync完成

O_DIRECT模式:數(shù)據(jù)文件的寫入操作是直接從mysqlinnodbbuffer到磁盤的,并不用通過操作系統(tǒng)的緩沖,而真正的完成也是在flush這步,日志還是要經(jīng)過OS緩沖。

MySQL延遲問題和數(shù)據(jù)刷盤策略

1、在類unix操作系統(tǒng)中,文件的打開方式為O_DIRECT會(huì)最小化緩沖對(duì)io的影響,該文件的io是直接在用戶空間的buffer上操作的,并且io操作是同步的,因此不管是read()系統(tǒng)調(diào)用還是write()系統(tǒng)調(diào)用,數(shù)據(jù)都保證是從磁盤上讀取的;所以IO方面壓力最小,對(duì)于CPU處理壓力上也最小,對(duì)物理內(nèi)存的占用也最?。坏怯捎跊]有操作系統(tǒng)緩沖的作用,對(duì)于數(shù)據(jù)寫入磁盤的速度會(huì)降低明顯(表現(xiàn)為寫入響應(yīng)時(shí)間的拉長),但不會(huì)明顯造成整體SQL請(qǐng)求量的降低(這有賴于足夠大的innodb_buffer_pool_size)。

2、O_DSYNC方式表示以同步io的方式打開文件,任何寫操作都將阻塞到數(shù)據(jù)寫入物理磁盤后才返回。這就造成CPU等待加長,SQL請(qǐng)求吞吐能力降低,insert時(shí)間拉長。

3、fsync(intfiledes)函數(shù)只對(duì)由文件描述符filedes指定的單一文件起作用,并且等待寫磁盤操作結(jié)束,然后返回。fdatasync(intfiledes)函數(shù)類似于fsync,但它只影響文件的數(shù)據(jù)部分。而除數(shù)據(jù)外,fsync還會(huì)同步更新文件的元信息到磁盤。

O_DSYNC對(duì)CPU的壓力最大,datasync次之,O_DIRECT最小;整體SQL語句處理性能和響應(yīng)時(shí)間看,O_DSYNC較差;O_DIRECT在SQL吞吐能力上較好(僅次于datasync模式),但響應(yīng)時(shí)間卻是最長的。

默認(rèn)datasync模式,整體表現(xiàn)較好,因?yàn)槌浞掷昧瞬僮飨到y(tǒng)buffer和innodb_buffer_pool的處理性能,但帶來的負(fù)面效果是free內(nèi)存降低過快,最后導(dǎo)致頁交換頻繁,磁盤IO壓力大,這會(huì)嚴(yán)重影響大并發(fā)量數(shù)據(jù)寫入的穩(wěn)定性。

總結(jié)

以上所述是小編給大家介紹的MySQL延遲問題和數(shù)據(jù)刷盤策略流程分析,希望對(duì)大家有所幫助!

您可能感興趣的文章:
  • MySQL主從同步延遲的原因及解決辦法
  • mysql同步問題之Slave延遲很大優(yōu)化方法
  • 解決MySQL中的Slave延遲問題的基本教程
  • MySQL延遲關(guān)聯(lián)性能優(yōu)化方法
  • MYSQL主從不同步延遲原理分析及解決方案

標(biāo)簽:來賓 河北 果洛 赤峰 鞍山 陽江 煙臺(tái) 黃石

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL延遲問題和數(shù)據(jù)刷盤策略流程分析》,本文關(guān)鍵詞  MySQL,延遲,問題,和,數(shù)據(jù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL延遲問題和數(shù)據(jù)刷盤策略流程分析》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL延遲問題和數(shù)據(jù)刷盤策略流程分析的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    广东省| 会理县| 辉县市| 蒙山县| 云安县| 迭部县| 罗甸县| 周宁县| 绥宁县| 承德市| 昭苏县| 紫金县| 清河县| 开平市| 景泰县| 滕州市| 腾冲县| 平安县| 健康| 松滋市| 临高县| 嘉义市| 锡林浩特市| 辛集市| 琼海市| 迁西县| 宁波市| 鸡东县| 正蓝旗| 贺兰县| 南部县| 全椒县| 延寿县| 蒙山县| 海林市| 福安市| 舟曲县| 徐汇区| 安化县| 琼结县| 武邑县|