資料庫之淚第五章節
前幾天正在群裡談及一些技術問題,接到有人求助請看看MySQL資料庫。連上去看看,大量的表鎖。其實一般來說我們OLTP資料庫都是行鎖的。如果動不動就表鎖了,這活沒法幹了。但是鎖這種在不同資料庫不同場景下處理還不一樣,比如MySQL在預設的RR下,沒有索引或者沒用到索引的DML就是表鎖。這種是不懂或者不瞭解資料庫的人會無意中犯下的錯誤。
曾經在一個群裡看到有人問,大家MySQL事務隔離級別用的是什麼?有一個人說了句RR。我接了一句:“RR”厲害了。然後一堆人複製我的話。群主問RR厲害在哪裡?我就說了“MySQL在預設的RR下,沒有索引或者沒用到索引的DML就是表鎖。” 群主覺得這是開發的基本素質。沒這樣做的還要留著嗎? 哎,其實吧。這種在國內是普遍現象。
不僅僅是這種沒意識的。還有的就是有意識的犯錯誤。
故意1:有個附件表,每天改,有的有附件,有的沒附件。不知道怎麼搞的就是總是錯了。於是乎每天凌晨定時清空所有,然後一個個對一下,一個個去更新。諸位看看,是不是要是控制的好點,不至於這麼費勁吧?就這一個動作比系統一天其他總的產生的歸檔日誌都多。也就是說一天主要的壓力不是業務,而是刷這個表。
故意2:全量insert一個表,但是第二天要把這個表全部刪除,再重新insert進去。因為不知道哪些變了?(常見於不知道上游什麼變化了,或者不想知道,只想偷懶)所以越來越慢。
故意3:ETL全量拿取資料。在上游表結構變化後或者上游刪除資料後再或者在上游變了但是下游實在不知道的情況下,定期全量。
對於故意2和故意3來說,其實想想資料庫的全量備份和增量備份就知道了。為什麼要有增量備份?就是為了在保障資料一致的前提下,代價最小化。
故意4:上游強大,不告訴變化。下游被動接受全量,然後自己比較差異。這種是實屬無奈,屬於管理問題。系統對接,上游不管下游死活。與故意2不同,故意2是以後者為準。
故意5:下游強大,懶得做變化判斷。主動全量拿上游,然後自己比較差異。這種是無知。系統對接,下游不管上游死活。使勁拿資料,上游被消耗盡了也不管。與故意3不同的是,這種只拿固定的1-2個表。
故意6:每小時拿前一個月的資料(精確到秒),雖然不是全量。但是每次拿的資料99%以上甚至100%都是無用功。
以上我一定沒有窮舉出所有場景,能力有限,經歷有限。但是我相信一定還會有其他的,只是我沒見過。對於故意的來說,基本出發點就是一個字:懶(除了故意4,這是上游懶)。系統穩定不穩定不是開發的責任。(畫外音在大廠不是這樣定義的,應用開發寫的不好,就是開發的問題。)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/637517/viewspace-2898308/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫之淚第二章節資料庫
- 資料庫之淚第一章節資料庫
- 資料庫之淚第四章節資料庫
- 資料庫第五章資料庫完整性資料庫
- Redis-第五章節-8種資料型別Redis資料型別
- Flask web開發第五章資料庫FlaskWeb資料庫
- mysql資料庫操作之------查的各種小細節MySql資料庫
- mongo資料庫單節點搭建Go資料庫
- (資料庫之pymysql)資料庫MySql
- 資料庫系統概述之國產資料庫資料庫
- 國產資料庫調研之——AntDB資料庫資料庫
- 資料庫升級之-資料泵資料庫
- MySQL資料庫之索引MySql資料庫索引
- 資料庫安全之金融資料庫
- 資料庫之建立索引資料庫索引
- Go之資料庫操作Go資料庫
- mongoDB資料庫之聚合MongoDB資料庫
- luffy之資料庫配置資料庫
- 資料庫系統概述之資料庫最佳化資料庫
- 3節點RAC資料庫夯故障分析資料庫
- Gbase 8a資料庫節點替換資料庫
- MySQL預設資料庫之mysql庫MySql資料庫
- MySQL預設資料庫之sys庫MySql資料庫
- 大資料python包mrjob的血淚史大資料Python
- Postgresql10資料庫之更改資料庫的名稱SQL資料庫
- 資料庫國產化實戰之達夢資料庫資料庫
- Python之 操作 MySQL 資料庫PythonMySql資料庫
- 資料庫升級之-XTTS資料庫TTS
- nodejs之資料庫連線NodeJS資料庫
- 資料庫設計之思考資料庫
- 資料庫被刪之反思資料庫
- 《專題三分散式系統》之《第四章 資料儲存層優化(上)-資料庫優化》之 《第五節 詳解資料庫鎖》分散式優化資料庫
- 異構資料來源同步之資料同步 → DataX 使用細節
- PHP最佳實踐之資料庫PHP資料庫
- 關係型資料庫之SQL資料庫SQL
- 關係型資料庫之索引資料庫索引
- PHP 資料庫擴充之 PDOPHP資料庫
- Oracle資料庫恢復之resetlogsOracle資料庫