《MySQL—— 業務高峰期的性能問題的緊急處理的手段 》

catalog

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

短連接風暴

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

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

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

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

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

減少連接過程的消耗

讓數據庫跳過權限驗證階段。

方法:重啟數據庫,并使用-skip-grant-tables參數啟動。這樣MySQL就會跳過所有的權限驗證階段,包括連接過程和語句執行過程在內。

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

慢查詢性能問題

索引沒有設計好

通過緊急創建索引來解決。

直接執行alter table語句。

假設現在服務是一主一備,主庫A、備庫B,這個方案的大致流程是這樣的:

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

2、執行主備切換

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

語句沒寫好

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

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

如果我們一開始寫的是:

select * from t where id + 1 = 10000;

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

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()是讓插入的新規則生效。
在這里插入圖片描述

選錯索引

應急方案:給語句加上force index;

QPS突增問題

QPS每秒查詢率(Query Per Second) 有時會由于業務高峰或者應用程序bug出現突增。

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

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

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

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

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

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

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

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/377202.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377202.shtml
英文地址,請注明出處:http://en.pswp.cn/news/377202.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

sql 算出下級銷售總和_找出總和字符串

sql 算出下級銷售總和Description: 描述: This is a standard interview problem to check that the given string is a sum string or not using backtracking. 這是一個標準的面試問題,用于檢查給定的字符串是否為總和字符串或不使用回溯。 Problem…

Request 分別獲取具有相同 name 屬性表單元素值

html 中是允許多個具有相同name屬性的元素的&#xff0c;例如 <div> <input name"txtName" id"txtFirstName" type"text" /> <input name"txtName" id"txtMiddleName" type"text" /> <input…

《MySQL——redo log 與 binlog 寫入機制》

目錄binlog寫入機制redo log寫入機制組提交機制實現大量的TPS理解WAL機制如何提升IO性能瓶頸WAL機制告訴我們&#xff1a;只要redo log與binlog保證持久化到磁盤里&#xff0c;就能確保MySQL異常重啟后&#xff0c;數據可以恢復。 下面主要記錄一下MySQL寫入binlog和redo log的…

BBIAB的完整形式是什么?

BBIAB&#xff1a;再回來一點 (BBIAB: Be Back In A Bit) BBIAB is an abbreviation of "Be Back In A Bit". BBIAB是“ Be Back in A Bit”的縮寫 。 It is an expression, which is commonly used in messaging or chatting on social media networking sites lik…

字符串:KMP Eentend-Kmp 自動機 trie圖 trie樹 后綴樹 后綴數組

涉及到字符串的問題&#xff0c;無外乎這樣一些算法和數據結構&#xff1a;自動機 KMP算法 Extend-KMP 后綴樹 后綴數組 trie樹 trie圖及其應用。當然這些都是比較高級的數據結構和算法&#xff0c;而這里面最常用和最熟悉的大概是kmp&#xff0c;即使如此還是有相當一部分人也…

WPF CanExecuteChanged

繼承ICommand ,RelayCommand命令 1 public class RelayCommand : ICommand2 {3 private readonly Action _execute;4 private readonly Func<bool> _canExecute;5 public event EventHandler CanExecuteChanged;6 public RelayComma…

《MySQL——主備一致性六問六答》

目錄備庫為什么要設置為只讀模式&#xff1f;備庫設置為只讀&#xff0c;如何與主庫保持同步更新&#xff1f;A到B的內部流程如何&#xff1f;binlog內容是什么&#xff1f;row格式對于恢復數據有何好處M-M結構的循環復制問題以及解決方案備庫為什么要設置為只讀模式&#xff1…

代碼管理工具

http://blogs.msdn.com/b/visualstudio/archive/2012/06/11/world-of-samples-at-your-fingertips.aspx轉載于:https://www.cnblogs.com/hebeiDGL/archive/2012/09/25/2700961.html

fyi 在郵件里是什么意思_FYI的完整形式是什么?

fyi 在郵件里是什么意思僅供參考&#xff1a;供您參考 (FYI: For Your Information) FYI is an acronym of "For Your Information". It is a widespread internet slang used these days in text messaging, instant messaging, and chatting on Facebook, WhatsApp…

Hyper-V 替換 vmwp

要激活 Hyper-V 下的虛機 最簡單的方法是用帶證書的vmwp替換掉原來的 帶證書的vmwp參見&#xff1a;http://bbs.pcbeta.com/viewthread-1408240-1-1.html 下載后腰替換 先把 Hyper-V 的倆服務停止掉 然后找到 C:\Windows\System32\vmwp.exe 右鍵--安全 替換掉所有者 然后給自己…

《MySQL——主備切換流程與主備延遲》

目錄主備切換主備延遲的原因可靠性優先策略的主備切換流程可用性優先策略的主備切換流程主備切換 主備切換分為主動運維與被動操作。 軟件升級、主庫所在機器按計劃下線為主動運維。 主庫所在機器掉電為被動操作。 同步延遲 1、主庫A執行完一個事務&#xff0c;寫入binlog…

ejb模式_EJB的完整形式是什么?

ejb模式EJB&#xff1a;企業Java Bean (EJB: Enterprise Java Bean) EJB is an abbreviation of Enterprise Java Bean. EJB is one of many Java application programming interfaces (API) for flexible and manageable structuring of Java Platform, Enterprise Edition (J…

Android之PreferenceActivity

http://www.cnblogs.com/wservices/archive/2010/07/08/1773449.html 看到很多書中都沒有對PreferenceActivity做介紹&#xff0c;而我正好又在項目中用到&#xff0c;所以就把自己的使用的在這總結一下&#xff0c;也方便日后查找。 PerferenceActivity是什么&#xff0c;看下…

淺談算法和數據結構: 七 二叉查找樹

前文介紹了符號表的兩種實現&#xff0c;無序鏈表和有序數組&#xff0c;無序鏈表在插入的時候具有較高的靈活性&#xff0c;而有序數組在查找時具有較高的效率&#xff0c;本文介紹的二叉查找樹(Binary Search Tree&#xff0c;BST)這一數據結構綜合了以上兩種數據結構的優點。…

scala部分應用函數_Scala中的部分函數

scala部分應用函數Scala部分功能 (Scala partial functions) A partial function is a function that returns values only for a specific set of values i.e. this function is not able to return values for some input values. This function is defined so that only som…

《MySQL——備庫多線程復制策略。》

目錄備庫并行復制能力MySQL5.6版本 并行復制策略MariaDB 并行復制策略MySQL5.7版本 并行復制策略MySQL5.7.22版本 并行復制策略總結備庫并行復制能力 主要涉及兩個方面的并行度&#xff1a; 1、客戶端寫入主庫的能力 2、備庫上sql_thread執行中轉日志relay log 1的并行能力…

人臉是門大生意

我們正處在一個新時代的入口。人有70%的能量是被大腦消耗&#xff0c;大腦90%的能量用來處理視覺信息&#xff0c;人臉則承載了絕大部分的視覺信息。我們要討論的是一個比Google Glass更酷的世界。文/程苓峰-云科技網易郵箱的用戶已經可以用人臉而不是密碼來驗證登陸。安卓4.0實…

【SQL】sql版Split函數。用于拆分字符串為單列表格

【SQL】sql版Split函數。用于拆分字符串為單列表格 功能與.net版string.Split函數類似&#xff0c;只不過.net返回的是數組&#xff0c;這個返回的是一個單列表格&#xff0c;每個拆分出來的子串占一行。可選是否移除空格子串和重復項。市面上類似的函數不算少&#xff0c;但大…

線描算法

線描算法 (Line drawing algorithms) The equation for a straight line is ymxb 直線方程為y mx b In this m represent a slope of a line which can be calculated by the my2-y1/x2-x1 where (x1, y1) are the starting position of the points and (x2, y2) are the end…

為移動端網頁構造快速響應按鈕

背景 在谷歌&#xff0c;我們不斷地推測手機網頁應用的可能性。像HTML5這樣的技術使我們網頁版的應用以及運行在手機設備上的原生應用。而這些技術的成就之一就是我們開發了一種新的創建按鈕的方法&#xff0c;使按鈕的響應時間遠遠快于一般的HTML按鈕。在此之前的按鈕或者其他…