Mysql

使用 INFORMATION_SCHEMA.TABLE 與文件系統計算磁碟使用情況?

  • April 16, 2019

MySQL的數據庫大小可以

SELECT table_schema AS db_name, SUM(data_length + index_length) AS size
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema != 'INFORMATION_SCHEMA'
GROUP BY db_name

但是您也可以通過查看數據目錄的磁碟使用情況來計算數據庫大小。這兩個數字應該偏離嗎?有沒有理由使用其中一種方法?通過擴展,INFORMATION_SCHEMA.TABLESdata_length和是如何index_length計算的?

好吧,似乎有兩種表現偏差的方式,

  • 使用(預設)查詢時的統計innodb_stats_on_metadata資訊會強制更新統計資訊(如果未記憶體)。您可以將其關閉,但這樣做需要您進行GLOBAL更改。從文件

啟用後,InnoDB 會在元數據語句(例如訪問 or 表時)更新非innodb_stats_on_metadata持久統計資訊。(這些更新類似於發生的情況。)禁用時,InnoDB 在這些操作期間不會更新統計資訊。禁用該設置可以提高具有大量表或索引的模式的訪問速度。它還可以提高涉及 InnoDB 表的查詢的執行計劃的穩定性。SHOW TABLE STATUSINFORMATION_SCHEMA.TABLESINFORMATION_SCHEMA.STATISTICS``ANALYZE TABLE

要更改設置,請發出語句SET GLOBAL innodb_stats_on_metadata=mode,其中 mode 是ONor OFF(或1or 0)。更改設置需要足夠的權限來設置全域系統變數(請參閱第 5.1.9.1 節,“系統變數權限”)並立即影響所有連接的操作。

我沒有看到任何其他文件或程式碼中讓我相信存在差異的內容。

引用自:https://dba.stackexchange.com/questions/234832