Определение физического объема таблиц базы данных

2 4

Однажды мне нужно было вести разработку в копии рабочей базы DIRECTUM. Вся система, включая SQL-сервер, была развернута на виртуальной машине, что привело к необходимости экономии ресурсов. Я решил уменьшить объем БД, удалив оттуда объекты, которые мне для разработки не требовались. Однако, к своему удивлению, обнаружил, что ни большого количества задач, ни документов в этой базе нет. "Что же тогда заняло все место?" - подумал я. Подумал, и нашел очень неплохую ХП, написанную товарищем по имени Andrew Novick. Эта процедура сразу показала, что объем таблицы истории работы с электронными документами равен 6 Гб. Не меньше была и таблица истории работы с задачами. История для разработки мне была совершенно не нужна, поэтому я с легким сердцем очистил эти таблицы и освободил необходимое место.

Хранимая процедура: dba_spaceused.zip (2,03 Кб)

Источник: Table Space Reporting with dba_spaceused

Пример работы:

Schema  TabName              Rows    ReservedMB   DataMB    Index_SizeMB  UnusedMB
-------  ------------------ ------- ------------ ---------- ------------- ----------
dbo       SBEDocVer            14997   5827.750     5807.500    2.852            17.398
dbo       SBEDocSignature    29225   119.625       117.492     1.242             0.891
dbo       MBText                 7270    114.023       109.594     1.195             3.234
dbo       SBTask                 107      88.094         81.125      1.727             5.242

2
Авторизуйтесь, чтобы оценить материал.
Вячеслав Смирнов

Есть еще отчёты в SQL Server (в Management Studio для SQL Server 2008 точно есть). Но тут сложность - в данном случае, надо на время поменять режим совместимости БД DIRECTUM с SQL 2000 на SQL 2008, тогда отчёты будут строиться. Перед этим лучше остановить службы и прекратить все подключения клиентстких частей к БД.

Потом надо вернуть режим совместимости обратно на SQL 2000, потому как клиентская часть, WorkFlow, ... не будут работать с базой пока она имеет неправильный режим совместимости.

Вот кусок отчета, экспортированного в xls-формат (на выбор есть xls и pdf).

 

Table Name

# Records

Reserved (KB)

Data (KB)

Indexes (KB)

Unused (KB)

dbo.COCClaimEventsQueue

0

0

0

0

0

dbo.dtproperties

0

0

0

0

0

dbo.getReplActions

0

0

0

0

0

dbo.MBAnalit

6 954

11 552

6 712

3 480

1 360

dbo.MBAnalitSpr

6 954

3 560

952

1 816

792

dbo.MBAnalitV

1

16

8

8

0

dbo.MBAnValR

16 668

6 184

4 184

1 688

312

  

Вячеслав Смирнов

Сам себя поправлю.

>> Перед этим лучше остановить службы и прекратить все подключения клиентстких частей к БД

>> потому как клиентская часть, WorkFlow, ... не будут работать с базой пока она имеет неправильный режим совместимости

Думаю надо делать всё очень осторожно, потому как если клиенсткая часть, WorkFlow всё же будут работать с базой то она может разрушиться из-за SQL-запросов в не том режиме совместимости. Для большей надёжности - эксперимент со сменой режима совместимости стоит делать только на неиспользуемой копии базы (а не на боевой БД).

Иван Чурбаков

БД от этого не разрушится. Просто запросы со *= не будут выполняться (при их выполнении будет возникать исключение). Т.е. фактически никто работать с системой не сможет.

Анатолий Придыбайло

В статье Переносим задачи в файловые хранилища приведен SQL запрос который позволяет определить размер таблиц БД

Авторизуйтесь, чтобы написать комментарий