MySQL 表空間

目錄

什麼是表空間

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


什麼是表空間

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

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

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

a:系統表空間

b:每個表空間的文件

c:常規表空間

系統表空間包含,

  1. InnoDB數據字典。
  2. DoubleWrite緩衝區。
  3. 改變緩衝區
  4. 撤消日誌。

除此之外它還包含,

  1. 索引數據

相關文件是 .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。運行結果如下圖所示:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章