MySQL中lock與latch的區分


這里要區分鎖中容易令人混淆的概念lock與latch。在數據庫中,lock與latch都可以成為鎖,但兩者有截然不同的含義

latch 一般稱為閂鎖(輕量級的鎖) 因為其要求鎖定的時間非常短,若遲勛時間長,則應用性能非常差,在InnoDB存儲引擎中,latch有可以分為mutex(互斥鎖)和rwlock(讀寫鎖)其目的用來保證並發線程操作臨界資源的正確性,並且沒有死鎖檢測的機制

lock的對象是事務,用來鎖定的是數據庫中的UI想,如表、頁、行。並且一般lock對象僅在事務commit或rollback后進行釋放(不同事務隔離級別釋放的時間可能不同),此外lock正如大多數數據庫中一樣,是有死鎖機制的。表顯示了lock與latch的不同

在InnoDB存儲引擎中的latch,可以通過命令SHOW ENGINE INNODB MUTEX 來進行查看

mysql> SHOW ENGINE INNODB MUTEX;
+--------+-------------------+-------------+
| Type   | Name              | Status      |
+--------+-------------------+-------------+
| InnoDB | dict0dict.cc:1057 | os_waits=2  |
| InnoDB | log0log.cc:844    | os_waits=1  |
| InnoDB | fil0fil.cc:1690   | os_waits=1  |
| InnoDB | dict0dict.cc:1066 | os_waits=3  |
| InnoDB | log0log.cc:907    | os_waits=11 |
+--------+-------------------+-------------+
5 rows in set (4.14 sec)

在DEBUG版本下,通過SHOW ENGINE INNODB MUTEX 可以看到latch的更多信息

通過上述例子可以看到,type顯示的總是InnoDB,列Name顯示的是latch的信息及所在的源碼位置(行數)。列Status比較復雜,在DEBUG模式下,除了顯示os_waits,也會顯示count、spin_waits、spin_rounds、 os_yields、os_wait_times等信息。

相對於latch來看,lock信息就顯得直觀了。可以通過SHOW ENGINE INNODB STATUS 及information_schema架構下的INNODB_TRX、INNODB_LOCKS、INNODB_LOCK_WAITS來觀察鎖的信息 。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM