我很难找到MySQL RDS示例上消耗存储的内容。
我们有30 GbRDS示例
慢速和常规日志被禁用;
binlog立即删除(最好尽快)
可用存储空间指标报告**~ 10 Gb**。
尝试使用下一个查询计算已用存储(请参见下面的输出):SELECT table_schema, SUM(data_length + index_length + data_free)/1024/1024/1024 AS total_Gb, SUM(data_length)/1024/1024/1024 AS data_Gb, SUM(index_length)/1024/1024/1024 AS index_Gb, SUM(data_free)/1024/1024/1024 AS free_Gb, COUNT(*) AS tables FROM information_schema.tables GROUP BY table_schema ORDER BY 2 DESC;
由于数据库的总大小(包括此数据库的free_data)为13.6Gb,我不明白其余存储在哪里缺失(5- 6 Gb)。
主要问题是为什么CloudWatch中的FreeStorageSpace指标只显示10 Gb可用空间,而我在MySQL上可以看到几乎15 Gb可用空间?
| table_schema | total_Gb | data_Gb | index_Gb | free_Gb | tables |
+--------------------+-----------------+-----------------+----------------+-----------------+--------+
| information_schema | 14.156433105469 | 0.000183105469 | 0.000000000000 | 14.156250000000 | 63 |
| main_database | 13.608055360615 | 11.013053961098 | 1.915313899517 | 0.679687500000 | 373 |
| mysql | 0.018694377504 | 0.008742786013 | 0.000185966492 | 0.009765625000 | 43 |
| sys | 0.000015258789 | 0.000015258789 | 0.000000000000 | 0.000000000000 | 101 |
| performance_schema | 0.000000000000 | 0.000000000000 | 0.000000000000 | 0.000000000000 | 87 |
+--------------------+-----------------+-----------------+----------------+-----------------+--------+```
Here is allocation for information_schema tables:
| table_schema | table_name | total_Gb | data_Gb | index_Gb | free_Gb | tables |
+--------------------+---------------------------------------------------------+----------------+----------------+----------------+----------------+--------+
| information_schema | PROCESSLIST | 1.179702758789 | 0.000015258789 | 0.000000000000 | 1.179687500000 | 1 |
| information_schema | EVENTS | 1.179702758789 | 0.000015258789 | 0.000000000000 | 1.179687500000 | 1 |
| information_schema | PLUGINS | 1.179702758789 | 0.000015258789 | 0.000000000000 | 1.179687500000 | 1 |
| information_schema | VIEWS | 1.179702758789 | 0.000015258789 | 0.000000000000 | 1.179687500000 | 1 |
| information_schema | PARTITIONS | 1.179702758789 | 0.000015258789 | 0.000000000000 | 1.179687500000 | 1 |
| information_schema | RDS_EVENTS_THREADS_WAITS_CURRENT | 1.179702758789 | 0.000015258789 | 0.000000000000 | 1.179687500000 | 1 |
| information_schema | RDS_PROCESSLIST | 1.179702758789 | 0.000015258789 | 0.000000000000 | 1.179687500000 | 1 |
| information_schema | PARAMETERS | 1.179702758789 | 0.000015258789 | 0.000000000000 | 1.179687500000 | 1 |
| information_schema | TRIGGERS | 1.179702758789 | 0.000015258789 | 0.000000000000 | 1.179687500000 | 1 |
| information_schema | COLUMNS | 1.179702758789 | 0.000015258789 | 0.000000000000 | 1.179687500000 | 1 |
| information_schema | OPTIMIZER_TRACE | 1.179702758789 | 0.000015258789 | 0.000000000000 | 1.179687500000 | 1 |
| information_schema | ROUTINES | 1.179702758789 | 0.000015258789 | 0.000000000000 | 1.179687500000 | 1 |
3条答案
按热度按时间olhwl3o21#
通过这个查询,您将获得更多的细节来识别在information_schema中使用14 G的表。
SELECT表模式,表名,SUM(数据长度+索引长度+可用数据)/1024/1024/1024 AS总计Gb,总和(数据长度)/1024/1024/1024 AS数据Gb,总和(索引长度)/1024/1024/1024 AS索引Gb,总和(数据_空闲)/1024/1024/1024 AS空闲_Gb,COUNT(*)AS表来自信息_模式.表分组依据表_模式,表_名称排序依据3描述;
SELECT @@版本的结果是什么;?
llew8vvj2#
运行一个类似的查询,但是查看数据库中的每个表。你可能会发现每个表都有4 M到7 M的“Data_free”。这是正常的。数据库预先分配了那个空间。
如果您发现一个 * 表 * 的可用空间超过7 MB,那么让我们更仔细地看看它。
另外,您是否有数百个表?或者在某些表中有大量的
PARTITIONs
?同样,我们可以在您介绍完这些表后讨论细节。更多
我怀疑“可用存储空间”指的是一般的磁盘空间,与数据库无关。SELECT指的是分配给数据库但当前未使用的磁盘空间。这两个量基本上是无关的。
如果您获得了更大的磁盘(移动到不同的RDS产品),磁盘容量将增加;SELECT不会改变。2如果你在你的数据库表中添加了很多行,磁盘空间会减少,SELECT会显示Data_length和Index_length的增加,但是Data_free不会有很大的变化,可能会上升或下降。
imzjd6km3#
以防有人会挖出类似的问题。这种空间使用的主要原因是碎片。
碎片意味着磁盘上索引页的物理顺序与页上记录的索引顺序不接近,或者分配给索引的64页块中有许多未使用的页。
如果要运行下面两个查询
结果将完全不同,它将允许您计算碎片的百分比。看起来解决这个问题的唯一方法是在这里描述https://dev.mysql.com/doc/refman/5.7/en/innodb-file-defragmenting.html。