Как посмотреть размер таблиц в sql 1с
Други, выручайте! Первый раз за последние 5 лет потребовалось посмотреть на чересчур жирные таблицы, а обработку то-ли удалил, то-ли потерял((
Киньте на почту, с меня аплодисменты))
dan@tedza.com
SELECT
t.NAME AS TableName,
s.Name AS SchemaName,
p.rows AS RowCounts,
SUM(a.total_pages) * 8 AS TotalSpaceKB,
SUM(a.used_pages) * 8 AS UsedSpaceKB,
(SUM(a.total_pages) — SUM(a.used_pages)) * 8 AS UnusedSpaceKB
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN
sys.allocation_units a ON p.partition_id = a.container_id
LEFT OUTER JOIN
sys.schemas s ON t.schema_id = s.schema_id
WHERE
t.NAME NOT LIKE ‘dt%’
AND t.is_ms_shipped = 0
AND i.OBJECT_ID > 255
GROUP BY
t.Name, s.Name, p.Rows
ORDER BY
RowCounts DESC
Просмотр размера таблиц и количества записей в таблицах
Отчет получает размеры таблиц с помощью метода глобального контекста ПолучитьРазмерДанныхБазыДанных(). В документации сказано, что с помощью данного метода могут быть получены все данные, которые доступны пользователю для чтения, метод не учитывает размер истории данных, расширений конфигурации, служебных таблиц платформы (индексы и т.д.). Недостаток метода в том, что он работает довольно медленно и нельзя получить размер служебных таблиц. Но есть и большой плюс – метод работает не зависимо от используемой СУБД, в том числе и с файловыми базами. Данный метод доступен только начиная с платформы версии 8.3.15.1489. Если платформа ниже, то отчет вернет только количество записей в таблице. Несмотря на то, что получить можно размер только основных таблиц, этого вполне достаточно, чтобы проанализировать и найти какая таблица «распухла».
Подобные разработки уже есть на Infostart, но они либо не на СКД, либо имеют др. недостатки. Данный же отчет выполнен на СКД, что позволяет «вертеть» данные как угодно, на свое усмотрение. Так же данный отчет позволяет выбрать только нужные менеджеры объектов для анализа, что может существенно сэкономить время, и изначально имеет 3 готовых варианта:
- Основной – с группировкой по менеджерам объектов и сортировкой по размеру таблиц по убыванию, что бы сразу было видно самые большие таблицы в каждом менеджере объектов.
- Краткий – просмотр общего размера каждого менеджера объектов с диаграммой;
- Линейный – просмотр всех таблиц одним списком, отсортированных по размеру, на случай если нужно сразу просмотреть топ самых больших таблиц без группировки по менеджерам;
Колонки размера можно настроить в разных единицах измерения — байтах, Кб, Мб, Гб и авто единица измерения (отчет сам поймет какую лучше показать в зависимости от размера). Отчет не имеет формы, так что нормально будет отображаться как в обычном приложении, так в управляемом. Но при просмотре отчета в обычном приложении механизмы платформы не позволяют переключать вариант отчета интерактивно, так что можете выбрать нужный вариант в конфигураторе или сделать свой вариант отчета или свой механизм интерактивного переключения вариантов. В управляемых форма проблем с настройками СКД никаких нет, особенно если у вас конфигурация на базе БСП.
Тестировалось на платформах 8.3.17.1549 и 8.3.20.1674, на файловых и серверных базах, самописных конфигурациях и ЗУП 3.1. Работать отчет должен на любой конфигурации и платформах 8.3, но на платформах ниже 8.3.15.1489 особого интереса не представляет.
Внимание! Выполнение может занять длительное время, особенно при большом объеме данных. Запускать отчет нужно под полными правами. Всем успехов!
Размер таблиц 1С
Рассмотрим, как определять размер таблиц информационной базы данных в 1С, при помощи специальной обработки. Такая обработка позволит производить оценку размеров различной 1С таблицы SQL, использовать её можно как и файловыми базами данных, так и серверными базами данных.
Если обработка будет использована для 1С 8.3 файловой базы, то можно будет узнать таблицы, которые в будущем создадут проблемы, в виде превышения наибольшего возможного размера для файловой базы.
Стоит отметить, что максимальный разрешённый размер одной таблицы, 1С 8.3 файловая база – это 4 Гб. В случае, когда большинство таблиц, по размеру, приближаются к 4 Гб, то стоит задуматься о том, что б перейти на серверную информационную базу данных 1С.
2. Файл обработки в 1С для определения табличных размеров

Для того чтобы запустить обработку – кликаем на «Файл», переходим по кнопке «Открыть» и выбираем нужный файл обработки 1С. Как только данная обработка будет запущена – внутри неё отобразятся те объекты, для которых можно определять табличные размеры. К таким объектам можно отнести: документацию, справочные материалы, планы, регистр база данных
Саму обработку можно найти на официальных сайтах продукции компании 1С. Пример работы обработки Рассмотрим то, как будут действовать обработки 1С Розница
Размер таблиц 1С

Отображение размера каждого из объектов отображается в Мб. Чтобы увидеть размер конкретной таблицы – кликаем по ней и избираем действие показать таблицу размеров. Стоит отметить, если таблица содержит много данных, то такое определение может занять немного времени.
Показать таблицу размеров

Можно узнавать размер не только для конкретной таблицы, но и для объектов, в общем, аналогично избираем объект из корня и кликаем по кнопке показать таблицу размеров, как демонстрируется ниже:
1С 8 регистры накопления
3. Особенности обработки
База данных MSSQL Стоит отметить, что эта обработка примечательна тем, что в ней не задействуется принцип работы 1С ADODB по соединению базы данных MSSQL, это весьма удобно, так как редко, когда есть постоянный доступ к MSSQL, кроме как у администратора. Но в обработке по определению размера таблиц необходимо будет воспользоваться следующим файлом csy, который формируется внутри консоли MSSQL, выглядит он так:

База данных MSSQL, файл csy
Вывод. В данной статье была рассмотрена работа и функциональность 1С обработки, которая отвечает за определение размера таблиц баз данных 1С. Были показаны скриншоты-примеры работы обработки, а также её особенности.
Специалист компании «Кодерлайн»
Айдар Фархутдинов
SQL: Как определить размер таблиц в БД MS SQL
Для определения размера таблиц в базе данных, размещенной на сервере Microsoft SQL Server, требуется выполнить следующие действия:
1. Подключиться к серверу баз данных, при помощи SQL Server Management Studio (SSMS)
2. Выбрать базу данных, размер таблиц которой необходимо определить
3. Выполнить SQL запрос:
USE ; GO SELECT t.Name AS TableName, s.Name AS SchemaName, p.Rows AS RowCounts, SUM(a.total_pages) * 8 AS TotalSpaceKB, SUM(a.used_pages) * 8 AS UsedSpaceKB, (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB FROM sys.tables t INNER JOIN sys.indexes i ON t.object_id = i.object_id INNER JOIN sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id LEFT OUTER JOIN sys.schemas s ON t.schema_id = s.schema_id WHERE t.Name NOT LIKE 'dt%' AND t.is_ms_shipped = 0 AND i.object_id > 255 GROUP BY t.Name, s.Name, p.Rows ORDER BY t.Name; GO
где, «database_name» — имя базы данных, для которой необходимо получить список таблиц с размерами.
Размер таблиц базы данных будет указан в Килобайтах
Если необходимо получить ограниченных список таблиц, например, содержащих определенные слова в названии, то можно сократить вывод добавив условие (t.Name Like ‘%Filter%’) в конструкцию WHERE
WHERE t.Name NOT LIKE 'dt%' AND t.Name Like '%Filter%' AND t.is_ms_shipped = 0 AND i.object_id > 255
где, Filter — это подстрока в названии таблицы
Другой способ получения размера таблиц в базе данных, это использование встроенной хранимой процедуры sp_spaceused.
Хранимая процедура (stored procedure) sp_spaceused выводит количество строк, зарезервированное место на диске и место на диске, которое используется таблицей, индексированным представлением или очередью компонента Service Broker в текущей базе данных, либо выводит место на диске, зарезервированное и используемое всей базой данных.
Ниже показан пример, в котором предоставляются сведения о занимаемом месте на диске для таблицы table_name и ее индексах в базе данных database_name, используя хранимую процедуру sp_spaceused:
USE ; GO EXEC sp_spaceused N'.'; GO
Ниже показан пример, в котором предоставляются сведения о занимаемом месте на диске для всех таблиц и ее индексах в базе данных database_name.
USE ; GO sp_msforeachtable N'EXEC sp_spaceused [?]'; GO
Определить дисковое пространство используемое индексами
Чтобы узнать сколько места занимают индексы таблиц базы данных можно использовать следующий запрос:
USE ; GO SELECT OBJECT_NAME(i.object_id) AS TableName, i.name AS IndexName, i.index_id AS IndexID, 8 * SUM(a.used_pages) AS 'Indexsize(KB)' FROM sys.indexes AS i JOIN sys.partitions AS p ON p.object_id = i.object_id AND p.index_id = i.index_id JOIN sys.allocation_units AS a ON a.container_id = p.partition_id GROUP BY i.OBJECT_ID, i.index_id, i.name ORDER BY OBJECT_NAME(i.object_id), i.index_id
Приведенные примеры позволяют получить оперативно получить информацию о занимаемом дисковом пространстве.



