Определение размера базы данных 1С с разбивкой по объектам метаданных

17.05.12

База данных - Статистика базы данных

Обработка позволяет определить размер каждого объекта 1С и показывает размеры реальных таблиц базы данных, его формирующих.

Скачать файлы

Наименование Файл Версия Размер
РазмерТаблицБазыДанных.epf
.epf 12,96Kb
1083
.epf 12,96Kb 1083 Скачать

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

Идея очень проста:

1. Вводим строку подключения к серверу баз данных. Нажимаем кнопку "Заполнить структуру БД".

1. Строится дерево метаданных и реальных таблиц в которых хранятся объекты.

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

3. Полученные данные о размере выводятся в дерево метаданных, суммируются итоги.

4. Изучаем, идем разговаривать с админом))))

Опробовано на MS SQL Server 2008.

См. также

Физический размер таблиц (MSSQL)

Инструменты администратора БД Статистика базы данных Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Инструмент для получения физического размера таблиц ИБ (MSSQL)

1 стартмани

09.01.2024    1319    10    ImHunter    4    

7

Анализ использования номенклатуры

Статистика базы данных Логистика, склад и ТМЦ Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

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

1 стартмани

26.10.2023    706    12    dimanich70    0    

4

Сведения о присоединенных файлах

Статистика базы данных Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Внешний отчет для анализа данных присоединенных файлов за произвольный период в любой конфигурации.

2 стартмани

24.10.2023    1558    35    ixijixi    5    

19

История фоновых заданий

Журнал регистрации Статистика базы данных HighLoad оптимизация Конфигурации 1cv8 Абонемент ($m)

Удобный отчет по выполнению фоновых заданий в 1С с разбивкой по разным критериям, например по срокам, в какой последовательности, выполнение дольше всех, сколько одновременно и так далее.

5 стартмани

04.09.2023    774    6    Maxiko    0    

8

Количество документов в информационной базе в разрезе видов документов

Статистика базы данных Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Отчет выводит на экран количество документов в информационной базе. Это позволяет косвенно оценить объем данных в информационной базе. Данная информация может быть полезна, например, если предполагается свернуть информационную базу на определенную дату. От количества документов очень сильно зависит время свертки базы.

1 стартмани

16.08.2023    615    14    pwn    1    

3

Статистика по документам пользователя с версионированием по дате

Журнал регистрации Статистика базы данных Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Абонемент ($m)

Вывод документов, созданных или отредактированных пользователем за период, в том числе с возможностью "заглянуть" в версии документа на дату.

5 стартмани

30.06.2023    1854    10    nemec    6    

5

Расчет размера таблиц базы в Мб

Статистика базы данных Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Обработка считает и выводит размер таблиц базы данных. Работает с файловыми и серверными базами.

1 стартмани

28.11.2022    3875    78    leneil    2    

7
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. cmd_vasec 34 17.05.12 15:43 Сейчас в теме
2. andreyanova 17.05.12 16:21 Сейчас в теме
Чего то не могу к базе данных на сервере подключится. Для входа на сервер какое имя и пароль использовать? С которыми входишь на sql-сервер?
3. andreyanova 17.05.12 16:47 Сейчас в теме
{Форма.Форма.Форма(120)}: Ошибка при вызове метода контекста (NextRecordset)
RS = RS.NextRecordset();
по причине:
Произошла исключительная ситуация (ADODB.Recordset): Текущий проводник не поддерживает возврат нескольких наборов записей в результате одной операции.
DemonIQ; CratosX; +2 Ответить
4. electronik 18.05.12 09:25 Сейчас в теме
Ну ну интересно интересно. Обьработка судя по скринам мега полезная но нету денег как появятся обязательно скачаю
VinichenkoIvan; +1 1 Ответить
5. VinichenkoIvan 18.05.12 12:34 Сейчас в теме
Дайте пример строки соединения с SQL-базой
6. kursaloff 48 18.05.12 13:22 Сейчас в теме
Пример строки запроса

Тоже вылезала ошибка на RS = RS.NextRecordset(); пока не изменил поставщика на SQL Server Native Client 10.0 - с ней заработала.

Provider=SQLNCLI10.1;Integrated Security=SSPI;Persist Security Info=False;User ID="";Initial Catalog=database_name;Data Source=server-addres;Initial File Name="";Server SPN=""

спасибо за обработку давно искал (+)
DemonIQ; CratosX; +2 Ответить
7. Amedis 122 18.05.12 14:01 Сейчас в теме
Я подключаюсь через MS OLE DB Provider for SQL Server.

Строка подключения выглядит так:
Provider=SQLOLEDB.1;Persist Security Info=False;User ID=username;Password=pass;Initial Catalog=databasename;Data Source= SERVER
prickly; user1346240; DemonIQ; Xershi; CratosX; VinichenkoIvan; +6 Ответить
23. nanik 5 08.07.12 02:44 Сейчас в теме
(7) вырос объем базы, и были только несколько предположений, с помощь обработки все подтвердил. Есть один удаленный филиал, объем с которым осуществляется по электронной почте, в результате отсутствия связи файл обмена вырос и они хранились в самой БД.
39. Xershi 1473 30.11.15 10:28 Сейчас в теме
(7) да заработало. Пытался ввести доменный логин и пароль, затем пароль пользователя базы 1С с полными правами. Выкидывало в ошибку. Затем поставил чекбокс в NT и все само заработало!
8. Zero_nv 128 23.05.12 12:55 Сейчас в теме
Спасибо, очень помогла. Размер базы удалось уменьшить с 7.1 Гб до 5.7 Гб (оказывается кадры загрузили весь кладр)
9. Amedis 122 23.05.12 13:56 Сейчас в теме
Пожалуйста))) Рад что смог помочь!

У нас как-то при очередном обновлении УПП база выросла на 20 Гб.
Как потом разобрались причиной послужило автоматическое включение типового механизма версионирования.
FraerFFSG; RustIG; +2 Ответить
10. dka80 20 23.05.12 14:22 Сейчас в теме
{Форма.Форма.Форма(120)}: Ошибка при вызове метода контекста (NextRecordset)
RS = RS.NextRecordset();
по причине:
Произошла исключительная ситуация (ADODB.Recordset): Текущий поставщик не поддерживает возврат нескольких наборов записей в результате выполнения одной операции.

Строка подключения:
Provider=SQLOLEDB.1;Persist Security Info=False;User ID=user;Password=pass;Initial Catalog=cat;Data Source=server

Поставщика на SQL Server Native Client 10.0 в списке нет
11. kursaloff 48 01.06.12 11:34 Сейчас в теме
(10) dka80, тоже бьюсь над этой проблеммой .
такая ошибка вылетает иногда причем я заметил только на больших таблицах. И выпадает она именно из за того, что когда выполняется sp_spaceused иногда происходит конфликт блокировок в итоге селект не возвращает ничего и 1С вылетет .

Пытаюсь бороться с этим уже недели и в транзакции запускал и время соединения (таймаут) увеличивал, все равно иногда вылетает.:( :(
Очень обидно так как эту замечательную обработку настроил так чтобы она выгружала информацию о статистике в отдельно стоящую базу, в которой накапливаются данных о наших 15 информационных базах. В итоге наконец то получил общую статистику по размерам. Теперь бы сделать так чтобы сбор статистики работал стабильно, чтобы можно было ее запускать регулярно.

Вопрос к автору. Во первых огромное спасибо за обработку и во вторы можно ли с Вами как то связаться е-майл, телефон, скайп? Может постараемся как то совместно решить данную проблему? Я очень заинтересован в развитии данной обработке и думаю что сделаю следующие дополнительные опции:
1) Выгрузка данных в отдельно стоящее хранилище - простенькая БД с табличками Сервер, БазаДанных, Таблица1С_СКЭЛЬ, ЛогРазмеров на каждую дату.
2) Дополнительно хочу сделать выгрузку по каждой таблице размера индекса и статистике их использования, по аналогии с таблицами получать данные по DM_DB_INDEX_OPERATIONAL_STATS,DM_DB_INDEX_USAGE_STATS, sp_MSindexspace
3) накапливание статистики по рекомендуемым индексам в БД
21. testmode 30 22.06.12 12:45 Сейчас в теме
(10) dka80, SQL Server Native Client 10.0 может и отсутствовать на клиенте, если только вы не ставили его специально, по умолчанию он отсутствует, как выход - переделать на встроенный SQL Server, разницы не будет ни какой.
12. Zas1402 05.06.12 14:45 Сейчас в теме
{Форма.Форма.Форма(120)}: Ошибка при вызове метода контекста (NextRecordset)
RS = RS.NextRecordset();
по причине:
Произошла исключительная ситуация (ADODB.Recordset): Текущий проводник не поддерживает возврат нескольких наборов записей в результате одной операции.


аналогичная ситуация
user1346240; CratosX; +2 Ответить
13. kursaloff 48 05.06.12 14:45 Сейчас в теме
Урааа!!!!!!! Две недели бился :)
кажется решил проблему с таймаутом и ошибкой Текущий поставщик не поддерживает возврат нескольких наборов записей в результате

попробуйте изменить следующее:
RS = Новый COMОбъект("ADODB.Recordset");
cmd = Новый COMОбъект("ADODB.Command");
cmd.ActiveConnection = Connect;
cmd.CommandText = СтрЗаменить(ШаблонЗапроса,"%ИмяТаблицы%",Строка.ТаблицаSQL);

//Добавляем информацию о тамймауте.
cmd.CommandTimeout=360;

Попытка

//при вызове рекодсета так - он не использует настройки таймаута.
//RS.Open(СтрЗаменить(ШаблонЗапроса,"%ИмяТаблицы%",Строка.ТаблицаSQL), Connect);

//Вызываем рекордсет через RS=cmd.Execute(); RS=cmd.Execute();
Исключение
Сообщить(ОписаниеОшибки());
Сообщить("------------------");
сообщить(СтрЗаменить(ШаблонЗапроса,"%ИмяТаблицы%",Строка.ТаблицаSQL));
КонецПопытки;
gudim1979; RomanVV; jk107; ivanleb; CratosX; AnderWonder; гвость; +7 Ответить
14. kursaloff 48 05.06.12 14:50 Сейчас в теме
Для информации - мой вариант запроса по размерам таблицы.
1) Была проблема когда параллельно выгружаешь данные из нескольких баз а временная таблица одна. Для каждой базы нужно создавать таблицу со своим имененм. Переменная должна быть инициализирована выше.
2) Добавил перед началом удаление таблицы если она существует.
3) Если по каким то причинам запрос вылетает (у меня иногда бывает, когда запускаешь в консоли - конфликты блокировок, сделал так чтобы команда выполнялась 30 раз в цикле, если возникает какая то проблема.


	ШаблонЗапросаУдаления="if exists (select * from tempdb.dbo.sysobjects where id = object_id('tempdb..[#t_"+ИмяБазыДанных+"]') ) drop table #t_"+ИмяБазыДанных+";";    
	ШаблонЗапроса =   "
	|SET NOCOUNT ON;
	|declare @sucess int;
	|declare @count int;
	|set @sucess=0;
	|set @count=0;
	|WHILE @sucess = 0 and  @count<30 
	|BEGIN
	|	BEGIN TRY 	
	|		BEGIN TRANSACTION;
	|		"+ШаблонЗапросаУдаления+"
	|		CREATE TABLE #t_"+ИмяБазыДанных+"([Name] varchar(255), [TableRows] varchar(255), [SizeReserved] varchar(255), [DataSize] varchar(255), [IndexSize] varchar(255), [Unused] varchar(255));
	|		INSERT INTO #t_"+ИмяБазыДанных+"
	|		exec  sp_spaceused N'%ИмяТаблицы%','true';
	|		SELECT * FROM #t_"+ИмяБазыДанных+" ORDER BY CONVERT(bigint, REPLACE([SizeReserved], ' KB', '')) DESC;
	|		"+ШаблонЗапросаУдаления+"  
	|		set @sucess=1;
	|		COMMIT TRANSACTION;
	|	END TRY 
	|		BEGIN CATCH 
	|			set @count=@count+1;
	|			WAITFOR DELAY '00:00:05';
	|		END CATCH 
	|END ";

Показать
15. AlX0id 19.06.12 11:17 Сейчас в теме
Отличная весчь, спасибо :)
16. AlexO 135 19.06.12 11:39 Сейчас в теме
Вы получаете только таблицы с ссылками на объекты. Сколько реально данных и их объем по объектам метаданных (хоть документ, хоть - регистр), вы и близко не получаете.
реальных таблиц в которых хранятся объекты.

В 1с практически нет связей "один объект - одна таблица" (только для самых примитивных "объектов" - которые представлены примитивными типами данных). Это не реляционная система хранения данных. Чтобы получить объем данных по объекту - нужно по ссылкам найти все завязанные на этот объект данные по всем смежным таблицам.
А вы просто получате данные по списку объектов, который, собственно, вы можете получить любым списком в 1С, а не по самим объектам. И умножить на вес полей в таблице хранения - и получите тот же самый объем таблицы хранения ссылок.
17. Amedis 122 19.06.12 12:01 Сейчас в теме
(16) AlexO, изучите обработку повнимательнее.
Для каждого объекта выводятся таблицы SQL в которых он хранится.
Регистр - Основная, Итоги.
Документ, Справочник - Основная, Табличные части.

Для каждой реальной таблицы определяется ее размер средством запроса к SQL серверу.

Не понятен крик Вашей души... Что не так?
18. AlexO 135 19.06.12 12:04 Сейчас в теме
(17)
т.е. вы даже не занете, как ваша обработка работает?
и что даже на скриншоте у вас - одна таблица к каждому объекту и вес/количество записей в ней?
19. Amedis 122 19.06.12 12:16 Сейчас в теме
(18) AlexO, вы даже скриншот внимательно не посмотрели))))
и вот что там нарисовано:

Регистр накопления "Денежные средства к списанию"
Таблицы: Итоги (_AccumRGT20896)
Основная (_AccumRG20889)
Регистрация изменений (_AccumRGChng20897)

Что вы имели ввиду?
и что даже на скриншоте у вас - одна таблица к каждому объекту и вес/количество записей в ней?
27. AlexO 135 04.12.12 13:18 Сейчас в теме
(19)
Что вы имели ввиду?

то, что у вас один объект - одна таблица, и подсчет только по этой таблице. А в 1С такого не бывает - чтобы объект занимал одну таблицу (документ там, или справочник; понятно, что можно получить "вес" всех записей регистра - но какое это имеет отношение к "весу", скажем, документов?).
В 1С данные по объектам "размазаны" по базе, а не в одной таблице находятся.
28. AlexO 135 04.12.12 13:24 Сейчас в теме
(19)
вы одного не поймете - что чтобы получить объем, например, определенного вида документов, нужно оценить все таблицы как самих документов, так и их взаимодействие: проводки по регистрам (что вы и оцениваете как "вес объекта"), использование данных (и создание под это новых структур хранения в базе - т.е. увеличение занимаемого базой места) из них в других объектах и т.д.
29. Amedis 122 05.12.12 06:25 Сейчас в теме
(28) AlexO,
Вы тестировали обработку ? Сравнивали полученный результат с размером файла базы данных?
Один в один они конечно не сойдутся, всегда будет отличие на объем служебных таблиц.

Скачайте, сравните, потом претензии....
Designer1C; +1 Ответить
20. and1812 195 22.06.12 11:56 Сейчас в теме
А как определить размер таблиц для файловой базы?
22. Amedis 122 22.06.12 13:37 Сейчас в теме
(20) and1812, для файловых баз есть такая утилита
http://infostart.ru/public/82178/
mailrum2004; +1 Ответить
24. _Ramzes 125 26.07.12 00:41 Сейчас в теме
Интересная обработка
У меня при формировании выдала ошибку:

Не удалось соединиться с SQL - сервером
{Форма.Форма.Форма(93)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Ошибка входа пользователя "sa".

Ошибку удалось обойти выбрав сохранить пароль.
25. пользователь 16.08.12 16:14
Сообщение было скрыто модератором.
...
26. gaglo 03.09.12 10:37 Сейчас в теме
Работает. Может пригодиться.
Безвариантное представление информации - только дерево, ни фильтров, ни смены сортировки, но это легко решаемо.
Надобность вручную вписать строку подключения напрягла, но не сильно, минут на 5.
А вот что хотелось бы сразу видеть в статье - что запускать обработку надо в той же базе, для которой берешь статистику... А то я было разогнался в другую базу, мол, всё равно строку подключения целиком пишу ;-]
30. SergDi 16.01.13 19:44 Сейчас в теме
полезно будет узнать что базу занимает больше всего :)
31. Трактор 1246 20.02.13 10:08 Сейчас в теме
Грех не плюсануть наследника Базопузомера!
Однако воспользоваться обработкой не смогу. У меня нет MsSQL. Пользую PostgreSQL.
32. zels 171 19.07.13 13:31 Сейчас в теме
33. AlexK_2012 09.10.13 18:01 Сейчас в теме
в базе из 122Gb из 153Gb занимает регистр сведений "Версии объектов"
О чем это может говорить и можно ли его урезать каким-то образом?
54. BoryaMbi 25 12.10.18 11:37 Сейчас в теме
(33) Находил ещё больше 320Гб из которых 96% была таблица "Версии объектов".
Простым образом (записать пустой набор записей регистра) не получится.
Простой выход - просто чистить последовательным удалением отдельных записей. Долго, но надежно.
34. dj_serega 390 04.11.13 19:03 Сейчас в теме
Большое спасибо.
Не один раз уже выручала после скачивания.
Правда на некоторые SQL не удалось подключиться.
35. Natali_77 24.02.14 16:51 Сейчас в теме
А если база не SQL, как узнать размер таблиц?
36. dj_serega 390 14.04.14 11:40 Сейчас в теме
Время от времени так и выручает.
37. warrior1985 67 10.07.14 10:32 Сейчас в теме
Напишите пожалуйста как подключиться. Не умею эту строку подключения создавать(
38. vasyak319 150 11.03.15 18:54 Сейчас в теме
Раз уж на форме есть кнопка справки, то неплохо бы засандалить в неё что-нибудь полезное. Например, образец строки соединения.
40. Xershi 1473 30.11.15 10:30 Сейчас в теме
Вам на заметку!
Сейчас идет полное считывание данных, а мне нужно только по нескольким таблицам метаданных. Было бы удобно, если бы был фильтр на считывание только этих данных!
41. Xershi 1473 30.11.15 10:39 Сейчас в теме
А затем к этому всему еще и отчет на СКД прикрутить было бы замечательно.
42. tempa85 20.05.16 18:47 Сейчас в теме
Отличная штука ;) Автору мега респект!!! Xershi поддержу, отчет на СКД не помешал бы.
43. victor_k 95 05.08.16 04:02 Сейчас в теме
Работает, Автору спасибо!
44. MrKonstantin 28.09.16 14:55 Сейчас в теме
Обработка хорошая и актуальная. Вот ещё б на управляемых формах её...
Shurgent; +1 Ответить
45. sir 11 24.10.16 17:28 Сейчас в теме
А если база на Управляемых, я ведь смогу к ней подключиться и получить статистику ?
46. baracuda 2 20.12.16 14:29 Сейчас в теме
Никак не получается подключиться к базе, вываливается ошибка:
Указанный пользователь 1с не является администратором данной базы, чтение информации невозможно
47. MrKonstantin 17.02.17 17:56 Сейчас в теме
Вычисленный размер базы выходит гораздо меньше реального физического объёма. Никак не могу определиться с чем это связано, поскольку в разных базах разные диспропорции...
48. гаврюша 2 01.03.17 08:45 Сейчас в теме
(47) Добавляется место для временных файлов. Сразу добавляется определенным размером. Например после тестирования свободное место в базе примерно 1/3 от размера базы. Нужно сжимать базу.
49. rpgshnik 3625 28.04.17 06:49 Сейчас в теме
Молодец, удобная обработка!
50. Xershi 1473 12.07.17 22:29 Сейчас в теме
В свое время конфа была на ОФ, но пришло время УФ, сделал адаптацию http://infostart.ru/public/648264/!
51. Азверин 3 03.05.18 11:23 Сейчас в теме
Подскажите, что случилось у нас с БД?
За неделю одна таблица выросла в несколько раз, до 8Gb.
Речь о табличной части Товары документа "Счет на оплату покупателю".
Вот текущее состояние таблицы:
name rows resivedKB dataKB index_sizeKB unusedKB
_Document635_VT19248 1044567 9790240 8356536 1430768 2936

Что было? Ничего криминального не было. Добавлен реквизит (тип: перечисление) в сам документ.
52. nalivai-chai 687 14.06.18 19:22 Сейчас в теме
Автору спасибо.
Немного ускорил обработку: получение размеров всех таблицы БД выполняется одним запросом к БД.
Прикрепленные файлы:
РазмерТаблицБазыДанных1.epf
noon; Evgeny.Bogomolnyy; Evilleo; Grumnir; MikaPikina; KroVladS; Slikolia; +7 Ответить
53. AlexHelmer 1700 10.10.18 07:56 Сейчас в теме
Ребят, а с постгресом работать будет? и как будет выглядеть строка соединения?
55. Dream_kz 129 13.01.19 09:19 Сейчас в теме
56. Chelyapin 30.01.19 20:18 Сейчас в теме
МОжете прислать мне обработку для управляемых форм? Почта krasevE@yandex.ru
57. RodinMax 30.12.19 07:46 Сейчас в теме
Здравствуйте
"Вводим строку подключения к серверу баз данных", а можно написать пример строки если не трудно
Спасибо
58. user1424404 26.08.20 19:58 Сейчас в теме
Произошла исключительная ситуация (ADODB.Recordset): Текущий поставщик не поддерживает возврат нескольких наборов записей в результате выполнения одной операции.

Provider=MSDASQL.1;Password=*****;Persist Security Info=True;User ID=1sservice;Extended Properties="Description=1c-test;DRIVER=SQL Server;SERVER=1C-TEST;UID=1sservice;PWD=****;APP=1С:Предприятие 8.3;WSID=1C-TEST"
59. user1424404 26.08.20 20:09 Сейчас в теме
{ВнешняяОбработка.РазмерТаблицБазыДанных.Форма.Форма.Форма(114)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Время ожидания запроса истекло
60. lev6975 09.11.22 18:54 Сейчас в теме
Здравствуйте
Такой эррор ловлю по всей базе:
{ВнешняяОбработка.РазмерТаблицБазыДанных.Форма.Форма.Форма(115)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft SQL Server Native Client 11.0): Объект "_Enum34651" не существует в базе данных "*******", или недопустимо его использование в данной операции.
По всем регистрам, справочникам, перечислениям итд... несколько сот ошибок все объекты базы выводит красиво в списочке...
Переделал обработку на execute как посоветовали

Provider=SQLNCLI11.1;Integrated Security=SSPI;Persist Security Info=False;User ID="";Initial Catalog=********;Data Source=USER-PC;Initial File Name="";Server SPN=""
Где ***** - некоторое имя моей базы на Скуль
Оставьте свое сообщение