free_data和可用存储空间指标之间的AWS RDS MySQL差异

xtfmy6hx  于 2023-02-21  发布在  Mysql
关注(0)|答案(3)|浏览(162)

我很难找到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 |
olhwl3o2

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 @@版本的结果是什么;?

llew8vvj

llew8vvj2#

运行一个类似的查询,但是查看数据库中的每个表。你可能会发现每个表都有4 M到7 M的“Data_free”。这是正常的。数据库预先分配了那个空间。
如果您发现一个 * 表 * 的可用空间超过7 MB,那么让我们更仔细地看看它。
另外,您是否有数百个表?或者在某些表中有大量的PARTITIONs?同样,我们可以在您介绍完这些表后讨论细节。

更多

我怀疑“可用存储空间”指的是一般的磁盘空间,与数据库无关。SELECT指的是分配给数据库但当前未使用的磁盘空间。这两个量基本上是无关的。
如果您获得了更大的磁盘(移动到不同的RDS产品),磁盘容量将增加;SELECT不会改变。2如果你在你的数据库表中添加了很多行,磁盘空间会减少,SELECT会显示Data_length和Index_length的增加,但是Data_free不会有很大的变化,可能会上升或下降。

imzjd6km

imzjd6km3#

以防有人会挖出类似的问题。这种空间使用的主要原因是碎片。
碎片意味着磁盘上索引页的物理顺序与页上记录的索引顺序不接近,或者分配给索引的64页块中有许多未使用的页。
如果要运行下面两个查询

SELECT table_schema, ROUND(SUM(data_length+index_length)/1024/1024/1024,2) "size in GB" FROM information_schema.tables GROUP BY 1 ORDER BY 2 DESC; 

SELECT file_name, tablespace_name, ((total_extents * extent_size)/1024/1024/1024) as size_Gb from information_schema.files WHERE total_extents <> 0 order by size_Gb DESC;

结果将完全不同,它将允许您计算碎片的百分比。看起来解决这个问题的唯一方法是在这里描述https://dev.mysql.com/doc/refman/5.7/en/innodb-file-defragmenting.html

相关问题