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是根據行的插入順序單調遞增的。因此表數據排列順序也是依賴錶行的寫入順序。