mysql之InnoDB基礎瞭解
InnODB引擎支援眾多特性:
a) 支援ACID,簡單地說就是支援事務完整性、一致性;
b) 支援行鎖,以及類似ORACLE的一致性讀,多使用者併發;
c) 獨有的聚集索引主鍵設計方式,可大幅提升併發讀寫效能;
d) 支援外來鍵;
e) 支援崩潰資料自修復;
my.cnf 配置選項:
#InnoDB儲存資料字典、內部資料結構的緩衝池,16MB 已經足夠大了。
innodb_additional_mem_pool_size = 16M#InnoDB用於快取資料、索引、鎖、插入緩衝、資料字典等
#如果是專用的DB伺服器,且以InnoDB引擎為主的場景,通常可設定實體記憶體的50%
#如果是非專用DB伺服器,可以先嚐試設定成記憶體的1/4,如果有問題再調整
#預設值是8M,非常坑X,這也是導致很多人覺得InnoDB不如MyISAM好用的緣故
innodb_buffer_pool_size = 4G
#InnoDB共享表空間初始化大小,預設是 10MB,也非常坑X,改成 1GB,並且自動擴充套件
innodb_data_file_path = ibdata1:1G:autoextend
#如果不瞭解本選項,建議設定為1,能較好保護資料可靠性,對效能有一定影響,但可控
innodb_flush_log_at_trx_commit = 1
#InnoDB的log buffer,通常設定為 64MB 就足夠了
innodb_log_buffer_size = 64M
#InnoDB redo log大小,通常設定256MB 就足夠了
innodb_log_file_size = 256M
#InnoDB redo log檔案組,通常設定為 2 就足夠了
innodb_log_files_in_group = 2
#啟用InnoDB的獨立表空間模式,便於管理
innodb_file_per_table = 1
#啟用InnoDB的status file,便於管理員檢視以及監控等
innodb_status_file = 1
#設定事務隔離級別為 READ-COMMITED,提高事務效率,通常都滿足事務一致性要求
transaction_isolation = READ-COMMITTED
其他注意的選擇:
#設定最大併發連線數,如果前端程式是PHP,可適當加大,但不可過大
#如果前端程式採用連線池,可適當調小,避免連線數過大
max_connections = 60
#最大連線錯誤次數,可適當加大,防止頻繁連線錯誤後,前端host被mysql拒絕掉
max_connect_errors = 100000
#設定慢查詢閥值,建議設定最小的 1 秒
long_query_time = 1
#設定臨時表最大值,這是每次連線都會分配,不宜設定過大 max_heap_table_size 和 tmp_table_size 要設定一樣大
max_heap_table_size = 96M
tmp_table_size = 96M
#每個連線都會分配的一些排序、連線等緩衝,一般設定為 2MB 就足夠了
sort_buffer_size = 2M
join_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 2M
#建議關閉query cache,有些時候對效能反而是一種損害
query_cache_size = 0
#如果是以InnoDB引擎為主的DB,專用於MyISAM引擎的 key_buffer_size 可以設定較小,8MB 已足夠
#如果是以MyISAM引擎為主,可設定較大,但不能超過4G
#在這裡,強烈建議不使用MyISAM引擎,預設都是用InnoDB引擎
key_buffer_size = 8M
#設定連線超時閥值,如果前端程式採用短連線,建議縮短這2個值
#如果前端程式採用長連線,可直接註釋掉這兩個選項,是用預設配置(8小時)
interactive_timeout = 120
wait_timeout = 120
資料表設計注意點:
a) 所有InnoDB資料表都建立一個和業務無關的自增數字型作為主鍵,對保證效能很有幫助;
b) 杜絕使用text/blob,確實需要使用的,儘可能拆分出去成一個獨立的表;
c) 時間戳建議使用 TIMESTAMP 型別儲存;
d) IPV4 地址建議用 INT UNSIGNED 型別儲存;
e) 性別等非是即非的邏輯,建議採用 TINYINT 儲存,而不是 CHAR(1);
f) 儲存較長文字內容時,建議採用JSON/BSON格式儲存;
a) 支援ACID,簡單地說就是支援事務完整性、一致性;
b) 支援行鎖,以及類似ORACLE的一致性讀,多使用者併發;
c) 獨有的聚集索引主鍵設計方式,可大幅提升併發讀寫效能;
d) 支援外來鍵;
e) 支援崩潰資料自修復;
my.cnf 配置選項:
#InnoDB儲存資料字典、內部資料結構的緩衝池,16MB 已經足夠大了。
innodb_additional_mem_pool_size = 16M#InnoDB用於快取資料、索引、鎖、插入緩衝、資料字典等
#如果是專用的DB伺服器,且以InnoDB引擎為主的場景,通常可設定實體記憶體的50%
#如果是非專用DB伺服器,可以先嚐試設定成記憶體的1/4,如果有問題再調整
#預設值是8M,非常坑X,這也是導致很多人覺得InnoDB不如MyISAM好用的緣故
innodb_buffer_pool_size = 4G
#InnoDB共享表空間初始化大小,預設是 10MB,也非常坑X,改成 1GB,並且自動擴充套件
innodb_data_file_path = ibdata1:1G:autoextend
#如果不瞭解本選項,建議設定為1,能較好保護資料可靠性,對效能有一定影響,但可控
innodb_flush_log_at_trx_commit = 1
#InnoDB的log buffer,通常設定為 64MB 就足夠了
innodb_log_buffer_size = 64M
#InnoDB redo log大小,通常設定256MB 就足夠了
innodb_log_file_size = 256M
#InnoDB redo log檔案組,通常設定為 2 就足夠了
innodb_log_files_in_group = 2
#啟用InnoDB的獨立表空間模式,便於管理
innodb_file_per_table = 1
#啟用InnoDB的status file,便於管理員檢視以及監控等
innodb_status_file = 1
#設定事務隔離級別為 READ-COMMITED,提高事務效率,通常都滿足事務一致性要求
transaction_isolation = READ-COMMITTED
其他注意的選擇:
#設定最大併發連線數,如果前端程式是PHP,可適當加大,但不可過大
#如果前端程式採用連線池,可適當調小,避免連線數過大
max_connections = 60
#最大連線錯誤次數,可適當加大,防止頻繁連線錯誤後,前端host被mysql拒絕掉
max_connect_errors = 100000
#設定慢查詢閥值,建議設定最小的 1 秒
long_query_time = 1
#設定臨時表最大值,這是每次連線都會分配,不宜設定過大 max_heap_table_size 和 tmp_table_size 要設定一樣大
max_heap_table_size = 96M
tmp_table_size = 96M
#每個連線都會分配的一些排序、連線等緩衝,一般設定為 2MB 就足夠了
sort_buffer_size = 2M
join_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 2M
#建議關閉query cache,有些時候對效能反而是一種損害
query_cache_size = 0
#如果是以InnoDB引擎為主的DB,專用於MyISAM引擎的 key_buffer_size 可以設定較小,8MB 已足夠
#如果是以MyISAM引擎為主,可設定較大,但不能超過4G
#在這裡,強烈建議不使用MyISAM引擎,預設都是用InnoDB引擎
key_buffer_size = 8M
#設定連線超時閥值,如果前端程式採用短連線,建議縮短這2個值
#如果前端程式採用長連線,可直接註釋掉這兩個選項,是用預設配置(8小時)
interactive_timeout = 120
wait_timeout = 120
資料表設計注意點:
a) 所有InnoDB資料表都建立一個和業務無關的自增數字型作為主鍵,對保證效能很有幫助;
b) 杜絕使用text/blob,確實需要使用的,儘可能拆分出去成一個獨立的表;
c) 時間戳建議使用 TIMESTAMP 型別儲存;
d) IPV4 地址建議用 INT UNSIGNED 型別儲存;
e) 性別等非是即非的邏輯,建議採用 TINYINT 儲存,而不是 CHAR(1);
f) 儲存較長文字內容時,建議採用JSON/BSON格式儲存;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26855487/viewspace-760965/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Express基礎瞭解—路由Express路由
- MySQL:Innodb page clean 執行緒 (一) 基礎MySql執行緒
- 重返MySQL之MySQL基礎MySql
- 全面瞭解mysql鎖機制(InnoDB)與問題排查MySql
- Nginx深入瞭解-基礎(一)Nginx
- Nginx深入瞭解-基礎(三)Nginx
- Express基礎瞭解—模板引擎Express
- Java基礎系列:瞭解ArrayListJava
- Java基礎之淺談異常與瞭解斷言Java
- 一千行幫你全面瞭解MySQL的基礎知識MySql
- webpack 基礎入門 - 瞭解webpackWeb
- Express基礎瞭解—中介軟體Express
- Maven基礎瞭解及配置資訊Maven
- Zookeeper必須瞭解的基礎
- Mysql之新增innodb支援MySql
- MySQL之基礎架構MySql架構
- 瞭解直播帶貨系統使用的MySQL資料庫基礎MySql資料庫
- 前端基礎之CSS選擇器,你真的都瞭解嗎?前端CSS
- 簡單瞭解InnoDB底層原理
- 你真的瞭解Innodb儲存引擎?儲存引擎
- 移動端開發基礎瞭解
- 深入瞭解Oracle ASM(一):基礎概念OracleASM
- MySQL基礎之MySQL 5.7 新增配置MySql
- MySQL指南之基礎知識MySql
- MySQL基礎之DML語句MySql
- 《MySQL 基礎篇》十二:InnoDB 儲存引擎的資料結構MySql儲存引擎資料結構
- 詳細瞭解INNODB_TRX、INNODB_LOCKs、INNODB_LOCK_waits、PROCESSLIST表AI
- 一文帶你瞭解nginx基礎Nginx
- java基礎-多執行緒初步瞭解Java執行緒
- Flutter環境配置 + 基礎知識瞭解Flutter
- [JS基礎] 帶你深入瞭解JS原型JS原型
- 2.C_Sharp基礎深入瞭解
- 資料庫篇-mysql詳解( 一 )之基礎應用資料庫MySql
- Mysql研磨之InnoDB行鎖模式MySql模式
- MySQL指南之SQL語句基礎MySql
- PHP基礎之與MySQL那些事PHPMySql
- MySQL(三)DQL之基礎查詢MySql
- mysql基礎概念之socket檔案MySql