0

我需要计算托管在 Sybase ASE 系统上的数据库中各个表的总大小。我们使用的 Sybase ASE 系统的版本是 15.7.1。

目标是确定系统上托管的数据库中每个表使用的总磁盘存储空间。因此,我需要考虑每个表的数据和索引部分的大小。

而且,我希望实现的是数据库中每个表的列表,其中包含以下信息: - 数据大小 - 索引大小 - 总大小(数据 + 索引)

我相信我需要多个查询来产生上述追捧的结果。但是,我不确定我的一些查询逻辑的准确性,尤其是计算索引大小的准确性。并且,来自该网站的任何建议将不胜感激。

以下是我迄今为止为实现上述目标而创建的查询:

--计算所有表的数据大小-- SELECT obj.[name], stats.[rowcnt], stats.[datarowsize], (stats.[rowcnt] * stats.[datarowsize]) AS 'ObjectSize' FROM [dbo].[systabstats] stats INNER JOIN [dbo].[sysobjects] obj ON obj.[id] = stats.[id] WHERE (obj.[type] = 'U') AND (stats.[indid] = 0)

-- 计算 AllPages-Locked 表上聚集索引的大小 -- SELECT obj.[name], stats.[rowcnt], stats.[datarowsize], (stats.[rowcnt] * stats.[datarowsize]) AS 'ObjectSize' FROM [dbo].[systabstats] stats INNER JOIN [dbo].[sysobjects] obj ON obj.[id] = stats.[id] WHERE (obj.[type] = 'U') AND (stats.[indid] = 1)

-- 计算数据库中仅数据锁定表上的聚集和非聚集索引的大小 -- SELECT obj.[name], idx.[name] AS 'IndexName', stats2.[rowcnt] AS 'Object_rowcnt', stats.[leafrowsize], (stats2.[rowcnt] * stats.[leafrowsize]) AS 'ObjectSize' FROM [dbo].[systabstats] stats INNER JOIN [dbo].[sysobjects] obj ON obj.[id] = stats.[id] INNER JOIN [dbo].[sysindexes] idx ON (idx.[id] = stats.[id]) AND (idx.[indid] = stats.[indid]) LEFT OUTER JOIN [dbo].[systabstats] stats2 ON (stats2.[id] = stats.[id]) AND (stats2.[indid] IN (0, 1)) WHERE (obj.[type] = 'U') AND (stats.[indid] > 1)

4

0 回答 0