1. 程式人生 > >【mysql 資料庫監控篇】資料庫表空間大小監控

【mysql 資料庫監控篇】資料庫表空間大小監控

所用資料庫佔用空間大小

如果想知道MySQL資料庫中每個表佔用的空間、表記錄的行數的話,可以開啟MySQL的 information_schema 資料庫。在該庫中有一個 TABLES 表,這個表主要欄位分別是:

TABLE_SCHEMA : 資料庫名

TABLE_NAME:表名

ENGINE:所使用的儲存引擎

TABLES_ROWS:記錄數

DATA_LENGTH:資料大小

INDEX_LENGTH:索引大小

所以要知道一個表佔用空間的大小,那就相當於是 資料大小 + 索引大小 即可。

進入 information_schema 這個資料庫,執行如下sql 語句 :


-- 檢視資料庫佔用空間大小(資料大小 + 索引大小)
-- 資料長度 SELECT concat(round(sum(DATA_LENGTH/1024/1024/1024),2),'GB') as data_size FROM information_schema.TABLES where TABLE_SCHEMA='cgjr'; -- 索引長度 SELECT concat(round(sum(INDEX_LENGTH/1024/1024/1024),2),'GB') as len_size FROM information_schema.TABLES where TABLE_SCHEMA='cgjr'; -- 總空間大小 SELECT concat(round((sum
(DATA_LENGTH)+sum(INDEX_LENGTH))/1024/1024/1024,2),'G') as total_size FROM information_schema.TABLES where TABLE_SCHEMA='cgjr';
-- 檢視top10所有表的大小 SELECT TABLE_NAME,round((sum(DATA_LENGTH)+sum(INDEX_LENGTH))/1024/1024/1024,2) as size_G,TABLE_ROWS FROM TABLES WHERE TABLE_SCHEMA='cgjr' GROUP BY TABLE_NAME ORDER
BY round((sum(DATA_LENGTH)+sum(INDEX_LENGTH))/1024/1024/1024,2) desc LIMIT 10

-- 查詢所有資料庫佔用磁碟空間大小的SQL語句:
select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024/1024,2),' GB') as data_size,
concat(truncate(sum(index_length)/1024/1024/1024,2),'GB') as index_size,
concat(truncate(sum(data_length)/1024/1024/1024,2)+truncate(sum(index_length)/1024/1024/1024,2),'GB') as total_size
from information_schema.tables
group by TABLE_SCHEMA
order by truncate(sum(data_length)/1024/1024/1024,2)+truncate(sum(index_length)/1024/1024/1024,2) desc;



--資料庫中有幾十上百張表,那麼哪些表的資料量比較大呢,如何查詢mysql資料庫中哪些表的資料量最大

-- 查詢單個庫中所有表磁碟佔用大小的SQL語句:
select TABLE_NAME, concat(truncate(data_length/1024/1024/1024,2),' GB') as data_size,
concat(truncate(index_length/1024/1024/1024,2),' GB') as index_size,
concat(truncate(data_length/1024/1024/1024,2)+truncate(index_length/1024/1024/1024,2),'GB') as total_size
from information_schema.tables where TABLE_SCHEMA = 'cgjr'
group by TABLE_NAME
order by truncate(data_length/1024/1024/1024,2)+truncate(index_length/1024/1024/1024,2) desc LIMIT 10;

-- 查詢資料庫快取佔用大小的sql語句:

select TABLE_NAME, concat(truncate(data_length/1024/1024/1024,2),' GB') as data_size,
concat(truncate(data_free/1024/1024/1024,2),'GB') as free_size
from information_schema.tables where TABLE_SCHEMA = 'cgjr'
group by TABLE_NAME
order by concat(truncate(data_free/1024/1024/1024,2),'GB') desc LIMIT 10;
-- 釋放資料庫表 快取佔用大小的sql語句:
optimize table t_resource_file;
結合mysql官方網站的資訊,個人是這樣理解的。當你刪除資料時,mysql並不會回收,被已刪除資料的佔據的儲存空間,以及索引位。而是空在那裡,而是等待新的資料來彌補這個空缺,這樣就有一個缺少,如果一時半會,沒有資料來填補這個空缺,那這樣就太浪費資源了。所以對於寫比較頻煩的表,要定期進行optimize,一個月一次,看實際情況而定了。

舉個例子來說吧。有100個php程式設計師辭職了,但是呢只是人走了,php的職位還在那裡,這些職位不會撤銷,要等新的php程式來填補這些空位。招一個好的程式設計師,比較難。我想大部分時間會空在那裡。哈哈。