7.2 sys系统库初体验
如果使用了USE语句切换默认数据库,那么就可以直接使用sys系统库下的视图进行查询,就像查询某个库下的表一样操作。
# 使用version视图可以查看sys系统库和MySQL Server的版本号 mysql> USE sys; mysql> SELECT * FROM version; + ------------ + -----------------+ | sys_version | mysql_version | + ------------ + -----------------+ | 1.5.0 | 5.7.9-debug-log | + ------------ + -----------------+
也可以使用db_name.view_name、db_name.procedure_name、db_name.func_name等方式,在不指定默认数据库的情况下访问sys系统库中的对象(这叫作名称限定对象引用)。
mysql> SELECT * FROM sys.version;
+ ------------- + ----------------- +
| sys_version | mysql_version |
+ ------------- + ----------------- +
| 1.5.0 | 5.7.9-debug-log |
+ ------------- + ----------------- +
提示:在下文的示例中,对于sys系统库的访问都假定指定了默认数据库为sys系统库。
在sys系统库下包含很多视图,它们以各种方式对performance_schema表进行聚合计算展示。这些视图大部分是成对出现的,两个视图名称相同,但有一个视图是带“x$”前缀的,例如:host_summary_by_file_io和x$host_summary_by_file_io,代表按照主机进行汇总统计的文件I/O性能数据,两个视图访问的数据源是相同的,但是在创建视图的语句中,不带“x$”前缀的视图显示的是相关数值经过单位换算后的数据(单位是毫秒、秒、分钟、小时、天等),带“x$”前缀的视图显示的是原始的数据(单位是皮秒)。
# 使用 x$host_summary_by_file_io 视图汇总数据,显示未格式化的延迟时间(单位是皮秒),没有“x$”前缀的视图输出的信息经过单位换算之后可读性更好 mysql> SELECT * FROM host_summary_by_file_io; +------------+-------+------------+ | host | ios | io_latency | +------------+-------+------------+ | localhost | 67570 | 5.38 s | | background | 3468 | 4.18 s | +------------+-------+------------+ # 带“x$”前缀的视图显示原始的数据(单位是皮秒),对于程序或工具的获取使用更易于数据处理 mysql> SELECT * FROM x$host_summary_by_file_io; +------------+-------+---------------+ | host | ios | io_latency | +------------+-------+---------------+ | localhost | 67574 | 5380678125144 | | background | 3474 | 4758696829416 | +------------+-------+---------------+
要查看sys系统库对象定义语句,可以使用适当的SHOW语句或INFORMATION_SCHEMA库查询。例如,要查看session视图和format_bytes()函数的定义,可以使用如下语句:
mysql> SHOW CREATE VIEW session; mysql> SHOW CREATE FUNCTION format_bytes;
然而,这些语句文本是经过格式化的,可读性比较差。要查看更易读的格式对象定义语句,可以访问sys系统库开发网站https://github.com/mysql/mysql-sys上的各个.sql文件,或者使用mysqldump和mysqlpump工具导出sys系统库,在默认情况下,mysqldump和mysqlpump都不会导出sys系统库。要生成包含sys系统库的导出文件,可以使用如下命令显式指定sys系统库(虽然可以导出视图定义,但是与原始的定义语句相比仍然缺失了相当一部分内容,只是可读性比直接使用SHOW CREATE VIEW要好一些)。
[root@localhost~]# mysqldump --databases --routines sys> sys_dump.sql [root@localhost~]# mysqlpump sys> sys_dump.sql
如果要重新导入sys系统库,则可以使用如下命令:
[root@localhost~]# mysql < sys_dump.sql