MYSQL系列之術語部分講解

2021-10-17 23:38:14 字數 1309 閱讀 8273

二.server層

wal 的全稱是 write-ahead logging,它的關鍵點就是先寫日誌,再寫磁碟。

如果每一次的更新操作都需要寫進磁碟,然後磁碟也要找到對應的那條記錄,然後再更新,整個過程 io 成本、查詢成本都很高。這就是wal技術的出現原因。

簡單來說,事務就是要保證一組資料庫操作,要麼全部成功,要麼全部失敗。

索引是對資料庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問資料庫表中的特定資訊。

簡單來講索引類似與字典的目錄一樣。

字面理解為撤銷日誌。用於事務間的可見性操作。

在我理解看來,乙個事務可以看到的資料是什麼,為了滿足事務的隔離性而引入,通過他我們可以在不同的隔離級別看到同一資料的不同數值。

如下圖所示:

不同事務隔離級別中,同一事務可看到的檢視可能不同,那麼如果在可重複讀隔離級別中只能看到read-view a,但是我們的資料此時檢視已經為read-view c,那麼我們當前可看到的檢視即為當前檢視與undo log回滾日誌得到的。

事務id,innodb 內部維護了乙個 max_trx_id 全域性變數,每次需要申請乙個新的 trx_id 時,就獲得 max_trx_id 的當前值,然後並將 max_trx_id 加 1。對於正在執行的事務,你可以從 information_schema.innodb_trx 表中看到事務的 trx_id。

如果建立的 innodb 表沒有指定主鍵,那麼 innodb 會給你建立乙個不可見的,長度為 6 個位元組的 row_id。innodb 維護了乙個全域性的 dict_sys.row_id 值,所有無主鍵的 innodb 表,每插入一行資料,都將當前的 dict_sys.row_id 值作為要插入資料的 row_id,然後把 dict_sys.row_id 的值加 1。如果row_id自增到達上限後,會重新開始計數,在我們的表上面表示的就是覆蓋了之前的資料,所以我們需要在我們建立的表上顯示加上主鍵,以免通過row_id覆蓋資料,表現出資料丟失的嚴重後果。

binlog 是邏輯日誌,記錄的是乙個語句的原始邏輯,比如「給 id=2 這一行的 c 欄位加 1 」。

redo log 和 binlog 相配合的時候,它們有乙個共同的字段叫作 xid。它在 mysql 中是用來對應事務的。在乙個事務中,兩階段提交中redo log 和 binlog通過xid確認彼此。並且xid是server層維護的。

thread_id 的邏輯很好理解:系統儲存了乙個全域性變數 thread_id_counter,每新建乙個連線,就將 thread_id_counter 賦值給這個新連線的執行緒變數。thread_id_counter 定義的大小是 4 個位元組,因此達到 2的32次方-1 後,它就會重置為 0,然後繼續增加。

Redis 講解系列之 Redis入門

能幹嘛去哪下 redis的核心功能點 win7 版安裝 一般不建議在windows下安裝,因為一般企業的使用或者redis功能發揮最優良的os env 是unix,所以建議使用unix或者linux os,當然如果專案除錯os env是window或者報以接觸學習的目的的話windows 完全可以滿...

MySQL系列,第1部分 Mysql簡介

mysql是乙個關係型資料庫管理系統 由瑞典 mysql ab 公司開發,目前屬於 oracle 公司。mysql 最流行的關係型資料庫管理系統 在 web 應用方面 mysql 是最好的 rdbms relational database management system,關聯式資料庫管理系統 ...

MySQL系列之鎖

分布式鎖 疑問?什麼是共享鎖?共享鎖 共享讀鎖,排他鎖 獨佔寫鎖 鎖機制與innodb鎖演算法 在關係型資料庫中,可以按照鎖的粒度把資料庫鎖分為行級鎖 innodb引擎 表級鎖 myisam引擎 和頁級鎖 bdb引擎 myisam採用表級鎖 table level locking innodb支援行...