PostgreSQL spin 與 lwlock
在PostgreSQL 中,記憶體鎖大致可以分為spin lock, lwlock以及Lock。
1.spin lock
就是自旋鎖,實現的成本最低,一般使用TAS(test and set)來實現,而TAS操作,通常由硬體來實現記憶體操作。沒有佇列的概念。
因此速度是最快的。通常只有exlusive一種模式,要麼得到,要麼不斷spin-》sleep-》spin。詳細內容見可我另外一篇文章“TAS 指令與PostgreSQL spin lock“。
PG中,s_lock.h中定義的tas指令操作:
從上面的asm 嵌入指令中,可以看出彙編指令的操作也就是簡單的比較與置位。實現簡單快速。
2.lwlock
也就是PG中所講的輕量級鎖(Light-weight lock)。這個鎖一般由spin lock來保護。lwlock比spin lock多一種共享模式。
原始碼中定義:
其中 slock_t 型別的mutex就是用來保護LWLOCK的,另外多了shared模式。因此,從實現上比spin重了點。但是跟lock比,還是比較輕量級的,這也是為什麼有了Light-Weight Lock的名稱的原因。
PG中預設預先定義了許多LWLOCK,通常是跟共享記憶體的操作相關的。比較著名的如:
BufFreelistLock:用來保護buffer pool的freelist
WALInsertLock,WALWriteLock:用來保護WAL
ControlFileLock:保護控制檔案的寫
CheckpointLock:保護檢查點
3.lock
是PG中重量級鎖,是low-level鎖,與表和事務相關。為application級別鎖。這就是通常我們講的表鎖,行鎖等。定義如下:
NoLock 0 /* NoLock is not a lock mode, but a flag value meaning "don't get a lock" */ |
lock的獲取與釋放,都有佇列來維護。原始碼定義如下:
LOCKTAG,與PG中的資料庫,relation等強相關。與資料庫中表存在一一對映關係。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30088583/viewspace-1587930/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- TAS 指令與PostgreSQL spin lockSQL
- spin_lock、spin_lock_irq、spin_lock_irqsave區別【轉】
- 【轉】spin lock 和mutexMutex
- Pthreads並行程式設計之spin lock與mutex效能對比分析thread並行行程程式設計Mutex
- MFC NumericUpDown Spin控制元件 CSpinButtonCtrl控制元件
- No Response from the Server, Does it Hang or Spin? (Doc ID 68738.1)Server
- PostgreSQL:啟動與停止SQL
- PostgreSQL與MySQL比較MySql
- Large result cache can cause sessions to spin -instance to hangSession
- PostgreSQL TPROC-C基準測試:PostgreSQL 12與PostgreSQL 13效能對比SQL
- 金倉資料庫KingbaseES等待事件之LWLock lock_manager資料庫事件
- Postgresql與MySQL的區別MySql
- 聊一聊Greenplum與PostgreSQLSQL
- Postgresql 備份與恢復SQL
- postgresql 優化與維護SQL優化
- 《PostgreSQL》 索引與最佳化SQL索引
- PostgreSQL與MySQL的比較 - hackrMySql
- PostgreSQL與Oracle的sql差異SQLOracle
- PostgreSQL中索引與CTE簡介SQL索引
- 開發一個抽獎大轉盤 Lucky-spin
- 為大家分享一個 Ajax Loading —— spin.jsJS
- 資料安全與PostgreSQL:保護策略SQL
- [DB]PostgreSQL 與 MySQL 相比,優勢何在?MySql
- Mac 下 PostgreSQL 的安裝與使用MacSQL
- PostgreSQL vacuum原理一功能與引數SQL
- 一天學會PostgreSQL應用開發與管理-8PostgreSQL管理SQL
- PostgreSQL Like查詢與正規表示式SQL
- PostgreSQL與MySQL常用命令對照MySql
- postgresql備份與恢復資料庫SQL資料庫
- PostgreSQL:資料庫的建立與刪除SQL資料庫
- PostgreSQL 插入時間與更新時間(qbit)SQL
- PostgreSQL與Rust的聚合實現比較SQLRust
- PostgreSQL、Redis與Memcached的效能比較 - CYBERTECSQLRedis
- PostgreSQL在Linux下安裝與使用SQLLinux
- PostgreSQL XID與virtual XID區別SQL
- Linux核心同步機制之(五):Read Write spin lock【轉】Linux
- [20190401]隱含引數_mutex_spin_count.txtMutex
- 副作用是程式設計頭號敵人!如何剝離它?- spin程式設計