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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: [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数据库、表容量大小

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6天前
|
安全 前端开发 Android开发
探索移动应用与系统:从开发到操作系统的深度解析
在数字化时代的浪潮中,移动应用和操作系统成为了我们日常生活的重要组成部分。本文将深入探讨移动应用的开发流程、关键技术和最佳实践,同时分析移动操作系统的核心功能、架构和安全性。通过实际案例和代码示例,我们将揭示如何构建高效、安全且用户友好的移动应用,并理解不同操作系统之间的差异及其对应用开发的影响。无论你是开发者还是对移动技术感兴趣的读者,这篇文章都将为你提供宝贵的见解和知识。
|
11天前
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
32 3
|
14天前
|
机器学习/深度学习 人工智能 数据处理
【AI系统】NV Switch 深度解析
英伟达的NVSwitch技术是高性能计算领域的重大突破,旨在解决多GPU系统中数据传输的瓶颈问题。通过提供比PCIe高10倍的带宽,NVLink实现了GPU间的直接数据交换,减少了延迟,提高了吞吐量。NVSwitch则进一步推动了这一技术的发展,支持更多NVLink接口,实现无阻塞的全互联GPU系统,极大提升了数据交换效率和系统灵活性,为构建强大的计算集群奠定了基础。
40 3
|
24天前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
68 3
|
27天前
|
监控 关系型数据库 MySQL
MySQL自增ID耗尽应对策略:技术解决方案全解析
在数据库管理中,MySQL的自增ID(AUTO_INCREMENT)属性为表中的每一行提供了一个唯一的标识符。然而,当自增ID达到其最大值时,如何处理这一情况成为了数据库管理员和开发者必须面对的问题。本文将探讨MySQL自增ID耗尽的原因、影响以及有效的应对策略。
90 3
|
28天前
|
存储 关系型数据库 MySQL
MySQL 字段类型深度解析:VARCHAR(50) 与 VARCHAR(500) 的差异
在MySQL数据库中,`VARCHAR`类型是一种非常灵活的字符串存储类型,它允许存储可变长度的字符串。然而,`VARCHAR(50)`和`VARCHAR(500)`之间的差异不仅仅是长度的不同,它们在存储效率、性能和使用场景上也有所不同。本文将深入探讨这两种字段类型的区别及其对数据库设计的影响。
41 2
|
1月前
|
存储 关系型数据库 MySQL
PHP与MySQL动态网站开发深度解析####
本文作为技术性文章,深入探讨了PHP与MySQL结合在动态网站开发中的应用实践,从环境搭建到具体案例实现,旨在为开发者提供一套详尽的实战指南。不同于常规摘要仅概述内容,本文将以“手把手”的教学方式,引导读者逐步构建一个功能完备的动态网站,涵盖前端用户界面设计、后端逻辑处理及数据库高效管理等关键环节,确保读者能够全面掌握PHP与MySQL在动态网站开发中的精髓。 ####
|
13天前
|
前端开发 Android开发 UED
移动应用与系统:从开发到优化的全面解析####
本文深入探讨了移动应用开发的全过程,从最初的构思到最终的发布,并详细阐述了移动操作系统对应用性能和用户体验的影响。通过分析当前主流移动操作系统的特性及差异,本文旨在为开发者提供一套全面的开发与优化指南,确保应用在不同平台上均能实现最佳表现。 ####
18 0
|
1月前
|
存储 关系型数据库 MySQL
MySQL MVCC深度解析:掌握并发控制的艺术
【10月更文挑战第23天】 在数据库领域,MVCC(Multi-Version Concurrency Control,多版本并发控制)是一种重要的并发控制机制,它允许多个事务并发执行而不产生冲突。MySQL作为广泛使用的数据库系统,其InnoDB存储引擎就采用了MVCC来处理事务。本文将深入探讨MySQL中的MVCC机制,帮助你在面试中自信应对相关问题。
127 3
|
1月前
|
缓存 关系型数据库 MySQL
MySQL执行计划深度解析:如何做出最优选择
【10月更文挑战第23天】 在数据库查询性能优化中,执行计划的选择至关重要。MySQL通过查询优化器来生成执行计划,但有时不同的执行计划会导致性能差异。理解如何选择合适的执行计划,以及为什么某些计划更优,对于数据库管理员和开发者来说是一项必备技能。
77 2

推荐镜像

更多