真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

mysql引擎筆記整理

查看當前的MySQL數(shù)據(jù)庫都支持什么樣的存儲引擎:
mysql> show engines;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    170700
Current database: *** NONE ***
mysql引擎筆記整理
注:
1、support的狀態(tài)有default,yes,no,disabled。no表示該引擎不可用,disabled表示支持該引擎,但是當前被禁用。
2、Transactions表示是否支持事務。
3、XA表示是否支持分布式事務。
4、Savepoints表示是否支持保存點。

mysql中自帶的也比較常見的存儲引擎有:MyISAM,Innodb,NDB Cluster,Memory,Archive,Merge,F(xiàn)ederated等。其中,最著名和廣泛的就是MyISAM,Innodb。

1) MEMORY引擎
MEMORY存儲引擎的表只擁有一個獨立的磁盤文件,擴展名為.frm,用來存儲表結構的定義,不包含數(shù)據(jù)。
MEMORY引擎表的數(shù)據(jù)保存在內存中,mysql服務端需要單獨為其分配內存區(qū)域。分配給它的內存在正常狀態(tài)下不會釋放,會一直被持有。除非整個MEMORY表被刪除或重建才會釋放相關內存。
如果僅刪除MEMORY引擎表中的數(shù)據(jù),釋放的內存會被該表新插入的數(shù)據(jù)所使用,無法被其他對象或者線程使用。
當mysql服務關閉時,MEMORY引擎表中的數(shù)據(jù)都會丟失,表結構會予以保留。
MEMORY引擎表占用的最大內存由參數(shù)max_heap_table_size系統(tǒng)變量來決定。該值默認識16M??梢詾椴煌腗EMORY引擎表設置不同的最大內存。但是mysql服務重啟后,所有的MEMORY引擎表的最大內存又會被系統(tǒng)變量的值覆蓋掉。
---------設置最大內存為1M;----------
set max_heap_table_size=1024*1024;
create tabele test1(user varchar(10)) engine=memory;
---------設置最大內存為2M;----------
set max_heap_table_size=1024*1024*2;
create tabele test1(user varchar(10)) engine=memory;
除此之外,還可以在創(chuàng)建MEMORY引擎表時指定max_rows項的值來限制MEMORY引擎表所使用的內存。

2)csv存儲引擎
csv存儲引擎是基于csv格式文件存儲數(shù)據(jù)的。
csv存儲引擎表的所有列必須強制指定NOT NULL,而且csv存儲引擎表不支持索引,不支持分區(qū)。
csv存儲引擎表包含一個表的結構定義文件,擴展名為.frm,以及一個擴展名為.CSV的數(shù)據(jù)文件,還有一個同名的元信息文件,擴展名為.CSM,用來保存表狀態(tài)和表中保存的數(shù)據(jù)量。
.CSV的數(shù)據(jù)文件就是CSV格式的平面文本文件,可以用excel打開。
如果.CSV文件中的內容被損壞,可以用CHECK TABLE或者REPAIR TABLE命令來進行檢查和恢復。
CHECK TABLE命令用于檢查文件中的每一行是否合法,如果又發(fā)現(xiàn)不合法的行,就拋出異常。
REPAIR TABLE命令用來修復文件,將文件中損壞的數(shù)據(jù)清除掉。注意它會將出現(xiàn)損壞行之后的所有記錄行都清掉,而不管后面的記錄行是否有合法的數(shù)據(jù)。

3)ARCHIVE存儲引擎
基于ARCHIVE存儲引擎的對象,能夠將大量數(shù)據(jù)壓縮存儲,它使用了zlib無損數(shù)據(jù)壓縮算法,并且還可以使用OPTIMIZE TABLE分析表使其打包成更小的格式。
ARCHIVE存儲引擎的特點就是插入效率高,數(shù)據(jù)保存時占空間小。
ARCHIVE存儲引擎目前僅能支持insert和select語句,不支持update,delete,replace語句。支持order by操作,BLOB列等常規(guī)列,可以使用行級鎖定,但不支持索引。
ARCHIVE存儲引擎擁有.frm結構定義文件,以及擴展名為.arz的數(shù)據(jù)文件。在執(zhí)行優(yōu)化操作時可能還會出現(xiàn)一個擴展名為.arn的文件

4)BLACKHOLE引擎
BLACKHOLE引擎雖然可以像其他引擎一樣接受數(shù)據(jù),但是數(shù)據(jù)并不會保存。BLACKHOLE引擎表中永遠為空。但是,該引擎表支持各種索引。
盡管BLACKHOLE引擎表中不存放任何數(shù)據(jù),但是如果啟用了binlog,那么執(zhí)行的sql語句實際上是會被記錄的。
BLACKHOLE引擎表只有一個.frm格式的文件,用于保存表定義。

5)MRG_MYISAM存儲引擎
又稱為MERGE存儲引擎,它是將一組MyISAM表聚合在一起,使用時就像一張表一樣,以此來簡化查詢操作。
MRG_MYISAM存儲引擎表,要求基表擁有相同的列和索引信息,并且列的定義和順序,索引的順序都必須一模一樣。否則是無法聚合到一起的。
MRG_MYISAM存儲引擎表本身并不存儲數(shù)據(jù),只是一個匯總作用,但是它除了支持查詢操作外,也支持插入,修改,刪除操作。操作方式和普通的MyISAM表一樣。
只是插入的時候,需要一些配置,以指明往哪張MyISAM表中插入數(shù)據(jù)。這個配置就是創(chuàng)建MRG_MYISAM存儲引擎表時的INSERT_METHOD選項。
INSERT_METHOD選項有三個值,分別是NO,F(xiàn)IRST,LAST。NO表示不允許插入,是默認值。FIRST是插入第一張表。LAST是插入最后一張表。

6)FEDERATED存儲引擎
類似于oracle中的database link。默認mysql安裝時不安裝FEDERATED存儲引擎的,如果需要使用該引擎,在編譯安裝時,添加參數(shù)-DWITH_FEDERATED_STORAGE_ENGINE。并且在啟動mysql服務時,
附加參數(shù)--FEDERATED?;蛘咝薷膍y.cnf配置文件,加上FEDERATED一行,重啟mysql服務。
FEDERATED存儲引擎表,只有表結構,其物理數(shù)據(jù)是來自于遠端的mysql服務器。每個FEDERATED存儲引擎表都包含了兩個元素:一個遠端的mysql數(shù)據(jù)庫表,一個本地的數(shù)據(jù)庫表。
FEDERATED存儲引擎表在創(chuàng)建時,需要通過CONNECTION選項指定連接信息。CONNECTION選項有兩種寫法:一種通過字符串,一種是通過CREATE SERVER語句。通過CREATE SERVER語句創(chuàng)建的server信息都會被保存在mysql.servers表中。

7)MyISAM存儲引擎
每個MyISAM表對象都是由3個獨立的文件組成,擴展名分別是.frm,.MYD,.MYI。.frm文件用于存儲表對象的結構,.MYD用于存儲表數(shù)據(jù),.MYI用于存儲表的索引信息。
在MyISAM引擎表中,不管包含多少個CHAR/VARCHAR類型列,這些列的長度加起來也不能超過65535B,單表字符列最大長度不能超過65532B。
MyISAM引擎的主要優(yōu)點是快,查詢快,寫入快。但是缺點也比較明顯,不支持事務,鎖粒度太粗(表級鎖),在OLTP場景下不合適。
在存儲數(shù)據(jù)時,MyISAM引擎表支持三種存儲格式:FIXED(定長或稱靜態(tài)),DYNAMIC(動態(tài)),COMPRESSED(壓縮)。
靜態(tài)格式表就是表中不含變長度的列,比如varchar/varbinary/blob/text等,所定義的每一列保存的均是固定的字節(jié)數(shù)。或者創(chuàng)建時指定ROW_FORMAT=FIXED。優(yōu)點:簡單,查找數(shù)據(jù)最快,崩潰后最好恢復。缺點:費空間。
動態(tài)格式表就是和靜態(tài)格式表相反的,或者創(chuàng)建時指定了ROW_FORMAT=DYNAMIC。除了字符串長度小于4的列以外,其他字符列的長度都是動態(tài)的。優(yōu)點:省空間。缺點:查詢相對較慢,存儲空間碎片會比較多。崩潰后恢復操作比較麻煩。
(myisamchk工具:OPTIMIZE TABLE或者myisamchk -r命令用來消除碎片;myisamchk -ei用來查詢表的統(tǒng)計信息;myisamchk -ed命令用來查詢表對象的鏈接數(shù)。)
壓縮格式表:創(chuàng)建只能用myisampack創(chuàng)建,解壓縮用myisamchk命令。壓縮表只能讀,不能添加或修改記錄。

8)InnoDB存儲引擎
InnoDB擁有自己獨立的緩存池,對應參數(shù)是innodb_buffer_pool_size系統(tǒng)變量,類似于oracle數(shù)據(jù)庫中的SGA_TARGET,常用數(shù)據(jù)包括索引都在緩存中。
鎖粒度為行級,提供一致性讀。支持事務。支持外鍵約束。支持數(shù)據(jù)加密。支持查詢、數(shù)據(jù)、索引緩存。支持備份/恢復到時間點。
InnoDB存儲引擎表必須創(chuàng)建主鍵,一般選擇將經常需要查詢的列作為主鍵,如果沒有合適的列,就將主鍵創(chuàng)造到自動增長的列。
InnoDB能夠處理多會話并發(fā)讀寫同一個對象。
InnoDB有兩種表空間方式:系統(tǒng)表空間和多重表空間。
InnoDB系統(tǒng)表空間對應哪些物理文件,是由系統(tǒng)變量innodb_data_file_path來設置的:
mysql> show variables like "%innodb_data%";
+-----------------------+------------------------+
| Variable_name         | Value                  |
+-----------------------+------------------------+
| innodb_data_file_path | ibdata1:12M:autoextend |
| innodb_data_home_dir  |                        |
+-----------------------+------------------------+
2 rows in set (0.00 sec)
默認情況下,InnoDB數(shù)據(jù)文件時是存放在mysql的data目錄中,如果想變更目錄,可以通過系統(tǒng)變量innodb_data_home_dir來設置。
啟動innodb_file_per_table選項,以啟用多重表空間,使表中數(shù)據(jù)和索引保存在單獨的文件中,而不是保存在系統(tǒng)表空間中。
設置為多重表空間時,truncate存儲引擎為InnoDB的表速度很快,并且釋放的空間能夠被操作系統(tǒng)使用。
mysql5.6中,innodb_file_per_table選項默認是為啟動的。
mysql> show variables like "%innodb_file%";
+--------------------------+----------+
| Variable_name            | Value    |
+--------------------------+----------+
| innodb_file_format       | Antelope |
| innodb_file_format_check | ON       |
| innodb_file_format_max   | Antelope |
| innodb_file_per_table    | ON       |
+--------------------------+----------+
4 rows in set (0.00 sec)

InnoDB除了有表空間概念,還有自己專用的日志文件,即REDOLOG日志。
默認情況下,InnoDB引擎會創(chuàng)建兩組大小均為5M的日志文件,分別名為ib_logfile0和ib_logfile1。
關于InnoDB引擎日志的系統(tǒng)參數(shù)有以下幾個:innodb_log_group_home_dir redo log的保存路徑,默認是在datadir變量指定的路徑下
    innodb_log_file_size  每一個redo日志的大小,最大不能超過512G
    innodb_log_files_in_group  指定日志文件組的數(shù)量,默認是兩個,最多不超過100個
調整InnoDB引擎日志比較復雜,因為這幾個參數(shù)均是靜態(tài)參數(shù),并且調整它們還要依賴參數(shù)innodb_fast_shutdown。                                     
innodb_fast_shutdown參數(shù)用來控制InnoDB的關閉模式,有三個值:
    0  0模式類似于oracle的shutdown normal
    1  1模式類似于oracle的shutdown immediate,默認值是1
    2  2模式類似于oracle的shutdown abort
InnoDB引擎因為支持事務,所以一定會需要回滾段。關于InnoDB引擎的回滾段,有以下兩個參數(shù):innodb_undo_directory  指定UNDO日志的物理文件位置
     innodb_undo_tablespaces  指定UNDO表空間的數(shù)量,每個undo表空間都是獨立的.idb文件
     innodb_undo_logs   指定undo表空間中回滾段的數(shù)量
undo表空間一旦創(chuàng)建,就無法刪除。所以一旦使用了undo表空間,mysql的版本就無法從5.6降下去。 

默認情況下,連接到MYSQL服務的客戶端處于自動提交模式,即每條DML執(zhí)行即提交。
如何啟動InnoDB引擎的事務支持?有兩種方式:
1、禁用事務的自動提交:
將autocommit系統(tǒng)變量置為0或者OFF。以后就由用戶來決定是否提交或者回滾事務。
autocommit是會話級變量,只針對當前會話,無法全局生效。
mysql> show variables like "%autocommit%";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | ON    |
+---------------+-------+
1 row in set (0.00 sec)
2、顯式聲明事務,通過語句start transaction語句。

mysql庫中的表默認均為MYISAM引擎表,不可以更改引擎。
對于InnoDB引擎表而言,用show table status返回表的記錄行數(shù),行長度等狀態(tài)信息并不精確,只是一個估算值。最好用count函數(shù)來進行統(tǒng)計。


InnoDB引擎表的邏輯存儲結構從小到大分為頁(pages)/塊,擴展(extend)/區(qū),段(segments),表空間。
頁(pages)/塊: 基本單位,默認大小為16K,可以通過參數(shù)innodb_page_size變量設置,可選值有4k,8k,16k
擴展(extend)/區(qū):每個區(qū)固定1M大小,區(qū)由頁構成。
段(segments):InnoDB中,段實際上指的是獨立表空間對應的數(shù)據(jù)文件。
表空間:
 
InnoDB引擎內部在保存數(shù)據(jù)到數(shù)據(jù)庫時,會自動生成3個內部列:DB_TRX_IDG標記事務的標識符,DB_ROLL_PRT為回滾標記,DB_ROW_ID為行ID
回滾段中的UNDO日志分為insert UNDO日志和update UNDO日志。
insert UNDO日志:僅在事務回滾時需要,事務提交后即被廢棄
update UNDO日志:用于構造一致性讀。
回滾段中的UNDO日志記錄大小,一般會小于實際插入或者修改的記錄大小。

purge線程:delete記錄時,記錄并不會立即在物理上被刪除,只有當InnoDB廢棄update UNDO日志后,才會從物理上移除關聯(lián)的列和索引記錄,這種移除操作稱之為purge。
控制purge線程延遲可以用過系統(tǒng)變量innodb_max_purge_lag進行設置。

網站題目:mysql引擎筆記整理
文章路徑:http://weahome.cn/article/jsoidp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部