MySQL和雷竞技下载官网用于MySQL的Percona服务器,有一个名为information_schema (I_S)的模式,它提供关于数据库表、视图、索引等的信息。

可以从这个模式检索许多有用的信息,例如表元数据和外键关系,但是如果服务器负载过重,尝试查询I_S可能会导致性能下降,如下例测试所示。

免责声明这篇博文旨在展示一个不太为人所知的问题,但并不是一个严肃的基准。退化的百分比取决于许多因素(硬件、工作负载、表数量、配置等)。

测试

该测试比较了服务器在“高负载但没有I_S查询”和“高负载+ I_S查询”时的行为基线,以检查性能是否下降。

同样的测试已经在MySQL 5.7和8.0的Percona服务器上执行。雷竞技下载官网针对I_S执行的检查性能下降的查询检查一些表fk(外键)关系的信息。

设置

设置包括使用sysbench创建10K表,并向20个表添加20个fk。

硬件

cpu数量:12个

内存大小:12288mb

在my.c雷竞技下载官网nf中调整MySQL配置变量的主要Percona服务器:

你可以在这里查看完整的my.cnf文件:https://github.com/ctutte/blog_IS/blob/master/my.cnf

执行查询

为了生成数据库设置,我使用sysbench和以下标志:

然后手动创建20个fk:

在场景设置好之后,我用下面的查询执行了三次sysbench:

为了查询I_S,我使用了下面的bash命令行,它在bash的while循环中检查FK:

考虑到服务器有12个vcpu, sysbench使用10个vcpu,那么有一些空闲的CPU容量用于运行对I_S的查询,对吗?让我们看看结果。

Percona Serv雷竞技下载官网er for MySQL 5.7的结果

三次,每次60秒,1000张桌子:

总查询 每秒
没有FK检查 8337600 46320
使用FK检查 6924900 38472

可以看到,在服务器上只运行sysbench,每秒可以执行46320个查询。

在连续检查sysbench + I_S查询来检查fk的场景中,每秒执行38472个查询。即(46320 - 38472)* 100 / 46320 = 16.9%的性能下降。

如果I_S查询受到CPU限制,那么我期望服务器能够执行超过46320个QPS,但是发生了一些事情,实际上,QPS的数量确实下降了。

这种性能下降的原因是查询I_S需要从文件中打开表(受table_open_cache变量限制)。

在我的示例测试中,当只运行sysbench时,工作负载显示很少Table_open_cache_misses(第一列为初始值,每个后续值为每秒增量)。

Table_open_cache_misses while NOT checking for FKs:

然而,当运行sysbench + I_S查询时,由于MySQL/Percona Server for MySQL 5.7必须打开每个table.frm,有更多的Table_open_cache_misses(在我的测试运行雷竞技下载官网中,我故意读取了非常多的表,而不是“Table-open-cache”变量)。

检查fk时的Table_open_cache_misses:

以上输出是使用pt-stalk+pt-mext雷竞技下载官网Percona工具包

这也可以看到使用雷竞技下载官网Praybet雷竞技竞猜在线官网ercona监控和管理(PMM)和查看“MySQL概述”仪表板->“MySQL表打开缓存状态”图形。

当只运行sysbench时,缓存命中次数很高(~99.98%),而“未命中”次数很少,这意味着table_cache足够大,可以满足工作负载。

MySQL表打开缓存的状态"width=

然而,当运行sysbench + I_S查询时,当FK检查执行到~15:35:00时,在~15:33:40缓存命中的数量减少了,这也显示了在测试期间(表)“打开”和“错过”的增加。

MySQL开放缓存"width=

如果满足以下条件,可以最小化I_S查询时的性能下降:

Percona Serv雷竞技下载官网er for MySQL 8.0结果

对于MySQL和Percon雷竞技下载官网a Server For MySQL 8,执行sysbench + I_S查询显示几乎没有缓存丢失,如下图所示:

MySQL 8改进数据字典访问,这避免了必须打开所有表.frm文件。这个改进已经移植到MySQL 8的Percona服务器。雷竞技下载官网

结论

总之,从5.7 I_S中检查表信息依赖于从磁盘打开.frm文件来检索表信息,当打开的表的数量不适合table_cache时,这会导致性能下降。

如果你严重依赖于对information_schema的查询,那么你的工作负载将受益于升级到MySQL/Percona Server for MySQL 8,因为新的数据字典格式。雷竞技下载官网当您使用5.7时,您还可以考虑增加table_open_cache以避免table_misses,或者至少对“WHERE”子句使用一些过滤器以避免打开所有.frm文件,并将查询限制在表的子集以限制性能影响。

雷竞技下载官网Percona Distribution for MySQL是最完整、稳定、可扩展和安全的开源MySQL解决方案,为您最关键的业务应用程序提供企业级数据库环境……而且它是免费使用的!

现在就试雷竞技下载官网试MySQL的Percona发行版吧!

订阅
通知的
客人"src=