線上問題之慢Sql一定是Sql慢嗎
問題解答
答案是不。就我現在的經驗來分析,引起慢Sql的原因有兩個,第一個,真的慢,第二個,資源被別人佔用,鎖不釋放,導致我們的sql一直阻塞,變成慢sql。那麼,為什麼資源會被一直佔用麼,那就說明你的事務時間太長,可能是其他執行的sql慢或者其他的IO操作阻塞(比如Http呼叫)。
問題覆盤
今天臨近下班在釘釘收到兩個線上預警,而且都是@我的。
第一個是呼叫推送Api超時了,我看了下,沒怎麼在意,覺得是偶發情況吧。
第二個是慢sql,並且這個是update語句,重複相同的13個相同sql超時,但是就語句來看 應該是命中索引的,本身執行肯定快,成為慢sql肯定是資源被佔用了。但是看了程式碼我也沒發現什麼特殊的地方(這個模組的推送我這期重構了改成非同步了)。就認為是其他地方資源佔用,導致這邊被超時了。
但是後面我經驗豐富的TL經過程式碼分析一下問題後,真相浮出水面。
這個問題Sql是在一個訊息的消費者程式碼中,偽邏輯如下
//事務開始
修改訂單資訊(佔用資源,其他執行緒阻塞)
修改對應訂單車輛為起運
推送(超時了)
其他系統索引同步
//事務結束
一個訂單有13輛車,所以有13個起運訊息發動過來,並且是併發的,當第一條訊息消費的時候,推送方法超時了,10秒的timeout才返回,那麼其他消費者就會阻塞在第一句修改的sql呼叫上。直到第一條消費結束,過了10多秒,其他的消費者才從阻塞中依次恢復。
上面看視沒有關聯的兩個告警聯絡到了一起,不過我沒看出來的問題,我覺得還是因為我這個版本已經重構掉了。。不是現場的程式碼。
以後對於線上告警,我要好好重視,都是學習的機會。
問題總結
不要在事務內執行除了資料庫操作以外的會引起阻塞的呼叫,比如推送,發短息,同步索引這些操作,都進行非同步解耦。
還有一個公司的監控系統真的是相當重要。
下面是我公眾號,大家可以關注下。
相關文章
- 記一次處理達夢慢SQL問題SQL
- 智慧掃描支援從MySQL例項線上抓取慢SQLMySql
- 網站卡就一定是伺服器問題嗎?網站伺服器
- HighgoDB查詢慢SQL和阻塞SQLGoSQL
- 【慢SQL效能最佳化】 一條SQL的生命週期SQL
- SQL問題診斷SQL
- 慢Sql優化思路SQL優化
- pl/sql developer的一個小問題SQLDeveloper
- SQL:我為什麼慢你心裡沒數嗎?SQL
- SQL最佳化問題SQL
- sql 模糊查詢問題SQL
- [20190221]sql patch 問題.txtSQL
- Navicat 匯出sql問題SQL
- MySQL:慢SQL(slow_log)MySql
- SQL慢查詢排查思路SQL
- Hive SQL必刷練習題:同時線上人數問題(*****)HiveSQL
- 原始碼解析丨一次慢SQL排查原始碼SQL
- 面試三輪我倒在了一道sql題上——sql效能優化面試SQL優化
- 瞭解GaussDB效能調優之隱式轉換,解決慢SQL問題SQL
- 好文分享 | 記一次Oracle12c資料庫SQL短暫緩慢問題分析Oracle資料庫SQL
- SQL崗位30個面試題,SQL面試問題及答案SQL面試題
- SQL面試題,快問快答!SQL面試題
- sql多參問題解決SQL
- 常見面試SQL問題面試SQL
- 運維排查問題常用sql運維SQL
- SQL Server database mail問題診斷一例SQLServerDatabaseAI
- 資料庫——慢sql的原因資料庫SQL
- Mysql慢SQL分析及優化MySql優化
- SQL優化案例-從執行計劃定位SQL問題(三)SQL優化
- 攔截線上 sql 異常報錯SQL
- OceanBase 4.0 解讀:全鏈路追蹤要解決什麼問題?從一條慢SQL說起SQL
- [202021127]sql打補丁問題.txtSQL
- Druid.io SQL亂碼問題UISQL
- 硬碟問題導致Gbase資料庫叢集SQL任務執行效率變慢硬碟資料庫SQL
- 我的sql沒問題為什麼還是這麼慢|MySQL加鎖規則MySql
- 一文帶你搞懂如何最佳化慢SQLSQL
- 快速學會慢查詢SQL排查SQL
- 慢SQL優化實戰筆記SQL優化筆記