【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程序来填补这些空位。招一个好的程序员,比较难。我想大部分时间会空在那里。哈哈。
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东华果汁哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值