Размеры таблиц и полей базы данных MS SQL + справочник таблиц (управляемая форма)






Обработка отображает информацию о размере БД MS SQL в разбивке по типам метаданных. Есть возможность детализации до полей таблиц (реквизитов объектов). Может использоваться для анализа размеров БД, выявления причин роста БД, определения элементов, занимающих наибольшее место в БД. Обработка реализована в управляемой форме, работает в тонком клиенте, может быть открыта как просто внешняя обработка так и подключена через подсистему «Дополнительные отчеты и обработки».

Подключение к MS SQL происходит с помощью ADODB со стороны сервера 1С. Информация о размере таблицы получается с помощью вызова встроенной в MS SQL Server хранимой процедуры sp_spaceused.

С размерами полей таблиц ситуация сложнее, просто вычислить абсолютные значения занимаемого ими объема нельзя. Однако в обработке производится расчет относительного размера каждого поля в общем размере таблицы на основании анализа определенного количества записей, которое указывается в параметре "Количество записей для анализа полей". Принцип расчета следующий: например, "Количество записей для анализа полей"=1000, тогда берется 1000 записей таблицы MS SQL и для каждого поля вычисляется объем занимаемых данных с помощью функции T-SQL datalength. Затем определяется доля(процент) каждого поля в общем объеме из 1000 записей. Если данные в таблице однородны, то полученные значение будут верны. Также чем большее количество записей будет проанализировано, тем сильнее будет сглажена неоднородность данных в таблице. Однако анализ большого количества записей может занять много времени. Если задать значение параметра "Количество записей для анализа полей" = 0, то анализ по полям не будет производится.

Т.к. расчет размеров может занимать длительное время, то есть возможность выбора отдельных объектов метаданных для анализа. Также работа обработки может быть прервана нажатием Ctrl+Break.

На отдельной вкладке выводится список названий таблиц MS SQL в привязке к метаданным с возможностью поиска. Это позволяет легко определить объект или реквизит метаданных при необходимости анализа запроса MS SQL.

Обновление от 12/12/2024: Обработка обновлена до версии 2.0. Исправлены ошибки, проведен рефакторинг, улучшен функционал. Протестирована на платформах 8.2, 8.3

16 Comments

  1. SergDi

    довольно интересно, еще и под тонкие формы, нужно заюзать

    Reply
  2. SergDi

    интресно насколько точные цифры выдает

    Reply
  3. SergDi

    {Форма.Форма.Форма(24,27)}: Тип не определен (ДеревоЗначений)

    ДеревоМетаданных = Новый <<?>>ДеревоЗначений;

    ДеревоЗначений (ValueTree)

    Доступность:

    Сервер, толстый клиент, внешнее соединение.

    Reply
  4. Istur

    Как ни посмотрю — постоянно кто-то делает анализ размеров баз) В чем преимущества твоей разработки перед существующими, например моей? http://infostart.ru/public/78049/

    Reply
  5. AnderWonder

    (3) Это будет в тонком клиенте, в описании указано, что работает только под толстым.

    (1) Можно сделать что бы работало под тонким. Есть два пути:

    — простой — если вы готовы пожертвовать отображением прогресса обработки, то достаточно перенести процедуры обработки в &НаСервере. Т.к. прогресс отображается функцией Состояние(), которая работает только на клиенте, то прогресс отображаться не будет.

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

    (2) Данные о размере БД достаточно точные, проверено на рабочей базе, где практически сошлось с фактическим размером файла на диске, за вычетом объема самой конфигурации, которая тоже хранится в БД. Также механизм определения размера основан на принципе из прошлой обработки, на которую указана ссылка в публикации, достоверность работы которой, по-видимому, подтверждена практикой.

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

    Reply
  6. AnderWonder

    (4) Обработка делалась под себя, для удобства анализа. По сравнению с существующими отличия такие:

    — обработка работает в управляемом приложении — существующих для управлемых форм не нашёл;

    — обработка выводит данные, пусть и косвенные, в детализации вплоть до полей и реквизитов — такого тоже не видел;

    — данные удобно (как по мне) сгруппированы в виде дерева и не содержат ничего лишнего, что облегчает анализ.

    Reply
  7. hulio

    (4) Istur, в вашей обработке есть ошибки. Прочитайте хотя бы мои комментарии (45 и 46), которым скоро уже год (!)

    Reply
  8. Istur

    (7) Я года полтора не сидел на инфостарте вообще, не до него было. Щас читаю да, смотрю, что народ понаписал. Твои 2 комментария почитал.. посмотрю и или оспорю или исправлю. Проблема в том, что сейчас я не имею доступа к SQL-серверу, смогу сделать только в темную если только( Хотя ты в принципе и так нашел и где баг и как его поправить)

    Reply
  9. 1977

    В УТ11 не пошла, база файловая

    {Форма.Форма.Форма(24,27)}: Тип не определен (ДеревоЗначений)

    ДеревоМетаданных = Новый <<?>>ДеревоЗначений;

    платформа 8,2,17

    Reply
  10. AnderWonder

    (9) Об этой ошибке уже отвечал в (5).

    И вообще-то в описании написано:

    …о размерах объектов по типам метаданных в БД MS SQL

    эта обработка не для файловой базы.

    Reply
  11. bocharovki

    Полезная штука. Единственное я бы добавил возможность по галке включать проверку подлинности Windows (добаление к строке соединения Integrated Security=SSPI)

    Reply
  12. solbol

    Очень долго работает. У меня анализировал базу несколько часов.

    Reply
  13. Xershi

    (12) у него не оптимально написан алгоритм. Я переписал все либо на сервере, либо на клиенте. На клиенте медленнее работает немного, но почти также быстро как на сервере: http://infostart.ru/public/648264/

    Reply
  14. sa1m0nn

    Валится, если в пароле sa есть одинарная кавычка. Кому актуально — исправьте в процедуре СформироватьСтрокуСоединения()

    «»»» + СокрЛП(ПарольПользователяБД)+ «»»» +
    Reply
  15. sanek_gk

    это нормально что обработка собирает данные дольше 2 часов ? wtf.

    Reply
  16. AnderWonder

    (15) если вы проводите анализ по реквизитам объектов то нормально. «… анализ происходит путем вычисления размера данных хранимых в поле с помощью функции T-SQL datalength. Т.к. при большом количестве записей в таблице, выполнение этой функции может занимать много времени, то предусмотрен параметр «Количество записей для анализа полей». Этот параметр ограничивает число записей, по которым происходит вычисление datalength количество первых записей указанных в нём. При условии однородности данных заполняющих колонку таблицы это дает достаточно приближенный результат. Если указать значение этого параметра 0, то анализ по полям производится не будет.»

    Reply

Leave a Comment

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