Oracle11g PLSQL:如何通过所选记录了解空间利用率

Oracle11g PLSQL:如何通过所选记录了解空间利用率,oracle11g,Oracle11g,我们计划归档一些表中的旧数据。但在这样做之前,我们必须估计一旦清除旧记录,我们将获得多少空间 例如,假设我们有一个ORDERS表,它在磁盘上消耗5Gb的空间。我们在这个表中有超过1500万条记录。我们有兴趣在2010年后保留记录。当我们在2010年之前查询记录时,我们已经获得了大约1200万条记录,我们正在计划归档和清除这些记录 我们必须首先计算,当我们删除这1200万条记录时,我们将获得多少可用空间。我们如何计算这些选定记录所消耗的空间 我能想到的一种方法是为这1200万条旧记录创建一个新表,

我们计划归档一些表中的旧数据。但在这样做之前,我们必须估计一旦清除旧记录,我们将获得多少空间

例如,假设我们有一个ORDERS表,它在磁盘上消耗5Gb的空间。我们在这个表中有超过1500万条记录。我们有兴趣在2010年后保留记录。当我们在2010年之前查询记录时,我们已经获得了大约1200万条记录,我们正在计划归档和清除这些记录

我们必须首先计算,当我们删除这1200万条记录时,我们将获得多少可用空间。我们如何计算这些选定记录所消耗的空间

我能想到的一种方法是为这1200万条旧记录创建一个新表,然后计算其段大小


请建议我们是否仍然可以更好地计算所选记录的空间。谢谢。

要计算所选记录的空间,您可以尝试以下操作:

步骤1:

scott@dev8i> analyze table orders compute statistics;
Table analyzed.
或者按照本建议

scott@dev8i> EXEC DBMS_STATS.gather_table_stats('<SHCEMA>', 'ORDERS');
查询结果显示,
Orders
表使用分配给它的总字节数中的560字节


由于您需要为1200万条记录分配多少空间,因此只需将
num_行
替换为12000000行即可。结果将是以字节为单位的近似数字。

要计算所选记录的空间,您可以尝试以下操作:

步骤1:

scott@dev8i> analyze table orders compute statistics;
Table analyzed.
或者按照本建议

scott@dev8i> EXEC DBMS_STATS.gather_table_stats('<SHCEMA>', 'ORDERS');
查询结果显示,
Orders
表使用分配给它的总字节数中的560字节


由于您需要为1200万条记录分配多少空间,因此只需将
num_行
替换为12000000行即可。结果将是以字节为单位的近似数字。

这不需要PL/SQL。一个简单的
从表中选择sum(vsize(column_1)+vsize(column_2)+…),其中…
将显示所有行的大小。从1500万行中删除1200万行,占行的80%;那么您将节省大约80%的空间,即4GB?还是你需要一个准确的数字?您还需要考虑空闲空间的含义-除非您收缩/移动/重建表,否则这些段仍将分配给该表,但可用于同一表中的新行。除非调整数据文件的大小,否则不会节省任何实际磁盘空间,这并不一定简单。谢谢@a_horse_,没有名字,它成功了:)谢谢@AlexPoole,谢谢你的宝贵意见。理解您的观点,即删除记录将不允许其他表使用空间,而只允许mu ORDERS表使用空间。我将在团队内部讨论时明确提出这一点。感谢您不需要PL/SQL来实现这一点。一个简单的
从表中选择sum(vsize(column_1)+vsize(column_2)+…),其中…
将显示所有行的大小。从1500万行中删除1200万行,占行的80%;那么您将节省大约80%的空间,即4GB?还是你需要一个准确的数字?您还需要考虑空闲空间的含义-除非您收缩/移动/重建表,否则这些段仍将分配给该表,但可用于同一表中的新行。除非调整数据文件的大小,否则不会节省任何实际磁盘空间,这并不一定简单。谢谢@a_horse_,没有名字,它成功了:)谢谢@AlexPoole,谢谢你的宝贵意见。理解您的观点,即删除记录将不允许其他表使用空间,而只允许mu ORDERS表使用空间。我将在团队内部讨论时明确提出这一点。感谢
analyze
命令被弃用以支持…@Ben..合并您的建议。感谢@Raj_Te非常有用。
analyze
命令被弃用以支持…@Ben..合并您的建议。感谢@Raj_Te非常有用。