最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解MySQL中InnoDB的存儲文件

 更新時間:2018年02月10日 14:22:34   作者:風(fēng)云來  
本篇是一篇關(guān)于MySQL專題知識點的內(nèi)容,詳細(xì)講述了InnoDB的存儲文件的相關(guān)內(nèi)容,感興趣的朋友學(xué)習(xí)下。

從物理意義上來講,InnoDB表由共享表空間文件(ibdata1)、獨占表空間文件(ibd)、表結(jié)構(gòu)文件(.frm)、以及日志文件(redo文件等)組成。

1、表結(jié)構(gòu)文件

在MYSQL中建立任何一張數(shù)據(jù)表,在其數(shù)據(jù)目錄對應(yīng)的數(shù)據(jù)庫目錄下都有對應(yīng)表的.frm文件,.frm文件是用來保存每個數(shù)據(jù)表的元數(shù)據(jù)(meta)信息,包括表結(jié)構(gòu)的定義等,.frm文件跟數(shù)據(jù)庫存儲引擎無關(guān),也就是任何存儲引擎的數(shù)據(jù)表都必須有.frm文件,命名方式為數(shù)據(jù)表名.frm,如user.frm. .frm文件可以用來在數(shù)據(jù)庫崩潰時恢復(fù)表結(jié)構(gòu)。

2、表空間文件

(1)表空間結(jié)構(gòu)分析

以下為InnoDB的表空間結(jié)構(gòu)圖:

數(shù)據(jù)段即B+樹的葉子節(jié)點,索引段即為B+樹的非葉子節(jié)點InnoDB存儲引擎的管理是由引擎本身完成的,表空間(Tablespace)是由分散的段(Segment)組成。一個段(Segment)包含多個區(qū)(Extent)。

區(qū)(Extent)由64個連續(xù)的頁(Page)組成,每個頁大小為16K,即每個區(qū)大小為1MB,創(chuàng)建新表時,先使用32頁大小的碎片頁存放數(shù)據(jù),使用完后才是區(qū)的申請(InnoDB最多每次申請4個區(qū),保證數(shù)據(jù)的順序性能)
頁類型有:數(shù)據(jù)頁、Undo頁、系統(tǒng)頁、事務(wù)數(shù)據(jù)頁、插入緩沖位圖頁、以及插入緩沖空閑列表頁。

(2)獨占表空間文件

若將innodb_file_per_table設(shè)置為on,則系統(tǒng)將為每一個表單獨的生成一個table_name.ibd的文件,在此文件中,存儲與該表相關(guān)的數(shù)據(jù)、索引、表的內(nèi)部數(shù)據(jù)字典信息。

(3)共享表空間文件

在InnoDB存儲引擎中,默認(rèn)表空間文件是ibdata1(主要存儲的是共享表空間數(shù)據(jù)),初始化為10M,且可以擴(kuò)展,如下圖所示:

實際上,InnoDB的表空間文件是可以修改的,使用以下語句就可以修改:

Innodb_data_file_path=ibdata1:370M;ibdata2:50M:autoextend

使用共享表空間存儲方式時,Innodb的所有數(shù)據(jù)保存在一個單獨的表空間里面,而這個表空間可以由很多個文件組成,一個表可以跨多個文件存在,所以其大小限制不再是文件大小的限制,而是其自身的限制。從Innodb的官方文檔中可以看到,其表空間的最大限制為64TB,也就是說,Innodb的單表限制基本上也在64TB左右了,當(dāng)然這個大小是包括這個表的所有索引等其他相關(guān)數(shù)據(jù)。

而在使用單獨表空間存儲方式時,每個表的數(shù)據(jù)以一個單獨的文件來存放,這個時候的單表限制,又變成文件系統(tǒng)的大小限制了。

以下即為不同平臺下,單獨表空間文件最大限度。

Operating System File-size Limit
Win32 w/ FAT/FAT32 2GB/4GB
Win32 w/ NTFS 2TB (possibly larger)
Linux 2.4+ (using ext3 file system) 4TB
Solaris 9/10 16TB
MacOS X w/ HFS+ 2TB
NetWare w/NSS file system 8TB

※ 以下是MySQL文檔中的內(nèi)容:

Windows用戶請注意: FAT和VFAT (FAT32)不適合MySQL的生產(chǎn)使用。應(yīng)使用NTFS。

(4)共享表空間與獨占表空間

共享表空間以及獨占表空間都是針對數(shù)據(jù)的存儲方式而言的。

共享表空間: 某一個數(shù)據(jù)庫的所有的表數(shù)據(jù),索引文件全部放在一個文件中,默認(rèn)這個共享表空間的文件路徑在data目錄下。 默認(rèn)的文件名為:ibdata1 初始化為10M。

獨占表空間: 每一個表都將會生成以獨立的文件方式來進(jìn)行存儲(.ibd文件,這個文件包括了單獨一個表的數(shù)據(jù)內(nèi)容以及索引內(nèi)容)。

1)存儲內(nèi)容比較

使用獨占表空間之后:

每個表對應(yīng)的數(shù)據(jù)、索引和插入緩沖 存放在獨占表空間(.idb文件)

每個表對應(yīng)的撤銷(undo)信息,系統(tǒng)事務(wù)信息,二次寫緩沖等還是存放在了原來的共享表空間內(nèi)(ibdata1文件)

2)特點比較

具體的共享表空間和獨立表空間優(yōu)缺點如下:

共享表空間:

優(yōu)點:

可以放表空間分成多個文件存放到各個磁盤上(表空間文件大小不受表大小的限制,如一個表可以分布在不同的文件上)。

數(shù)據(jù)和文件放在一起方便管理。

缺點:

所有的數(shù)據(jù)和索引存放到一個文件中,則將有一個很常大的文件,雖然可以把一個大文件分成多個小文件,但是多個表及索引在表空間中混合存儲,這樣對于一個表做了大量刪除操作后表空間中將會有大量的空隙,特別是對于統(tǒng)計分析,日志系統(tǒng)這類應(yīng)用最不適合用共享表空間。

獨立表空間:(在配置文件(my.cnf)中設(shè)置 innodb_file_per_table)

優(yōu)點:

  1. 每個表都有自已獨立的表空間。
  2. 每個表的數(shù)據(jù)和索引都會存在自已的表空間中。
  3. 可以實現(xiàn)單表在不同的數(shù)據(jù)庫中移動。
  4. 空間可以回收

對于使用獨立表空間的表,不管怎么刪除,表空間的碎片不會太嚴(yán)重的影響性能,而且還有機(jī)會處理。

a)Drop table操作自動回收表空間

b)如果對于統(tǒng)計分析或是日值表,刪除大量數(shù)據(jù)后可以通過:alter table TableName engine=innodb;回縮不用的空間。

c) 對于使innodb-plugin的Innodb使用truncate table也會使空間收縮。

5、在服務(wù)器資源有限,單表數(shù)據(jù)不是特別多的情況下, 獨立表空間明顯比共享方式效率更高 . 但是MySQL 默認(rèn)是共享表空間 。

缺點:

單表體積可能過大,如超過100個G。

3)共享表空間以及獨占表空間之間的轉(zhuǎn)化

修改獨占空表空間配置,配置以下參數(shù)

innodb_data_home_dir = "/user/local/mysql/var" 數(shù)據(jù)庫文件所存放的目錄

innodb_log_group_home_dir = "/user/local/mysql/var" 日志存放目錄

innodb_data_file_path=ibdata1:10M:autoextend 設(shè)置配置一個可擴(kuò)展大小的尺寸為10MB的單獨文件(共享數(shù)據(jù)文件),名為ibdata1。沒有給出文件的位置,所以默認(rèn)的是在MySQL的數(shù)據(jù)目錄內(nèi)。

innodb_file_per_table=1 是否使用共享還是獨占表空間 (1:為使用獨占表空間,0:為使用共享表空間)

查看innodb_file_per_table 變量,如果為OFF說明所使用的是共享表空間(默認(rèn)情況下,所使用的表空間為共享表空間)

對innodb_file_per_table 進(jìn)行修改時,對于之前使用過的共享表空間不會影響,除非手動的去進(jìn)行修改

注意:

InnoDB不創(chuàng)建目錄,所以在啟動服務(wù)器之前請確認(rèn)所配置的路徑目錄存在。

做數(shù)據(jù)的移植以及備份時,要注意數(shù)據(jù)文件的完整性.

相關(guān)文章

  • MySQL?with語句講解

    MySQL?with語句講解

    這篇文章主要介紹了MySQL?with語句小結(jié),對于邏輯復(fù)雜的sql,with可以大大減少臨時表的數(shù)量,提升代碼的可讀性、可維護(hù)性,對mysql?with語句相關(guān)知識感興趣的朋友一起看看吧
    2022-11-11
  • MySQL批量插入唯一索引沖突的幾種避免辦法

    MySQL批量插入唯一索引沖突的幾種避免辦法

    我們在進(jìn)行大批量的數(shù)據(jù)插入時,遇到唯一索引沖突是經(jīng)常的事,本文主要介紹了MySQL批量插入唯一索引沖突的幾種避免辦法,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • Navicat操作MYSQL的詳細(xì)過程

    Navicat操作MYSQL的詳細(xì)過程

    這篇文章主要介紹了Navicat操作MYSQL的詳細(xì)過程,包括數(shù)據(jù)表的操作修改刪除操作,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • ubuntu系統(tǒng)中Mysql ERROR 1045 (28000): Access denied for user root@ localhost問題的解決方法

    ubuntu系統(tǒng)中Mysql ERROR 1045 (28000): Acces

    這篇文章主要介紹了ubuntu系統(tǒng)安裝mysql登陸提示 解決Mysql ERROR 1045 (28000): Access denied for user root@ localhost問題,需要的朋友可以參考下
    2017-05-05
  • mysql 8.0.16 winx64安裝配置方法圖文教程

    mysql 8.0.16 winx64安裝配置方法圖文教程

    這篇文章主要為大家分享了mysql 8.0.16 安裝配置方法圖文教程,具有一定的參考價值,感興趣的朋友可以參考一下
    2019-05-05
  • 微信昵稱帶符號導(dǎo)致插入MySQL數(shù)據(jù)庫時出錯的解決方案

    微信昵稱帶符號導(dǎo)致插入MySQL數(shù)據(jù)庫時出錯的解決方案

    Mysql的utf8編碼最多3個字節(jié),而Emoji表情或者某些特殊字符是4個字節(jié),所以會導(dǎo)致帶有表情的昵稱插入數(shù)據(jù)庫時出錯,下面給大家分享下解決方案,需要的朋友參考下吧
    2016-12-12
  • Windows下重啟MySQL服務(wù)時報錯:服務(wù)名無效的解決方法

    Windows下重啟MySQL服務(wù)時報錯:服務(wù)名無效的解決方法

    這篇文章主要介紹了Windows下重啟MySQL服務(wù)時報錯:服務(wù)名無效的解決方法,文中通過代碼示例講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-12-12
  • MySQL查詢優(yōu)化:連接查詢排序淺談

    MySQL查詢優(yōu)化:連接查詢排序淺談

    不知道有沒有人碰到過這樣惡心的問題:兩張表連接查詢并limit,SQL效率很高,但是加上order by以后,語句的執(zhí)行時間變的巨長,效率巨低。下邊就來看看這個問題需要如何解決
    2013-02-02
  • MySQL錯誤日志與通用查詢?nèi)罩緢D文詳析

    MySQL錯誤日志與通用查詢?nèi)罩緢D文詳析

    精通MySQL日志管理,這對處理故障與優(yōu)化太關(guān)鍵了,下面這篇文章主要給大家介紹了關(guān)于MySQL錯誤日志與通用查詢?nèi)罩镜南嚓P(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • MySQL 日期時間格式化函數(shù) DATE_FORMAT() 的使用示例詳解

    MySQL 日期時間格式化函數(shù) DATE_FORMAT() 的使用示例詳解

    `DATE_FORMAT()`是MySQL中用于格式化日期時間的函數(shù),本文詳細(xì)介紹了其語法、格式化字符串的含義以及常見日期時間格式組合,感興趣的朋友一起看看吧
    2025-03-03

最新評論

临沭县| 南陵县| 靖西县| 宣化县| 定结县| 扬中市| 离岛区| 古浪县| 临安市| 罗甸县| 易门县| 砚山县| 寿阳县| 淮南市| 纳雍县| 钟祥市| 无极县| 将乐县| 翁源县| 毕节市| 外汇| 安庆市| 荣昌县| 板桥市| 城固县| 南京市| 绥芬河市| 新绛县| 凯里市| 休宁县| 弥渡县| 凌海市| 舞阳县| 辛集市| 沂源县| 日喀则市| 平乡县| 延津县| 桓台县| 三穗县| 营山县|