Размеры таблиц SQL



Сколько места занимает справочник? Почему такая большая база? Отчет покажет!

Иногда хочется понять, какие таблицы занимают больше всего места? Может быть что-то можно удалить? Формируем структуру хранения, смотрим отчет в SQL по размеру таблиц. Сопоставляем по именам. Отчет делает именно это. Но написан на СКД. А значит можно рисовать графики, группировки и т.п.

Отчет показывает размер таблиц, количество записей, используемое и неиспользуемое место. Соответственно, вы можете сориентироваться сколько места вам сможет выиграть shrink. А может быть и обнаружите, что кучу места у вас съедает неиспользуемая таблица.

Особенности работы

Подготавливается два набора данных: 

1. ПолучитьСтруктуруХраненияБазыДанных();

2. Запрос через SQLCMD с выводом результата во временный файл и парсингом этого файла.

Имя сервера SQL  и Имя базы SQL — обязательные параметры. Имя пользователя SQL и Пароль пользователя SQL нужно указывать, если по каким-либо причинам нужно выполнить запрос размеров таблиц под другим пользователем.

При компоновке результата формируется CMD-файл, который выполняет команду sqlcmd и формирует файл-результат. По умолчанию, в каталог временных файлов на сервере. Но можно поменять серверный путь в параметре Путь к временным файлам. 

Поскольку формируется и запускается cmd-файл, возможно сообщение системы безопасности. 

Протестировано на версии платформы 1С 8.3.12.1714, MS SQL Server 14, Microsoft (R) SQL Server Command Line Tool Version 12.0.2000.8 NT. Сервер 1С и Сервер SQL на одной машине.

P.S. Возможно, есть и другие варианты решения задачи)

10 Comments

  1. user-z99999
    Поскольку формируется и запускается cmd-файл, возможно сообщение системы безопасности.

    P.S. Возможно, есть и другие варианты решения задачи)

    Взаимодействие 1С с ADODB

    Reply
  2. SlavaKron

    Все такого рода обработки делают почти одно и то же.

     Соединение = Новый COMОбъект(«ADODB.Connection»);
    СтрокаПодключения = «Provider=SQLOLEDB;Server=» + СерверSQL + «;DataBase=» + БазаSQL + «;User ID=» + ПользовательSQL + «;Password=» + Пароль + «;»;
    Попытка
    Соединение.Open(СтрокаПодключения);
    Исключение
    Соединение = Неопределено;
    Возврат
    КонецПопытки;
    Соединение.CommandTimeout = 0;
    ТекстЗапроса =
    «CREATE TABLE #temp (
    | table_name nvarchar(128),
    | row_count INT,
    | reserved_size varchar(18),
    | data_size varchar(18),
    | index_size varchar(18),
    | unused_size varchar(18))
    |SET NOCOUNT ON
    |INSERT #temp
    |EXEC sp_msforeachtable ‘sp_spaceused »?»’
    |
    |SELECT
    | *
    |FROM #temp
    |
    |DROP TABLE #temp»;
    
    Выборка = Соединение.Execute(ТекстЗапроса);
    Данные = Выборка.GetRows().Выгрузить();

    Показать

    Reply
  3. Painted

    (2) Я бы в начале запроса тоже «DROP TABLE #temp» поставил. Перед «CREATE TABLE #temp»

    Reply
  4. Stanley211

    Сервер 1С и SQL на разных машинах. При запуске в толстом клиенте с машины, с сервером 1С с выдается сообщение «Не найдено поле замены»ИмяТаблицыХранения»».

    Reply
  5. Stanley211

    (4)Да на тестовой машине та же ошибка, сервер 1С и SQL на одном ПК, платформа 8.3.12.1714, MS SQL Server 16…

    Reply
  6. SnubbyAston

    (4)

    При запуске в толстом клиенте с машины, с сервером 1С с выдается сообщение «Не найдено поле замены»ИмяТаблицыХранения»».

    А можно уточнить, какие настройки СКД используются? Стандартные? Имя пользователя и пароль указываете?

    Reply
  7. Stanley211

    Если подскажите, где можно посмотреть настройки СКД, то сообщу конечно. Наш 1С программист в отпуске до июля… Проверил ещё на втором тестовом сервере, в копии базы, там Ваша обработка корректно отработала. График вышел и таблица с размерами также.

    Reply
  8. SnubbyAston

    (7)

    Если подскажите, где можно посмотреть настройки СКД, то сообщу конечно.

    Если конфигурация типовая попробуйте выбрать пункт меню Еще -> Стандартные настройки,

    Или Еще -> Прочее -> Стандартные настройки

    Если самописная, то возможно где то в меню Еще возможно есть пункт «Установить стандартные настройки».

    А на двух серверах ваших, на которых НЕ работает обработка, сообщение об ошибке одинаковое? «Не найдено поле замены»ИмяТаблицыХранения»»?

    Reply
  9. Salexey

    здесь удобнее таблицы группируются по объектам https://infostart.ru/public/1093355/

    Reply
  10. AlexandrSmith

    Тема конечно избитая, но интерес к ней не угас. И автор довольно хорошо все описал.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *