事情經過:
原表有兩個欄位的聯合唯一索引unique key
,因業務變更這兩個字段不再唯一,需要去掉唯一索引。考慮到其中乙個字段不僅作為唯一索引,還當作查詢索引使用,去掉這個唯一索引,要新加這個欄位的普通索引。
於是提了ddl資料庫變更,刪除唯一索引,新增普通索引。事故因此發生,當刪除唯一索引後,還沒來得及執行新增普通索引,資料庫連線池就被佔滿了,導致頁面所有請求都發生異常!
表中有500w資料,理論刪除和新增索引都很快10s內可以完成。問題就出在了刪除唯一索引後,系統的mq處理任務有大量的根據某個字段查詢更新的任務在執行,導致沒了索引後任務變得相當慢,大量任務堆積佔滿了資料庫連線池,系統崩潰。。。要知道,在沒了索引的情況下,500w資料量下根據某個字段查詢那是相當的慢。。。還沒來得及執行新增普通索引系統l就已經崩潰了。臨時解決方法就是停止系統,殺掉資料庫查詢和更新的事務,把新增普通索引ddl執行後再重啟系統應用,系統會恢復正常。至於丟失的資料再想辦法補吧。
結論:
這件事,告訴我們,刪除資料庫索引一定要慎重。即使一定要做,先要明確刪除索引後帶來的影響性,更換索引一定要遵循先增加後刪除的原則,才能避免類似的事故發生。
Mysql之group by踩過的坑
mysql的group by分組是先排序後分組 對於使用者想要先排序後分組獲取最新的記錄,通過group by發現不可行 驗證步驟 1 建立乙個tt表進行驗證 create table tt id int 11 not null auto increment,num int 11 default n...
git踩過的坑
4.git 修改當前的project的使用者名稱的命令為 git config user.name 你的目標使用者名稱 git 修改當前的project提交郵箱的命令為 git config user.email 你的目標郵箱名 如果你要修改當前全域性的使用者名稱和郵箱時,需要在上面的兩條命令中新增...
springboot踩過的坑
設定上下文路徑context path不生效 springboot 2.0之前的語法 server.context path xx 2.0之後的語法 server.servlet.context path xx 在配置yml時,報錯如下 caused by org.yaml.snakeyaml.sc...