1. 程式人生 > >聊一聊資料庫中的鎖

聊一聊資料庫中的鎖

背景

資料庫中有一張叫後宮佳麗的表,每天都有幾百萬新的小姐姐插到表中,光陰荏苒,夜以繼日,日久生情,時間長了,表中就有了幾十億的小姐姐資料,看到幾十億的小姐姐,每到晚上,我可愁死了,這麼多小姐姐,我翻張牌呢?
辦法當然是精兵簡政,刪除那些age>18的,給年輕的小姐姐們留位置...
於是我在資料庫中添加了一個定時執行的小程式,每到週日,就自動執行如下的指令碼

delete from `後宮佳麗` where age>18

一開始還自我感覺良好,後面我就發現不對了,每到週日,這個指令碼一執行就是一整天,執行的時間有點長是小事,重點是這大好週日,我再想讀這張表的資料,怎麼也讀不出來了,怎是一句空虛了得,我好難啊!

為什麼

編不下去了,真實背景是公司中遇到的一張有海量資料表,每次一旦執行歷史資料的清理,我們的程式就因為讀不到這張表的資料,瘋狂地報錯,後面一查瞭解到,原來是因為定時刪除的語句設計不合理,導致資料庫中資料由行鎖(Row lock)升級為表鎖(Table lock)了