Как рассчитать размер отдельных таблиц в Sybase ASE - PullRequest
0 голосов
/ 21 апреля 2020

Мне нужно рассчитать общий размер отдельных таблиц в базах данных, размещенных в системе Sybase ASE. Выпуск системы Sybase ASE, которую мы используем, - 15.7.1.

Цель - определить общее дисковое пространство, используемое каждой таблицей в базах данных, размещенных в системе. Таким образом, мне нужно учитывать размеры как части данных, так и индексов каждой таблицы.

И что я хочу добиться, так это составить список каждой таблицы в базе данных со следующей информацией: - Размер данных - размер индексов - общий размер (данные + индексы)

Я считаю, что мне нужно несколько запросов для получения вышеуказанного результата. Но я не уверен в точности некоторых из моих запросов c, и особенно в том, что касается расчета размеров индексов. И любые советы от сайта будут оценены.

Ниже приведены запросы, которые я создал до сих пор в попытке достичь вышеуказанной цели:

- Рассчитать размер данных всех таблиц - 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 - 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)

...