[Database] MySQL 系统表解析以及各项指标查询

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: [Database] MySQL 系统表解析以及各项指标查询

简介

MySQL 安装完成之后会生成, information_schema , mysql, performance_schema, sys 四个数据库,下面我们解析这几个数据库

方法 / 步骤

🚩MySQL 系统数据库解析

🌈 一: information_schema 系统库

供了访问数据库元数据的方式。(元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等)
换句换说,information_schema是一个信息数据库,它保存着关于MySQL服务器所维护的所有其他数据库的信息。

PS: information_schema 系统库 有几张只读表,它们实际上是视图,而不是基本表

1.1 主要表

•SCHEMATA表:提供了当前mysql实例中所有数据库的信息。是show databases的结果取之此表。

•TABLES表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。是show tables from schemaname的结果取之此表。 

•COLUMNS表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是show columns from schemaname.tablename的结果取之此表。 

•STATISTICS表:提供了关于表索引的信息。是show index from schemaname.tablename的结果取之此表。 

•USER_PRIVILEGES(用户权限)表:给出了关于全程权限的信息。该信息源自mysql.user授权表。是非标准表。 

•SCHEMA_PRIVILEGES(方案权限)表:给出了关于方案(数据库)权限的信息。该信息来自mysql.db授权表。是非标准表。 

•TABLE_PRIVILEGES(表权限)表:给出了关于表权限的信息。该信息源自mysql.tables_priv授权表。是非标准表。 

•COLUMN_PRIVILEGES(列权限)表:给出了关于列权限的信息。该信息源自mysql.columns_priv授权表。是非标准表。

•CHARACTER_SETS(字符集)表:提供了mysql实例可用字符集的信息。是SHOW CHARACTER SET结果集取之此表。 

•COLLATIONS表:提供了关于各字符集的对照信息。

•COLLATION_CHARACTER_SET_APPLICABILITY表:指明了可用于校对的字符集。这些列等效于SHOW COLLATION的前两个显示字段。 

•TABLE_CONSTRAINTS表:描述了存在约束的表。以及表的约束类型。 

•KEY_COLUMN_USAGE表:描述了具有约束的键列。 

•ROUTINES表:提供了关于存储子程序(存储程序和函数)的信息。此时,ROUTINES表不包含自定义函数(UDF)。名为“mysql.proc name”的列指明了对应于INFORMATION_SCHEMA.ROUTINES表的mysql.proc表列。

•VIEWS表:给出了关于数据库中的视图的信息。需要有show views权限,否则无法查看视图信息。 

•TRIGGERS表:提供了关于触发程序的信息。必须有super权限才能查看该表。
1.1.1 TABLES表
​ -- 用法:
SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA='数据库名';
  • 字段说明

|字段 | 含义 |
|- | - |
|Table_catalog | 数据表登记目录 |
|Table_schema | 索引所属表的数据库名 |
|Table_name | 索引所属的表名 |
|Non_unique | 字段不唯一的标识 |
|Index_schema | 索引所属的数据库名(一般与table_schema值相同) |
|Index_name | 索引名称 |
|Seq_in_index | |
|Column_name | 索引列的列名 |
|Collation | 校对,列值全显示为A |
|Cardinality | 基数(一般与该表的数据行数相同) |
|Sub_part | |
|Packed | 是否包装过,默认为NULL |
|Nullable | 是否为空 YES / NO |
|Index_type | 索引的类型,列值全显示为BTREE(平衡树索引) |
|Comment | 索引注释、备注 |

1.1.2 COLUMNS表

提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息

-- 用法
SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='数据库名' AND TABLE_NAME='表名';
  • 各字段说明:

    字段 含义
    Table_catalog 数据表登记目录
    Table_schema 数据表所属的数据库名
    Table_name 所属的表名称
    Column_name 列名称
    Ordinal_position 字段在表中第几列
    Column_default 列的默认数据
    Is_nullable 字段是否可以为空
    Data_type 数据类型
    Character_maximum_length 字符最大长度
    Character_octet_length 字节长度?
    Numeric_precision 数据精度
    Numeric_scale 数据规模
    Character_set_name 字符集名称
    Collation_name 字符集校验名称
    Column_type 列类型
    Column_key 关键列[NULL MUL PRI]
    Extra 额外描述 NULL / on / update / CURRENT_TIMESTAMP / auto_increment
    Privileges 字段操作权限 select / select / insert / update / references
    Column_comment 字段注释、描述
1.1.3 KEY_COLUMN_USAGE表

存取表的健值

-- 用法
SELECT * FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA='数据库名' AND TABLE_NAME='表名';
  • 各字段的说明:

    字段 含义
    Constraint_catalog 约束登记目录
    Constraint_schema 约束所属的数据库名
    Constraint_name 约束的名称
    Table_catalog 数据表等级目录
    Table_schema 键值所属表所属的数据库名(一般与Constraint_schema值相同)
    Table_name 键值所属的表名
    Column_name 键值所属的列名
    Ordinal_position 键值所属的字段在表中第几列
    Position_in_unique_constraint 键值所属的字段在唯一约束的位置(若为外键值为1)
    Referenced_talble_schema 外键依赖的数据库名(一般与Constraint_schema值相同)
    Referenced_talble_name 外键依赖的表名
    Referenced_column_name 外键依赖的列名
1.1.4 TABLE_CONSTRAINTS表

存储主键约束、外键约束、唯一约束、check约束

-- 用法
SELECT * FROM information_schema.TABLE_CONSTRAINTS WHERE TABLE_SCHEMA='数据库名' AND TABLE_NAME='表名';
  • 各字段的说明:
字段 含义
Constraint_catalog 约束登记目录
Constraint_schema 约束所属的数据库名
Constraint_name 约束的名称
Table_schema 约束依赖表所属的数据库名(一般与Constraint_schema值相同)
Table_name 约束所属的表名
Constraint_type 约束类型 primary key / foreign key / unique / check
1.1.5 STATISTICS表

提供了关于表索引的信息

-- 用法
SELECT * FROM information_schema.STATISTICS WHERE TABLE_SCHEMA='数据库名' AND TABLE_NAME='表名';
  • 各字段的说明:
字段 含义
Table_catalog 数据表登记目录
Table_schema 索引所属表的数据库名
Table_name 索引所属的表名
Non_unique 字段不唯一的标识
Index_schema 索引所属的数据库名(一般与table_schema值相同)
Index_name 索引名称
Seq_in_index
Column_name 索引列的列名
Collation 校对,列值全显示为A
Cardinality 基数(一般与该表的数据行数相同)
Sub_part
Packed 是否包装过,默认为NULL
Nullable 是否为空 YES / NO
Index_type 索引的类型,列值全显示为BTREE(平衡树索引)
Comment 索引注释、备注

🌈 二: mysql 系统库

mysql的核心数据库,类似于sql server中的master表,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息。(常用的,在mysql.user表中修改root用户的密码)

🌈 三: performance_schema 系统库

主要用于收集数据库服务器性能参数。并且库里表的存储引擎均为PERFORMANCE_SCHEMA,而用户是不能创建存储引擎为PERFORMANCE_SCHEMA的表。

🌈 四: sys 系统库

Sys库所有的数据源来自:performance_schema。目标是把performance_schema的把复杂度降低,让DBA能更好的阅读这个库里的内容。让DBA更快的了解DB的运行情况。

🚩 MySQL 指标查询

一: 查看所有数据库容量大小

    select
    table_schema as '数据库',
    sum(table_rows) as '记录数',
    sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)',
    sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)'
    from information_schema.tables
    group by table_schema
    order by sum(data_length) desc, sum(index_length) desc;

二: 查看所有数据库各表容量大小

select
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tables
order by data_length desc, index_length desc

三: 查看指定数据库容量大小

例:查看mysql库容量大小

select
table_schema as '数据库',
sum(table_rows) as '记录数',
sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)',
sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)'
from information_schema.tables
where table_schema='mysql';

四: 查看指定数据库各表容量大小

例:查看mysql库各表容量大小

select
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tables
where table_schema='mysql'
order by data_length desc, index_length desc;
-- 以单行1k大小,预算数据库下每个数据库每张表可以存储最大多少数据 如果直接指定表 可以在where 条件添加  AND TABLE_NAME = 'table_name'
-- TABLE_SCHEMA 字段对应目标数据库的库名称
SELECT
    TABLE_NAME,
    CONCAT( ROUND( SUM( AVG_ROW_LENGTH / 1024 ), 2 ), 'KB' ) AS recordSize,
    CONCAT( 1 / ( AVG_ROW_LENGTH / 1024 ) * 2500, ' w' ) AS preMaxStoreSize 
FROM
    information_schema.TABLES 
WHERE
    TABLE_SCHEMA = 'database_name' AND AVG_ROW_LENGTH > 0 
GROUP BY
    TABLE_NAME 
ORDER BY
    preMaxStoreSize DESC

💖 其他相关链接

🔗 MySQL经典练习50题
🔗 MySQL 主从复制部署与配置

参考资料 & 致谢

[1] navicat查看MySQL数据库、表容量大小

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
5月前
|
存储 SQL 关系型数据库
MySQL中binlog、redolog与undolog的不同之处解析
每个都扮演回答回溯与错误修正机构角色: BinLog像历史记载员详细记载每件大大小小事件; RedoLog则像紧急救援队伍遇见突發情況追踪最后活动轨迹尽力补救; UndoLog就类似时间机器可倒带历史让一切归位原始样貌同时兼具平行宇宙观察能让多人同时看见各自期望看见历程而互不干扰.
315 9
|
SQL 关系型数据库 MySQL
深入解析MySQL的EXPLAIN:指标详解与索引优化
MySQL 中的 `EXPLAIN` 语句用于分析和优化 SQL 查询,帮助你了解查询优化器的执行计划。本文详细介绍了 `EXPLAIN` 输出的各项指标,如 `id`、`select_type`、`table`、`type`、`key` 等,并提供了如何利用这些指标优化索引结构和 SQL 语句的具体方法。通过实战案例,展示了如何通过创建合适索引和调整查询语句来提升查询性能。
2820 10
|
6月前
|
存储 SQL 关系型数据库
MySQL 核心知识与索引优化全解析
本文系统梳理了 MySQL 的核心知识与索引优化策略。在基础概念部分,阐述了 char 与 varchar 在存储方式和性能上的差异,以及事务的 ACID 特性、并发事务问题及对应的隔离级别(MySQL 默认 REPEATABLE READ)。 索引基础部分,详解了 InnoDB 默认的 B+tree 索引结构(多路平衡树、叶子节点存数据、双向链表支持区间查询),区分了聚簇索引(数据与索引共存,唯一)和二级索引(数据与索引分离,多个),解释了回表查询的概念及优化方法,并分析了 B+tree 作为索引结构的优势(树高低、效率稳、支持区间查询)。 索引优化部分,列出了索引创建的六大原则
169 2
|
6月前
|
存储 SQL 关系型数据库
MySQL 核心知识与性能优化全解析
我整理的这份内容涵盖了 MySQL 诸多核心知识。包括查询语句的书写与执行顺序,多表查询的连接方式及内、外连接的区别。还讲了 CHAR 和 VARCHAR 的差异,索引的类型、底层结构、聚簇与非聚簇之分,以及回表查询、覆盖索引、左前缀原则和索引失效情形,还有建索引的取舍。对比了 MyISAM 和 InnoDB 存储引擎的不同,提及性能优化的多方面方法,以及超大分页处理、慢查询定位与分析等,最后提到了锁和分库分表可参考相关资料。
161 0
|
7月前
|
关系型数据库 MySQL
MySQL字符串拼接方法全解析
本文介绍了四种常用的字符串处理函数及其用法。方法一:CONCAT,用于基础拼接,参数含NULL时返回NULL;方法二:CONCAT_WS,带分隔符拼接,自动忽略NULL值;方法三:GROUP_CONCAT,适用于分组拼接,支持去重、排序和自定义分隔符;方法四:算术运算符拼接,仅适用于数值类型,字符串会尝试转为数值处理。通过示例展示了各函数的特点与应用场景。
|
9月前
|
SQL 运维 关系型数据库
MySQL Binlog 日志查看方法及查看内容解析
本文介绍了 MySQL 的 Binlog(二进制日志)功能及其使用方法。Binlog 记录了数据库的所有数据变更操作,如 INSERT、UPDATE 和 DELETE,对数据恢复、主从复制和审计至关重要。文章详细说明了如何开启 Binlog 功能、查看当前日志文件及内容,并解析了常见的事件类型,包括 Format_desc、Query、Table_map、Write_rows、Update_rows 和 Delete_rows 等,帮助用户掌握数据库变化历史,提升维护和排障能力。
|
存储 运维 负载均衡
Hologres 查询队列全面解析
Hologres V3.0引入查询队列功能,实现请求有序处理、负载均衡和资源管理,特别适用于高并发场景。该功能通过智能分类和调度,确保复杂查询不会垄断资源,保障系统稳定性和响应效率。在电商等实时业务中,查询队列优化了数据写入和查询处理,支持高效批量任务,并具备自动流控、隔离与熔断机制,确保核心业务不受干扰,提升整体性能。
334 11
|
存储 数据库 对象存储
新版本发布:查询更快,兼容更强,TDengine 3.3.4.3 功能解析
经过 TDengine 研发团队的精心打磨,TDengine 3.3.4.3 版本正式发布。作为时序数据库领域的领先产品,TDengine 一直致力于为用户提供高效、稳定、易用的解决方案。本次版本更新延续了一贯的高标准,为用户带来了多项实用的新特性,并对系统性能进行了深度优化。
283 3
|
存储 关系型数据库 MySQL
double ,FLOAT还是double(m,n)--深入解析MySQL数据库中双精度浮点数的使用
本文探讨了在MySQL中使用`float`和`double`时指定精度和刻度的影响。对于`float`,指定精度会影响存储大小:0-23位使用4字节单精度存储,24-53位使用8字节双精度存储。而对于`double`,指定精度和刻度对存储空间没有影响,但可以限制数值的输入范围,提高数据的规范性和业务意义。从性能角度看,`float`和`double`的区别不大,但在存储空间和数据输入方面,指定精度和刻度有助于优化和约束。
1921 5
|
存储 网络协议 算法
OSPF中的Link-State Database (LSDB): 概述与深入解析
OSPF中的Link-State Database (LSDB): 概述与深入解析
1836 1

推荐镜像

更多