日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

《MySQL—— 业务高峰期的性能问题的紧急处理的手段 》

發(fā)布時間:2023/12/1 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《MySQL—— 业务高峰期的性能问题的紧急处理的手段 》 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

catalog

    • 短連接風暴
      • 先處理占著連接但是不工作地線程
      • 減少連接過程的消耗
    • 慢查詢性能問題
      • 索引沒有設(shè)計好
      • 語句沒寫好
      • 選錯索引
    • QPS突增問題

短連接風暴

正常的短連接:
執(zhí)行很少sql語句就斷開,下次需要的時候再重連。MySQL建立連接的過程成本很高,包含:網(wǎng)絡(luò)連接三次握手、登錄權(quán)限判斷、獲得連接的數(shù)據(jù)讀寫權(quán)限。
短連接模型存在風險:一旦數(shù)據(jù)庫處理得慢一些,連接數(shù)就會暴漲。
有兩個方法能夠有損地解決短鏈接風暴問題

先處理占著連接但是不工作地線程

如果連接數(shù),可以優(yōu)先斷開事務(wù)外空閑太久地連接。如果這樣還不夠,再考慮斷開事務(wù)內(nèi)空閑太久的連接。
當一個客戶端處于sleep狀態(tài),它的連接被服務(wù)端主動斷開后,客戶端并不會立即知道。而是在客戶端發(fā)起下一個請求的時候,才會收到報錯:

ERROR 2013 (HY000): Lost connection to MySQL server during query

有的應(yīng)用端收到這個錯誤時不會重新連接,而是用這個句柄重試查詢,這回導致從應(yīng)用端看MySQL一直沒恢復。

減少連接過程的消耗

讓數(shù)據(jù)庫跳過權(quán)限驗證階段。

方法:重啟數(shù)據(jù)庫,并使用-skip-grant-tables參數(shù)啟動。這樣MySQL就會跳過所有的權(quán)限驗證階段,包括連接過程和語句執(zhí)行過程在內(nèi)。

這個風險極高。在MySQL8.0版本里,如果啟用-skip-grant-tables參數(shù),MySQL會默認把--skip-networking參數(shù)打開,表示這時候數(shù)據(jù)庫只能被本地客戶端連接。

慢查詢性能問題

索引沒有設(shè)計好

通過緊急創(chuàng)建索引來解決。

直接執(zhí)行alter table語句。

假設(shè)現(xiàn)在服務(wù)是一主一備,主庫A、備庫B,這個方案的大致流程是這樣的:

1、在備庫B上執(zhí)行set sql_log_bin = off,不寫binlog,然后執(zhí)行alter table,加上索引

2、執(zhí)行主備切換

3、主庫是B,備庫是A。在A上執(zhí)行set sql_log_bin = off,然后執(zhí)行alter table,加上索引。

語句沒寫好

在之前的文章中,提到過,有時候一些錯誤會導致語句沒有使用上索引。

此時通過改寫sql語句來處理,query_rewrite功能,可以把輸入的一種語句改寫成另外一種模式。

如果我們一開始寫的是:

select * from t where id + 1 = 10000;

可以通過下面代碼增加一個語句改寫規(guī)則。

insert into query_rewrite.rewrite_rules(pattern,replacement,pattern_databas) values ("select * from t where id + 1 = ?","db1"); call query_rewrite.flush_rewrite_rules();

call query_rewrite.flush_rewrite_rules()是讓插入的新規(guī)則生效。

選錯索引

應(yīng)急方案:給語句加上force index;

QPS突增問題

QPS每秒查詢率(Query Per Second) 有時會由于業(yè)務(wù)高峰或者應(yīng)用程序bug出現(xiàn)突增。

最好的辦法是讓業(yè)務(wù)把這個功能下掉,服務(wù)自然就會恢復。

下掉一個功能的方法如下:

1、如果是全新業(yè)務(wù)的bug,如果去欸的那個業(yè)務(wù)方會下掉這個功能,那么可以從數(shù)據(jù)庫端直接把白名單去掉

2、如果這個功能使用的是單獨的數(shù)據(jù)庫用戶,可以用管理員賬號把這個用戶刪掉,然后斷開現(xiàn)有連接。

3、如果這個功能和主體功能是部署在一起的,那么我們只能通過處理語句來限制。可以使用查詢重寫功能,把壓力最大的sql語句直接重寫為"select 1"返回。

下掉一個功能所帶來的副作用如下:

1、如果別的功能里面也用到了這個sql語句模板,會有誤傷

2、很多業(yè)務(wù)并不是靠著一個語句就能完成完整邏輯,所以單獨把一個語句以select 1的結(jié)果返回的話,可能會導致后面的業(yè)務(wù)邏輯一起失敗。

總結(jié)

以上是生活随笔為你收集整理的《MySQL—— 业务高峰期的性能问题的紧急处理的手段 》的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。