批量鎖(適用各種關係型資料庫)
自己原文公眾號: https://mp.weixin.qq.com/s/3zyXC0oJtMV2hEZ6v_e2pg
一次處理Oracle問題。看到AWR已經這樣了。說明後臺屬於慘不忍睹。
其實每個資料庫都應該有這麼一個類似AWR的才好判斷。迄今為止PG上國內瀚高做了一個類似的,連介面樣式都雷同AWR,是比較好的。希望有一天MySQL官方也出一個AWR。
原因我這裡不貼資料了,結論是鎖導致的。分析下來是批量鎖造成的。首先說明一下資料庫不怕併發,一般來說主流資料庫併發處理一行保守估計每秒100次是沒有問題的。僅僅這個資料庫而言在發生問題的時段另外一個表每秒執行了2萬次的更新。所以不是資料庫問題,而是表和SQL的問題。
既然同一個資料庫每秒能執行這麼多,怎麼會鎖?這就說說場景了,一般來說就像我們12306,有人買上海到北京的,有人買北京到廣州等等,都能分散。也有一等、二等座等等。每次我們每人只買一個。但是也有人報一節車廂。所以就分為單買和團購兩種。單買併發多,每個也快。團購這種少,團購一次性上百張,會多花一點時間。但是不太可能有併發團購的場景。就像我們查一條資料很快,查幾年的報表就會慢一點。但是沒人會批量併發出報表吧?
而事實就是發生了,我見過報表有併發出的場景。(不合理吧?但是就是有)所以併發批量團購(併發批量改也一樣是可能的)
這個很好重現,上資料。這個表有100萬資料,查詢一下50毫秒。(因為就2列,但是即使列多在億級別這都不叫事),其實無論MySQL和PG單表也是可以的。
執行一個批量改的儲存過程,模擬批量團購。
5秒完成10萬行記錄的更新。
所以一秒2萬行的更新是輕鬆的,也是做得到的。
接下來併發團購模擬一下(儘管這種不合理)
可以看出一個是5秒(沒變化),另外一個是8秒,多了3秒。這個多的就是在等第一個批量執行完成。
也就是說如果多幾個乃至幾十個批量更新,越在後面的執行時間越長,因為她要等在她之前的所有批量執行完畢。這都是鎖等待。就我復現的場景而言,如果併發的間隔控制在5秒以上還能滿足的這個不合理的場景。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/637517/viewspace-2848076/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關係型資料庫與非關係型資料庫介紹!資料庫
- NoSQL:從關係型資料庫到非關係型資料庫SQL資料庫
- 關係型資料庫資料庫
- 關係型資料庫和非關係型資料庫的區別資料庫
- PostgreSQL關係型資料庫SQL資料庫
- 關係型資料庫概要資料庫
- 關係型資料庫原理資料庫
- cmsis和各種庫的關係
- 關係型資料庫,何以稱為“關係”資料庫
- 關係型資料庫和非關係型資料庫的簡單對比資料庫
- OO資料庫和關係型資料庫資料庫
- 非關係型資料庫(NOSQL)和關係型資料庫(SQL)區別詳解資料庫SQL
- 關係型資料庫之SQL資料庫SQL
- 關係型資料庫之索引資料庫索引
- 關係型資料庫的理解資料庫
- 關係型資料庫理論資料庫
- 非關係型資料庫:Cassandra資料庫
- redis—非關係型資料庫Redis資料庫
- 資料庫入門之3張表對比關係型與非關係型資料庫資料庫
- 關係型資料庫和非關係型資料庫介紹及優劣勢比較資料庫
- NoSQL資料庫探討 -- 非關係型資料庫SQL資料庫
- SQLALchemy操作MySQL關係型資料庫MySql資料庫
- mysqlclient操作MySQL關係型資料庫MySqlclient資料庫
- FastAPI(44)- 操作關係型資料庫ASTAPI資料庫
- Node MySQL打造關係型資料庫MySql資料庫
- 關係型資料庫的四種事務隔離級別資料庫
- SQL與NoSQL(關係型與非關係型)資料庫的區別SQL資料庫
- 資料庫——關係型資料庫MySQL--簡單使用資料庫MySql
- 一張圖解釋各種資料庫型別圖解資料庫型別
- 如何選擇各種型別資料庫?- Raj型別資料庫
- 一張圖瀏覽資料庫各種型別資料庫型別
- 平時常見關係型資料庫資料庫
- 聊聊非關係型資料庫MongoDB索引資料庫MongoDB索引
- 反DDD模式之關係型資料庫模式資料庫
- 列舉常見的關係型資料庫和非關係型都有那些?資料庫
- 關係型資料庫:使用正規化建立資料庫(轉)資料庫
- 關係型和非關係型資料庫一定要對立?達夢資料提供新思路資料庫
- 雲關係型資料庫(Relational Database Service,RDS)資料庫Database