一、查询数据库占用空间大小
如果想知道MySQL数据库中每个表占用的空间、表记录的行数的话,可以打开MySQL的 information_schema 数据库。在该库中有一个 TABLES 表,这个表主要字段分别是:
TABLE_SCHEMA : 数据库名
TABLE_NAME:表名
ENGINE:所使用的存储引擎
TABLES_ROWS:记录数
DATA_LENGTH:数据大小
INDEX_LENGTH:索引大小
所以要知道一个表占用空间的大小,那就相当于是 数据大小 + 索引大小 即可。
进入 information_schema 这个数据库,执行如下sql 语句 :
1.1 查看数据库占用空间大小
1 | -- 数据长度 |
1 | -- 查询所有数据库占用磁盘空间大小的SQL语句: |
数据库中有几十上百张表,那么哪些表的数据量比较大呢,如何查询mysql数据库中哪些表的数据量最大
1 | -- 查询单个库中所有表磁盘占用大小的SQL语句: |
1 | -- 查询数据库缓存占用大小的sql语句: |
1.2 释放数据库表
1 | -- 释放数据库表 缓存占用大小的sql语句: |
结合mysql官方网站的信息,个人是这样理解的。当你删除数据时,mysql并不会回收,被已删除数据的占据的存储空间,以及索引位。而是空在那里,而是等待新的数据来弥补这个空缺,这样就有一个缺少,如果一时半会,没有数据来填补这个空缺,那这样就太浪费资源了。所以对于写比较频烦的表,要定期进行optimize,一个月一次,看实际情况而定了。
二、监控数据库占用空间
监控的方式有很多,比如:
- 使用 grafana 监控并展示数据
- 使用 prometheus 或其它监控平台
2.1 使用 grafana 监控
grafana 的部署这里就不介绍了,都很简单可以参考其它的部署文章
2.1.1 添加 MySQL 数据源
最好单独添加一个用于监控的 mysql 账号,只有只读权限;可以参考我另一遍 Prometheus监控MySQL 进行配置
2.1.2 配置监控面板
查询sql
1 | SELECT |
配置好后大概就是这样
2.2 使用 prometheus 监控
使用 prometheus 监控需要自己写脚本去定期查询 information_schema 库,然后把各表的占用空间和数据量 post 到 pushgateway 中,然后通过prometheus拉取监控数据再通过grafana进行展示或直接配置告警策略。
后续使用 prometheus 监控数据库空间大小再更新……