MySQL 8 InnoDB架構(Part2)

InnoDB In-Memory 架構mysql

Buffer Poolsql

系統變量:innodb_buffer_pool_size數據庫

 

Change Buffer服務器

表:information_schema.innodb_metrics 架構

表:information_schema.innodb_buffer_pages 併發

系統變量:innodb_change_buffering工具

系統變量:innodb_change_buffer_max_sizespa

 

Adaptive Hash Index日誌

系統變量:innodb_adaptive_hash_indexorm

系統變量:innodb_adaptive_hash_index_parts 

 

Log Bugger

系統變量:innodb_log_buffer_size

系統變量:innodb_flush_log_at_timeout

系統變量:innodb_flush_log_at_trx_commit

 

InnoDB On-Disk 架構

Tables

InnoDB 表能夠添加到file-per-table表空間、系統表空間、General 表空間。

內部:InnoDB爲每張表添加一條entry到數據字典中。

系統變量:innodb_default_row_format

查看InnoDB表屬性:

show table status from test like 't1'\G

select * from information_schema.innodb_tables where name='test/t1'\G

 

在數據目錄外建立表

方法一、CREATE TABLE ... DATA DIRECTORY

注意:加入到innodb_directories,這樣若是表須要恢復,MySQL知道表的數據文件在哪。

方法二、看起來像是畫蛇添足:CREATE TABLE ... TABLESPACE=innodb_file_per_table DATA DIRECTORY '/exteranl/directory';

方法三、利用外部通用表空間,建立數據目錄外的表,好比:

create tablespace ext_gen_tbs add datafile '/exteral/directory/tbs.ibd';

create table t5(col1 int) tablespace=ext_gen_tbs;

 

利用可傳輸表空間遷移數據

涉及SQL語句:

目標端:create table ...、alter table ... discard tablespace; alter table ... import tablespace;

源端:flush tables ... for export;

 

移動或者拷貝InnoDB表

可選方案:

傳輸表空間、MySQL企業備份(能夠用Percona Xtrabackup 替代)、拷貝數據文件、邏輯備份(mysqldump工具)

關於冷備份:

假設服務器硬件出故障:拷貝文件也是能夠恢復數據的:

InnoDB系統表空間、InnoDB 日誌文件、 MySQL 數據字典、系統表文件、各類系統數據庫、業務數據庫。

 

InnoDB處理 Auto-Increment

系統變量:innodb_autoinc_lock_mode 這個系統變量在MySQL 5.7的時候默認值是:1。MySQL 8.0 默認值是2

如今複製更可能是基於行的複製模式,innodb_autoinc_lock_mode=2,雖然在自增值上可能出現GAP,可是RBR模式下,主從節點數據一致性能夠保證。只有SBR模式下才會考慮innodb_autoinc_lock_mode=1

注:innodb_autoinc_lock_mode=2模式下,table-level AUTO-INC lock不會在Insert-like 語句中添加,增長對錶的併發寫入。

 

索引

clustered index 和 secondary index

clustered index 生成方式:若是表中定義了主鍵,主鍵就是clustered index。若是表中沒有定義主鍵,第一個unique index 做爲clustered index。若是前二者都不知足,InnoDB使用包含行ID的列做爲clustered index。這樣表數據的排列順序依賴 row id。而row id是根據行的插入順序單調遞增的。因此表數據排列順序也是依賴錶行的寫入順序。

相關文章
相關標籤/搜索