Lui*_*bon 5 storage execution-plan disk-space mysql-5.7
升级到 MySQL 5.7 后,执行 SQL 查询会填满可用存储空间。
升级是通过 AWS 控制台执行的,选择自动程序将 RDS 从 MySQL 5.6.27 升级到 MySQL 5.7.11。但是,在 mysql5.6 上流畅运行的相同查询耗尽了 mysql5.7 实例上的可用文件系统空间。
对该问题进行了研究,发现该/rdsdbdata/db/innodb/ibtmp1
文件已扩展到使用所有可用存储空间。行为如图所示。
mysql5.6 和 mysql5.7 之间执行计划的额外比较显示,即使在两个数据库版本之间调整了 optimizer_switch 参数之后,5.7 包含的 2.56 亿条记录仍存在差异。
一些证据显示出与用户定义变量的使用有关,但不是决定性的。例如,SELECT 语句包括一个@count := @count + 1
属性。
问题:如何缓解 MySQL 5.7 更改执行计划从而填满 RDS 实例的可用存储空间的事实。
小智 1
显然这是一个老问题,但我们只是遇到了一个大问题,我想我应该分享:
如果使用 'Using tempor; 执行,SELECT 查询可以将大量数据写入 MySQL 的临时文件。使用文件排序;' 计划如 EXPLAIN EXTENDED 所示。
MySQL 可以根据不断变化的统计数据随时更改其执行计划:作为一个完全不是假设的示例,它可以从使用索引检索约 100,000 行(需要约 15 秒)的完全合理的计划,到花费约 15 秒的时间来检索大量行。 -磁盘合并排序总共需要 45 分钟:facepalm:。
该临时表空间将在服务器重新启动时自动回收(至少,我们在 AWS RDS MySQL 5.7 实例上是这样工作的)。
临时表通常称为 ibtmp1,您可以像这样获取大小:
从 INFORMATION_SCHEMA.FILES 中选择 *,其中 FILE_NAME LIKE '%ibtmp%'\G
我还没有找到配置 RDS 来限制该文件大小的方法。
归档时间: |
|
查看次数: |
929 次 |
最近记录: |