InnoDB文檔筆記(一)

同事推薦看看,以前都是看書,畢竟官方文檔仍是靠譜些(Verison 5.7)html

官網地址node

1、簡介

  • ACID事務、行級鎖、主鍵、外鍵
    特性

1.1 好處

  • crash recovery 故障重啓後自動恢復
  • buffer pool 經常使用數據和索引會緩存在內存中
  • foreign keys 外鍵約束
  • checksum 數據損壞提醒
  • primary key 主鍵
  • chang buffering
  • adaptive hash index

1.2 ACID

  • Atomicity 跟事務相關,包括autocommit、commit、rollback
  • Consistency 數據保護相關,包括doublewrite buffer、crash recovery
  • Isolation 事務隔離級別
  • Durability 依賴軟件硬件

1.3 InnoDB Multi-Versioning

  • 關於數據行的變動信息存儲在表空間裏面,叫作rollback segment
  • InnoBD在數據庫中爲每一行數據存儲三個字段。
    • DB_TRX_ID,6個字節,記錄上一次insert/update操做的事務ID(delete看做update)
    • DB_ROLL_PTR(roll pointer),7個字節,指向寫入rollback segement 的undo日誌記錄
    • DB_ROW_ID,6個字節,單調遞增,聚簇索引包括row ID
  • 存入rollback segement的Undo logs 分爲save undo logs和update undo logs
  • purge thread
  • 二級索引不包含系統隱藏列
  • 二級索引刪除或者更新,覆蓋索引將不能使用,InnoDB將從聚簇索引中讀取數據

2、InnoDB Architecture

3、InnoDB In-Memory Structures

3.1 Buffer Pool

在主內存中緩存表數據和索引數據。緩衝池是一個連續的頁,採用LRU算法淘汰不多使用的數據。mysql

3.2 Change Buffer

change buffer是一種特殊的數據結構,緩存二級索引頁的變化,而且這些緩存頁不在buffer pool中。change buffer主要有DML操做致使的,而且當有讀操做將頁面加載到buffer pool後,進行合併到buffer pool。事務提交會致使change buffer合併,服務器中止和重啓也會致使。若是二級索引包含降序索引列或主鍵包含降序索引列,則不支持更改緩衝。 change buffer默認佔有buffer pool內存的25%,最大爲50%。算法

3.3 Adaptive Hash Index

自適應Hash Index是爲加速查詢 在Mysql5.7中,對自適應Hash Index進行了分區,每一個索引綁定一個特定的分區,而且每一個分區是被分離鎖保護。分區是由innode_adaptive_hash_index_parts控制,默認8個分區,最大512。sql

3.4 Log Buffer

日誌緩衝區是存儲要寫入磁盤上的日誌文件的數據的內存區域。默認16MB。數據庫

4、InnoDB On-Disk Structures

4.1 Tables

4.1.1 Creating InnoDB Tables

InnoDB表及其索引能夠在system tablespace、file-per-table tablespace、general tablespace中建立。當innodb_file_per_table開啓,InnoDB table就隱式在每一個file-per-table tablespace中,相反則在system tablespace。至於general tablespace,則須要使用create table ... tablespace語句。 當新建一個InnoDB table時,會在數據庫data目錄下建立一個.frm的文件。緩存

  • 在file-per-table tablespace中建立的表,在數據庫目錄下會建立一個.ibd的文件。
  • 在system tablespace中建立的表,是在數據庫目錄下會現有的ibdata 文件中建立。
  • 在general tablespace中建立的表,是在現有的.ibd文件中建立。

數據行格式由innodb_default_row_format決定,默認是DYNAMIC。服務器

4.1.2 Moving or Copying InnoDB Tables

  • Transportable Tablespaces

前提是表是由innode_file_per_table tablespace建立。數據結構

  • MySQL Enterprise Backup
  • Copying Data Files (Cold Backup Method)
  • Export and Import (mysqldump)

4.1.3 Converting Tables from MyISAM to InnoDB

  • Adjusting Memory Usage for MyISAM and InnoDB
  • Handling Too-Long Or Too-Short Transactions
  • Handling Deadlocks
  • Planning the Storage Layout
  • Converting an Existing Table
  • Cloning the Structure of a Table
  • Transferring Existing Data
  • Storage Requirements
  • Defining a PRIMARY KEY for Each Table
  • Application Performance Considerations
  • Understanding Files Associated with InnoDB Tables

4.1.4 AUTO_INCREMENT Handling in InnoDB

必須至少是索引的一部分ide

4.2 Indexes

聚簇索引存儲行數據,聚簇索引和主鍵是一致的。

沒有定義主鍵或者沒有合適的惟一索引,InnoDB內部在包含row id值的合成列上生成一個名爲GEN_CLUST_INDEX的隱藏集羣索引。這個row id佔用6個字節。

二級索引包含主鍵值,經過主鍵值查找聚簇索引。

除了空間索引是R-tree結構,其餘的InnoDB索引都是B-tree結構,索引記錄都存在樹的葉子節點上,默認一個索引頁大小16kb。索引記錄是有序存儲的,這樣可讓索引頁15/16的空間是利用的,1/16的空間給索引增長預留。

4.2.1 Sorted Index Bulid

index bulid分爲三個階段

  • 第一階段:掃描彙集索引,生成索引條目並將其添加到排序緩衝區。當排序緩衝區滿時,條目將被排序並寫入臨時中間文件。這個過程也稱爲「run」。
  • 第二階段:將一個或多個run寫入臨時中間文件,對文件中的全部條目執行合併排序。
  • 第三階段:排序後的條目被插入到B-tree中。
相關文章
相關標籤/搜索