Подключение к 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
довольно интересно, еще и под тонкие формы, нужно заюзать
интресно насколько точные цифры выдает
{Форма.Форма.Форма(24,27)}: Тип не определен (ДеревоЗначений)
ДеревоМетаданных = Новый <<?>>ДеревоЗначений;
ДеревоЗначений (ValueTree)
Доступность:
Сервер, толстый клиент, внешнее соединение.
Как ни посмотрю — постоянно кто-то делает анализ размеров баз) В чем преимущества твоей разработки перед существующими, например моей?http://infostart.ru/public/78049/
(3) Это будет в тонком клиенте, в описании указано, что работает только под толстым.
(1) Можно сделать что бы работало под тонким. Есть два пути:
— простой — если вы готовы пожертвовать отображением прогресса обработки, то достаточно перенести процедуры обработки в &НаСервере. Т.к. прогресс отображается функцией Состояние(), которая работает только на клиенте, то прогресс отображаться не будет.
— сложный, без потери отображения прогресса — необходимо сделать механизм передачи дерева значений с сервера на клиент и с клиента на сервер. Это делают с помощью структур — процесс несколько муторный. По-моему игра не стоит свеч.
(2) Данные о размере БД достаточно точные, проверено на рабочей базе, где практически сошлось с фактическим размером файла на диске, за вычетом объема самой конфигурации, которая тоже хранится в БД. Также механизм определения размера основан на принципе из прошлой обработки, на которую указана ссылка в публикации, достоверность работы которой, по-видимому, подтверждена практикой.
Определения данных по полям зависит от количества анализируемых записей, заданных параметром, но в принципе тоже должно отображаться корректно. Опять таки, проверено на своей базе. Например, в регистре наибольший размер показало для одного текстового поля, что после проверки подтвердилось, хотя были и другие поля такого же типа, но они, как оказалось, не заполнялись.
(4) Обработка делалась под себя, для удобства анализа. По сравнению с существующими отличия такие:
— обработка работает в управляемом приложении — существующих для управлемых форм не нашёл;
— обработка выводит данные, пусть и косвенные, в детализации вплоть до полей и реквизитов — такого тоже не видел;
— данные удобно (как по мне) сгруппированы в виде дерева и не содержат ничего лишнего, что облегчает анализ.
(4) Istur, в вашей обработке есть ошибки. Прочитайте хотя бы мои комментарии (45 и 46), которым скоро уже год (!)
(7) Я года полтора не сидел на инфостарте вообще, не до него было. Щас читаю да, смотрю, что народ понаписал. Твои 2 комментария почитал.. посмотрю и или оспорю или исправлю. Проблема в том, что сейчас я не имею доступа к SQL-серверу, смогу сделать только в темную если только( Хотя ты в принципе и так нашел и где баг и как его поправить)
В УТ11 не пошла, база файловая
{Форма.Форма.Форма(24,27)}: Тип не определен (ДеревоЗначений)
ДеревоМетаданных = Новый <<?>>ДеревоЗначений;
платформа 8,2,17
(9) Об этой ошибке уже отвечал в (5).
И вообще-то в описании написано:
эта обработка не для файловой базы.
Полезная штука. Единственное я бы добавил возможность по галке включать проверку подлинности Windows (добаление к строке соединения Integrated Security=SSPI)
Очень долго работает. У меня анализировал базу несколько часов.
(12) у него не оптимально написан алгоритм. Я переписал все либо на сервере, либо на клиенте. На клиенте медленнее работает немного, но почти также быстро как на сервере:http://infostart.ru/public/648264/
Валится, если в пароле sa есть одинарная кавычка. Кому актуально — исправьте в процедуре СформироватьСтрокуСоединения()
это нормально что обработка собирает данные дольше 2 часов ? wtf.
(15) если вы проводите анализ по реквизитам объектов то нормально. «… анализ происходит путем вычисления размера данных хранимых в поле с помощью функции T-SQL datalength. Т.к. при большом количестве записей в таблице, выполнение этой функции может занимать много времени, то предусмотрен параметр «Количество записей для анализа полей». Этот параметр ограничивает число записей, по которым происходит вычисление datalength количество первых записей указанных в нём. При условии однородности данных заполняющих колонку таблицы это дает достаточно приближенный результат. Если указать значение этого параметра 0, то анализ по полям производится не будет.»