我知道收缩是魔鬼:它会颠倒页面顺序并导致皮肤癌、数据碎片化和全球变暖。名单还在继续……话虽如此,假设我有一个 100 GB 的数据库,我删除了 50 GB 的数据——不是在一个表上,而是在数据库范围内对旧数据进行一般修剪,覆盖 90% 的数据表——这是否构成缩小数据库的适当用例?
如果没有,从数据库中删除如此高比例的数据后,应采取哪些适当的步骤来清理房屋?我可以想到两个:重建索引和更新统计。还有什么?
我只剩下 2GB 了,所以我需要删除这个历史表。该表现在为空,但数据库磁盘空间未释放。并且数据库文件是320GB。
我试图找出各种表中的许多行占用的磁盘大小。
我可以通过查询定义这些行。如何找出与 SQL Server 中的结果集对应的实际磁盘大小?
我之所以想知道这一点,是因为我正在尝试分析一个多租户系统。我试图获得每个租户在系统上占用的总大小。所以我需要与每个租户有关的所有行的大小以及每个租户在索引表中使用的大小等。
租户都共享相同的架构,因此不容易做到。
我使用了INNODB
引擎innodb_table_per_file
,所以每个表都有它自己的.ibd
文件而不是 ibdata1 文件。
当我在我的用户表中输入 512 条记录时,它的大小从 96 kb 增加到 200 kb 但是当我使用命令删除所有行时
DELETE FROM USERS;
Run Code Online (Sandbox Code Playgroud)
那么我的.ibd
文件甚至没有减少一个字节。
但是当我使用命令删除行时
TRUNCATE TABLE USERS
Run Code Online (Sandbox Code Playgroud)
然后我的.ibd
文件减少到它的初始大小,即创建时为 96 kb。
现在我想知道.ibd
当我使用DELETE FROM USERS WHERE ...
命令时有什么方法可以减少文件