【mysql 数据库监控篇】数据库表空间大小监控

来源:互联网 发布:访客网络没有网速 编辑:程序博客网 时间:2024/06/05 02:41

所用数据库占用空间大小

如果想知道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_sizefrom information_schema.tablesgroup by TABLE_SCHEMAorder 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_sizefrom information_schema.tables where TABLE_SCHEMA = 'cgjr'group by TABLE_NAMEorder 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_sizefrom information_schema.tables where TABLE_SCHEMA = 'cgjr'group by TABLE_NAMEorder 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程序来填补这些空位。招一个好的程序员,比较难。我想大部分时间会空在那里。哈哈。