主機當機從來沒讓人失望過

xuexiaogang發表於2022-09-27

     有一次聽一某個銀行講他們用Oracle,說到業務連續性,他們說,如果卡死的時候要麼重啟,要麼切換。他們明顯是走重啟路線的,類似強制關機那種。當時他說了一句,主機當機了就重啟資料庫。主機當機情況下,Oracle從來沒有讓我失望過。

     以上是別人的聲音,我回想我自己經歷(僅代表個人),似乎也是差不多。只是剛工作時候用Oracle8的時候有過幾次斷電,起不來,但是打幾個命令也能啟動。那幾次斷電是在高頻寫入的時候(每秒幾十M的寫入情況下)。靜態斷電就斷電了,沒事。從前看到很多人在windows上也就直接重啟作業系統,從來沒有重新整理檢查點,關閉資料庫的操作。隨著windows啟動就啟動了。大家就這樣用的。之所以可以起得來是資料庫的redo和undo保持了一致性。資料庫起得來就是一致的,不一致就是起不來了。其實MySQL PG等資料庫也是類似的。

   今天看到個文章,MySQL主從切換後資料一致嗎?結論就是方法一 重啟優先於切換。這點上我覺得Oracle PG等也是一樣的準則。我始終覺得不要動不動就切換,雖然各自資料庫都能自動切換。

   對於資料庫來說99.99999%都起得來。極端問題極端處理,極端的時候人做一下也說得過去。工作快20年了,就沒遇到過這種極端。(自己在實驗環境惡意破壞訓練除外)。

   另外就是採用一致的架構,比如Oracle RAC,MySQL MGR(這兩個最好同機房) ,OB和TiDB等分散式 (其實我也覺得最好是同機房,官方說可以跨機房)。這種都可以不用切換。

   資料庫本身其實很健壯(只要不是惡意刪除),相信它。 資料庫本身很脆弱(爛SQL與不匹配的硬體之間的矛盾導致資料庫故障幾乎都是SQL引起甚至可以蔓延到JVM的GC和OOM,或者是訊息佇列的堵塞)。而這些脆弱的點都是我們可以控制的,只要有意識。

   select * from t where a=XXX or b=yyy.這種要ab兩個列都要有索引,只有一個不行。有一次我看到一個這類情況,b列恰好沒索引。我就問為什麼要這樣?(當然加索引也可以,不過我還是問了一下。) 開發說要的,我說你查查呢?結果一查,最近兩三年這個條件是不成立的(就沒這樣的資料)。開發很吃驚,去問業務是不是不做了?為什麼最近幾年沒符合這個條件的,最後答覆是不做這個業務了。最後結果也沒錯,但是結果空跑了全表。

   當機重啟沒讓人失望過,只是有時候需求讓人失望了。

    


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/637517/viewspace-2916464/,如需轉載,請註明出處,否則將追究法律責任。

相關文章