最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2020年02月15日 15:53:29   作者:像向日葵一樣  
這篇文章主要介紹了MySQL延遲問題和數(shù)據(jù)刷盤策略流程分析,本文要給大家提到了mysql復制流程,需要的朋友可以參考下

一、MySQL復制流程

官方文檔流程如下:

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

1、絕對的延時,相對的同步

2、純寫操作,線上標準配置下,從庫壓力大于主庫,最起碼從庫有relaylog的寫入。

二、MySQL延遲問題分析

1、主庫DML請求頻繁

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

解決思路:做sharding,打散寫請求??紤]升級到MySQL5.7+,開啟基于邏輯時鐘的并行復制。

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

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

解決思路:拆分大事務,及時提交。

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

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

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

4、主從實例配置不一致

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

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

5、從庫自身壓力過大

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

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

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

三、大促期間CPU過高問題

現(xiàn)象:

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

解決思路:

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

四、InnoDB刷盤策略

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

有三個值:fdatasync(默認),O_DSYNC,O_DIRECT

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

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

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

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

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

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

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

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

fdatasync模式:寫數(shù)據(jù)時,write這一步并不需要真正寫到磁盤才算完成(可能寫入到操作系統(tǒng)buffer中就會返回完成),真正完成是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會最小化緩沖對io的影響,該文件的io是直接在用戶空間的buffer上操作的,并且io操作是同步的,因此不管是read()系統(tǒng)調(diào)用還是write()系統(tǒng)調(diào)用,數(shù)據(jù)都保證是從磁盤上讀取的;所以IO方面壓力最小,對于CPU處理壓力上也最小,對物理內(nèi)存的占用也最小;但是由于沒有操作系統(tǒng)緩沖的作用,對于數(shù)據(jù)寫入磁盤的速度會降低明顯(表現(xiàn)為寫入響應時間的拉長),但不會明顯造成整體SQL請求量的降低(這有賴于足夠大的innodb_buffer_pool_size)。

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

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

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

默認datasync模式,整體表現(xiàn)較好,因為充分利用了操作系統(tǒng)buffer和innodb_buffer_pool的處理性能,但帶來的負面效果是free內(nèi)存降低過快,最后導致頁交換頻繁,磁盤IO壓力大,這會嚴重影響大并發(fā)量數(shù)據(jù)寫入的穩(wěn)定性。

總結(jié)

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

相關(guān)文章

  • mysql分析sql是否成功使用索引的步驟詳解

    mysql分析sql是否成功使用索引的步驟詳解

    在MySQL中,可以通過使用EXPLAIN語句來分析SQL查詢是否成功使用了索引,本文給大家介紹了使用EXPLAIN語句分析SQL語句是否成功使用索引的步驟,需要的朋友可以參考下
    2023-12-12
  • mysql執(zhí)行計劃Explain解讀

    mysql執(zhí)行計劃Explain解讀

    在數(shù)據(jù)庫操作中,理解Explain執(zhí)行計劃對于性能優(yōu)化至關(guān)重要,Explain展示了MySQL如何執(zhí)行查詢,包括選擇哪些索引,如何連接表,以及估計的行數(shù)等,Select類型、訪問表的方式、使用的索引、以及額外的執(zhí)行信息,都是優(yōu)化查詢時需要考慮的因素
    2024-10-10
  • Mysql varchar大小長度問題介紹

    Mysql varchar大小長度問題介紹

    如果被 varchar 超過上述的 b 規(guī)則,被強轉(zhuǎn)成 text 類型,則每個字段占用定義長度為 11 字節(jié),當然這已經(jīng)不是 varchar 了
    2011-10-10
  • Mysql查詢最近一條記錄的sql語句(優(yōu)化篇)

    Mysql查詢最近一條記錄的sql語句(優(yōu)化篇)

    這篇文章主要介紹了Mysql查詢最近一條記錄的sql語句,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧
    2018-05-05
  • MySQL創(chuàng)建索引需要了解的

    MySQL創(chuàng)建索引需要了解的

    這篇文章主要介紹了MySQL創(chuàng)建索引需要了解的知識,幫助大家更正確的使用MySQL的索引,感興趣的朋友可以了解下
    2021-04-04
  • 深入探究MySQL中使用where 1=1是否存在性能影響

    深入探究MySQL中使用where 1=1是否存在性能影響

    最近在項目中使用 mybatis 寫 SQL 使用了 where 1=1 來簡化多條件拼接的寫法,案例如下,借此聊聊多條件拼接的常見的一些寫法以及 where 1=1 是否存在性能影響,需要的朋友可以參考下
    2024-02-02
  • MySQL實現(xiàn)快速刪除所有表而不刪除數(shù)據(jù)庫的方法

    MySQL實現(xiàn)快速刪除所有表而不刪除數(shù)據(jù)庫的方法

    這篇文章主要介紹了MySQL實現(xiàn)快速刪除所有表而不刪除數(shù)據(jù)庫的方法,涉及mysql批量執(zhí)行語句的相關(guān)操作技巧,需要的朋友可以參考下
    2017-09-09
  • MySQL深分頁問題原理與三種解決方案

    MySQL深分頁問題原理與三種解決方案

    本文主要介紹了MySql深分頁問題原理與解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • MySQL對于各種鎖的概念理解

    MySQL對于各種鎖的概念理解

    今天小編就為大家分享一篇關(guān)于MySQL對于各種鎖的概念理解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • MySQL中case?when對NULL值判斷的踩坑記錄

    MySQL中case?when對NULL值判斷的踩坑記錄

    最近在學習Hive基礎(chǔ)知識時,遇到了遇到了Case?When?Else?End語法,這篇文章主要給大家介紹了關(guān)于MySQL中case?when對NULL值判斷的踩坑記錄,需要的朋友可以參考下
    2021-12-12

最新評論

多伦县| 自贡市| 白水县| 上栗县| 嘉定区| 汤原县| 辽阳县| 浦城县| 汉沽区| 洪江市| 东港市| 遵化市| 攀枝花市| 永川市| 读书| 莒南县| 静宁县| 白山市| 科尔| 宜春市| 九龙城区| 菏泽市| 稻城县| 金秀| 辽阳县| 卓尼县| 马公市| 临江市| 长顺县| 色达县| 鞍山市| 江源县| 怀化市| 洛隆县| 泌阳县| 敦化市| 滁州市| 塔城市| 衡东县| 漠河县| 伊通|