一句SQL,我的資料庫crash了
上週有人問我一個問題,資料庫莫名重啟了。其實是資料庫crash了,然後守護程式把他馬上啟動了。我看了一下錯誤日誌,很奇怪。也是第一次遇到。
看到紅色框的 mysqld got signal 11,一下就感覺不好。歷次資料庫crash,必然有他。不過以前我遇到最多的是latch lock。這次不是。
藍色框資料庫說可能是一個bug,不少人看到這句就說,遇到bug了。我個人不這麼認為,因為這是官方標準輸出,都會帶出這樣的。就像有人說我非常抱歉(不代表這個人一定做錯了) 。因為我工作這麼多年實在沒遇到過什麼bug,即使我認為是bug的官方解釋了以後,我傾向於不是了。然後始終認為即使有bug,我們可以避開。就是所謂的閉坑,因為是在特定條件下觸發的。繞開就好了。
綠色表示堆疊的資訊(經過多次重啟發現輸出都是一致的)
黃色部分從上面看,以我個人愚見應該是最佳化器上報的問題。經過處理的SQL大概這樣:
SELECT
COUNT(1)
FROM
(SELECT DISTINCT
st.*
FROM
(SELECT
t.*, POSITION('SW' IN t.這是一個列) AS loc
FROM
(SELECT DISTINCT
0 AS seq,
CONCAT('這裡隱去 ', f.這是一個列) AS content,
(4 | 2) AS flag,
0 AS std_flag
FROM
(SELECT
*
FROM
A
WHERE
1 = 1 AND 某列1 = 'SECC'
AND 某列2 NOT LIKE 'A%'
AND 某列2 NOT LIKE 'B%'
AND 某列2 NOT LIKE 'C%'
AND 某列2 NOT LIKE 'D%'
AND 某列2 NOT LIKE 'E%'
AND 某列2 NOT LIKE 'F%'
AND 某列2 NOT LIKE 'G%'
AND s某列2 NOT LIKE 'H%'
AND 某列2 NOT LIKE 'TOYOTA%') m, f
WHERE
m.列3 = f.列3
AND m.列4 = f.列4
AND m.列5 = f.列5
AND m.列6 = f.列6
AND f LIKE 'SW%') t) st
WHERE
st.loc > 0) TOTAL
然後我打算看一下執行計劃(資料庫再次重啟),也就是說連執行計劃都看不了。
瞭解了一下這個是剛從MySQL5.7升級到8,具體版本是8.0.25.反應說在5.7上還能執行。8一定是在最佳化器上做了最佳化,不過為什麼出這個問題還不知道。那麼就把這兩個表資料匯入到我自己的一個環境看看8.0.30的。這裡可以看執行計劃,在這個過程中發現其中A表還是空的。如果是空表這個出hash join就不應該了。這是8的新特性,當然我們可以去關閉hash join,但是也不一定是100%可以解決。所以既然8.0.30可以處理,那麼還是建議升級吧。
升級資料庫也就幾分鐘事情,做起來最快,影響最小。
升級以後再次執行這句SQL,一切正常,儘管這句SQL設計和編寫的有較大爭議。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/637517/viewspace-2915185/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL資料庫SQL資料庫
- 一個併發SQL資料庫卡主了SQL資料庫
- 資料庫——慢sql的原因資料庫SQL
- ES資料沒了?誰動了我的資料?
- 資料庫常用的sql語句大全--sql資料庫SQL
- MySQL 資料庫崩潰(crash)的常見原因和解決辦法MySql資料庫
- 我曾誤刪了公司的資料庫,但還是活下來了資料庫
- SQL資料庫中Truncate的用法SQL資料庫
- SQL:資料庫的安全性SQL資料庫
- openGauss 由於RemoveIPC未關閉導致資料庫crashREM資料庫
- SQL Server進行Crash RecoverySQLServer
- 【SQL】18 SQL NULL 函式、SQL 通用資料型別、SQL 用於各種資料庫的資料型別SQLNull函式資料型別資料庫
- 資料庫優化SQL資料庫優化SQL
- 【資料庫】SQL語句資料庫SQL
- 資料庫_SQL-MongoDB資料庫SQLMongoDB
- 資料庫_SQL-PostgreSQL資料庫SQL
- 資料庫映象 (SQL Server)資料庫SQLServer
- 資料庫-SQL 語法資料庫SQL
- SQL Server資料庫安全SQLServer資料庫
- 還原sql server 2000資料庫的坑,不同版本資料庫SQLServer資料庫
- Sql Server 資料庫學習-常用資料庫 物件SQLServer資料庫物件
- 【資料庫資料恢復】Sql Server資料庫資料恢復案例資料庫資料恢復SQLServer
- sql.bsq與資料庫的建立SQL資料庫
- 在登入資料庫的使用!sql資料庫SQL
- 故障分析 | MySQL 5.7 使用臨時表導致資料庫 CrashMySql資料庫
- 【資料庫資料恢復】sql server資料庫連線失效的資料恢復案例資料庫資料恢復SQLServer
- 【資料庫學習】資料庫平臺:mysql,sql server資料庫MySqlServer
- SQL Server實戰四:查詢資料庫的資料SQLServer資料庫
- sql統計各種奇葩的資料庫表資料SQL資料庫
- Blazor使用sql server 資料庫BlazorSQLServer資料庫
- Oracle資料庫跟蹤SQLOracle資料庫SQL
- SQL Server資料庫巡檢SQLServer資料庫
- SQL建立資料庫和表SQL資料庫
- sql server 2005資料庫快照SQLServer資料庫
- SQL Server收縮資料庫SQLServer資料庫
- sql server 資料庫收縮SQLServer資料庫
- SQL資料庫備份管理SQL資料庫
- SQL Server資料庫遷移SQLServer資料庫