MySQL技術內幕 InnoDB儲存引擎 之 InnoDB體系架構
後臺執行緒
1.Master Thread
2.IO Thread
3.Purge Thread
4.Page Cleaner Thread
記憶體
重做日誌在以下三種情況下將重做日誌快取中的內容重新整理到外部磁碟的重做日誌檔案:
- Master Thread 每一秒將重做日誌快取重新整理到重做日誌檔案;
- 每個事務提交時會將重做日誌快取重新整理到重做日誌檔案;
- 當重做日誌緩衝池剩餘空間小於1/2時,重做日誌緩衝重新整理到重做日誌檔案;
相關推薦
MySQL技術內幕 InnoDB儲存引擎 之 InnoDB體系架構
後臺執行緒 1.Master Thread 2.IO Thread 3.Purge Thread 4.Page Cleaner Thread 記憶體 重做日誌在以下三
MySQL InnoDB儲存引擎之表(一)
主要介紹InnoDB儲存引擎表的邏輯儲存以及實現。重點介紹資料在表中是如何組織和存放的。 1.索引組織表(index organized table) 在InnoDB儲存引擎中,表都是根據主鍵順序組織存放的,這種儲存方式的表叫索引組織表。在InnoDB存在引擎表中,
InnoDB 儲存引擎之索引和優化
資料庫優化可以說是後臺開發中永恆的話題,資料庫的效能通常是整個服務吞吐量的瓶頸之所在。 1. 索引概述 InnoDB中的表都是按照主鍵順序組織存放的,這種組織方式稱之為索引組織表,對比於MyISAM的表組織方式。在InnoDB中每張表都必須有一個主鍵,如果在建立表的時候沒有
MySQL技術內幕 InnoDB儲存引擎:一致性鎖定讀
在前一小節中講到,在預設配置下,即事務的隔離級別為 REPEATABLE READ 模式下, InnoDB 儲存引擎的 SELECT 操作使用一致性非鎖定讀。但是在某些情況下,使用者需要顯式地對資料庫讀取操作進行加鎖以保證資料邏輯的一致性。而這要求資料庫支援加鎖語句,即使是對於SELEC
MySQL技術內幕 InnoDB儲存引擎:一致性非鎖定讀
一致性的非鎖定行讀(consistent nonlocking read)是指InnoDB儲存引擎通過行多版本控制(multi versioning)的方式來讀取當前執行時間資料庫中行的資料。如果讀取的行正在執行DELETE、UPDATE操作,這是讀取操作不會因此而會等待行上鎖的釋放,相
MySQL技術內幕 InnoDB儲存引擎:B+樹索引的使用
1、聯合索引 MySQL允許對錶上的多個列進行索引,聯合索引的建立方法與單個索引建立的方法一樣,不同之處僅在於有多個索引列。 CREATE TABLE t( a INT, b INT, PRIMARY KEY(a), KEY idx_a_b(a, b) )ENGINE=InnoD
MySQL技術內幕 InnoDB儲存引擎:Cardinality
並不是所有在查詢條件中出現的列都需要新增索引,對於什麼時候新增B+樹索引,一般的經驗是,在訪問表中很少一部分行是使用B+樹索引才有意義。檢視索引是否是高選擇性的,可以通過SHOW INDEX語句中的Cardinality列來觀察。Cardinality是一個估計值,在實際中,Cardin
MySQL技術內幕 InnoDB儲存引擎:B+樹索引
B+ 樹索引並不能找到一個給定鍵值的具體行。 B+ 樹索引能找到的只是被查詢資料所在的頁。 然後資料庫通過把頁讀入到記憶體, 再在記憶體中進行查詢, 最後得到要查詢的資料。 平衡二叉樹 平衡二叉樹的定義如下:首先符合二叉查詢樹的定義,其次必須滿足任何節點的兩個字數的
MySQL技術內幕 InnoDB儲存引擎:分割槽表
一、MySQL分割槽表介紹 分割槽是一種表的設計模式,正確的分割槽可以極大地提升資料庫的查詢效率,完成更高質量的SQL程式設計。但是如果錯誤地使用分割槽,那麼分割槽可能帶來毀滅性的的結果。 分割槽功能並不是在儲存引擎層完成的,因此不只有InnoDB儲存引擎支援分割槽,常見的儲存引
MySQL技術內幕 InnoDB儲存引擎:阻塞、死鎖、鎖升級
1、堵塞 因為不同鎖之間的相容性關係,在有些時刻一個事務中的鎖需要等待另外一個事務中的鎖釋放它所佔用的資源,這就是堵塞。 引數innodb_lock_wait_timeout用來控制等待的時間,預設50秒,是可以動態設定的。 引數innodb_rollback_on
MySQL技術內幕 InnoDB儲存引擎:鎖問題(髒讀、不可重複讀)
1、髒讀 在理解髒讀(Dirty Read)之前,需要理解髒資料的概念。但是髒資料和之前所介紹的髒頁完全是兩種不同的概念。髒頁指的是在緩衝池中已經被修改的頁,但是還沒有重新整理到磁碟中,即資料庫例項記憶體中的頁和磁碟中的頁的資料是不一致的,當然在重新整理到磁碟之前,日誌都已經被寫人到
MySQL技術內幕 InnoDB儲存引擎:外來鍵與鎖
外來鍵主要用於引用完整性的約束檢查。在InnoDB儲存引擎中,對於一個外來鍵列,如果沒有顯示地對這個列加索引,InnoDB儲存引擎會自動對其加一個索引,因為這樣可以避免表鎖。 這比Oracle資料庫做得好,Oracle資料庫不會自動新增索引,使用者必須自己手動新增,這也導致了Oracle
MySQL技術內幕 InnoDB儲存引擎:行鎖的3種演算法
一、lock與latch 在資料庫中,lock與latch都可以成為鎖,但兩者有截然不同的含義 latch 一般稱為閂鎖(輕量級的鎖) 因為其要求鎖定的時間非常短,若持續時間長,則應用效能非常差,在InnoDB儲存引擎中,latch有可以分為mutex(互斥鎖)和rwlock(讀
MySQL技術內幕 InnoDB儲存引擎:事務
一、認識事務 InnoDB儲存引擎中的事務完全符合ACID的特性。ACID是以下4個詞的縮寫: 原子性(Atomicity):一個事務必須被視為一個不可分割的最小工作單元,整個事務中的所有操作要麼全部提交成功,要麼全部失敗回滾。 一致性(consistency):資
《MySQL技術內幕:InnoDB儲存引擎》——第3章 檔案
引數檔案 mysql --help | grep my.cnf mysql> show variables;//檢視引數 mysql> set read_buffer_size = 524288;//設定會話動態引數 mysql> set @@global.read
《MySQL技術內幕:InnoDB儲存引擎》——第2章 InnoDB儲存引擎
mysql> show engine innodb status;//檢視innodb儲存引擎狀態 mysql> show variables like 'innodb_version';//檢視innodb儲存引擎版本 mysql> show variables like
《MySQL技術內幕:InnoDB儲存引擎》——第1章 MySQL體系結構和儲存引擎
啟動 ./mysqld_safe & 檢視程序 ps -ef|grep mysqld 資料庫例項啟動時,讀取配置檔案的順序,後面的檔案配置會覆蓋前面的檔案配置 mysql --help | grep my.cnf mysql> show variables li
MySQL技術內幕:InnoDB儲存引擎-筆記
Innodb將通過主鍵聚集資料,如果沒有定義主鍵,Innodb會選擇第一個非空的唯一索引代替,如果沒有非空唯一索引,Innodb會隱式定義一個6位元組的rowid主鍵來作為聚集索引。 索引的底層原理(Page164) B+樹是為磁碟或其他直接存取輔助裝置而設計的一種
MySQL技術內幕InnoDB儲存引擎-03檔案
1.引數檔案 當MySQL例項啟動時,MySQL會先去讀一個配置引數檔案,用來尋找資料庫的各種檔案所在位置以及指定某些初始化引數,這些引數通常定義了某種記憶體結構有多大等設定。 MySQL例項也可以不需要引數檔案,這時所有的引數值取決於編譯MySQL時指定的預設值和原始碼中指定引數的
MySQL技術內幕InnoDB儲存引擎-02InnoDB儲存引擎
1、InnoDB儲存引擎概述 從MySQL5.5.8版本開始是預設的表儲存引擎,該儲存引擎是第一個完整支援ACID事務的MySQL儲存引擎,其特點是行鎖設計、支援MVCC、支援外來鍵、提供一致性非鎖定讀,同時被設計用來最有效地利用以及使用記憶體和CPU。 2、InnoDB體系架構