mysql 表空間


什么是表空間
默認情況下,InnoDB只包含一個稱為系統表空間的表空間,其標識符為0.可以使用innodb_file_per_table配置參數間接創建更多表空間。表空間由一系列文件組成。文件的大小不必被數據庫塊大小整除,因為我們可能只保留最后一個未完成的塊。將新文件追加到表空間時,還會指定文件的最大大小。目前,我們認為最好在創建文件時將文件擴展到其最大大小,因為當表空間需要更多空間時,我們可以避免動態擴展文件。數據文件是動態擴展的,但重做日志文件是預先分配的。另外,如前所述,只有系統表空間可以有多個數據文件。還清楚地提到,即使表空間可以有多個文件,它們也被認為是連接在一起的單個大文件。因此表空間中文件的順序很重要。

一個數據文件,可以保存一個或多個InnoDB表和相關索引的數據。

根據每個表的信息通道配置,有許多類型的表空間。這些是,

a:系統表空間

b:每個表空間的文件

c:常規表空間

系統表空間包含,

1.InnoDB數據字典。
2.DoubleWrite緩沖區。
3.改變緩沖區
4.撤消日志。
除此之外它還包含,

1.表
2.索引數據
相關文件是 .idbdata1

innodb_file_per_table選項在MySQL 5.6及更高版本中默認啟用,允許在每個表的文件表空間中創建表,每個表都有一個單獨的數據文件。啟用innodb_file_per_table選項可以使用其他MySQL功能,例如表壓縮和可傳輸表空間。相關文件是 .idbd

InnoDB在MySQL 5.7.6中引入了通用表空間。常規表空間是使用CREATE TABLESPACE語法創建的共享表空間。它們可以在MySQL數據目錄之外創建,能夠保存多個表,並支持所有行格式的表。

怎么通過SQL語句查看MySQL數據庫的表空間狀態

 1. 查看數據庫的索引空間大小,運行以下SQL語句:

-- 以GB為單位

# 查看mysql庫, 如果想查看其他庫,改變結尾數據庫名稱
SELECT CONCAT(ROUND(SUM(index_length)/(1024*1024*1024), 6), ' GB') AS 'Total Index Size' FROM information_schema.TABLES WHERE table_schema LIKE 'mysql';

 

 

 

 -- 以MB為單位

SELECT CONCAT(ROUND(SUM(index_length)/(1024*1024), 6), ' MB') AS 'Total Index Size'
FROM information_schema.TABLES WHERE table_schema LIKE 'mysql';

查看數據庫中所有表的信息

在MySQL Workbench中運行以下SQL語句,查看數據庫中所有表的表名、表行數、數據空間大小、索引空間大小和總大小:

SELECT CONCAT(table_schema,'.',table_name) AS 'Table Name',
table_rows AS 'Number of Rows',
CONCAT(ROUND(data_length/(1024*1024),6),' MB') AS 'Data Size',
CONCAT(ROUND(index_length/(1024*1024),6),' MB') AS 'Index Size',
CONCAT(ROUND((data_length+index_length)/(1024*1024),6),' MB') AS'Total Size'
FROM information_schema.TABLES
WHERE table_schema LIKE 'database';

其中,database是待查看數據庫的名稱,例如:mysql。運行結果如下圖所示:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM