一句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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ES資料沒了?誰動了我的資料?
- 看看這同一句sql,scan index佔用的資源大了很多!!SQLIndex
- 一個併發SQL資料庫卡主了SQL資料庫
- 我曾誤刪了公司的資料庫,但還是活下來了資料庫
- SQL資料庫SQL資料庫
- 資料庫即將死去 -- 轉《NoSQL的資料庫技術革命讓我們對SQL說不》資料庫SQL
- 我發現我的資料被操縱了……
- MySQL 資料庫崩潰(crash)的常見原因和解決辦法MySql資料庫
- 資料庫——慢sql的原因資料庫SQL
- 資料庫常用的sql語句大全--sql資料庫SQL
- SQL:清空資料庫所有資料SQL資料庫
- 請教資料庫高手(我們這沒有SQL版阿)資料庫SQL
- 我安裝了jdon-2.5採用mysql做資料庫,已經將jive―mysql.sql匯入資料庫,並且我試了一下,可以在cmd視窗中,往表裡插入資料,可安MySql資料庫
- SQL資料庫中Truncate的用法SQL資料庫
- SQL:資料庫的安全性SQL資料庫
- Sql連結資料庫的用法SQL資料庫
- 監控資料庫效能的SQL資料庫SQL
- 故障分析 | MySQL 5.7 使用臨時表導致資料庫 CrashMySql資料庫
- openGauss 由於RemoveIPC未關閉導致資料庫crashREM資料庫
- 我常用經典SQL語句[就先寫一句吧]SQL
- 常用的檢視資料庫的SQL資料庫SQL
- 一句話為你解讀Oracle資料庫選件Oracle資料庫
- SQL Server進行Crash RecoverySQLServer
- Sql Server 資料庫學習-常用資料庫 物件SQLServer資料庫物件
- SQL Server資料庫安全SQLServer資料庫
- 資料庫-SQL 語法資料庫SQL
- 資料庫優化SQL資料庫優化SQL
- 【資料庫】SQL語句資料庫SQL
- 資料庫效能 常用SQL資料庫SQL
- SQL Azure雲資料庫SQL資料庫
- SQL Server 資料庫映象SQLServer資料庫
- SQL Server 資料庫索引SQLServer資料庫索引
- 資料庫雲--sql雲資料庫SQL
- 資料庫映象 (SQL Server)資料庫SQLServer
- 資料庫_SQL-MongoDB資料庫SQLMongoDB
- 資料庫_SQL-PostgreSQL資料庫SQL
- 我寫了jboss3.0+tomcat4.06 配置mysql資料庫的攻略S3TomcatMySql資料庫
- 利用ipcrm清除資料庫crash後沒有釋放的記憶體段資料庫記憶體