0. Amedis 106 17.05.12 12:28 Сейчас в теме

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

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

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
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): Текущий проводник не поддерживает возврат нескольких наборов записей в результате одной операции.
4. electronik 18.05.12 09:25 Сейчас в теме
Ну ну интересно интересно. Обьработка судя по скринам мега полезная но нету денег как появятся обязательно скачаю
5. sils 18.05.12 12:34 Сейчас в теме
Дайте пример строки соединения с SQL-базой
6. kursaloff 33 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=""

спасибо за обработку давно искал (+)
7. Amedis 106 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
Xershi; CratosX; sils; +3 Ответить
23. nanik 5 08.07.12 02:44 Сейчас в теме
(7) вырос объем базы, и были только несколько предположений, с помощь обработки все подтвердил. Есть один удаленный филиал, объем с которым осуществляется по электронной почте, в результате отсутствия связи файл обмена вырос и они хранились в самой БД.
39. Xershi 403 30.11.15 10:28 Сейчас в теме
(7) да заработало. Пытался ввести доменный логин и пароль, затем пароль пользователя базы 1С с полными правами. Выкидывало в ошибку. Затем поставил чекбокс в NT и все само заработало!
8. Zero_nv 23.05.12 12:55 Сейчас в теме
Спасибо, очень помогла. Размер базы удалось уменьшить с 7.1 Гб до 5.7 Гб (оказывается кадры загрузили весь кладр)
9. Amedis 106 23.05.12 13:56 Сейчас в теме
Пожалуйста))) Рад что смог помочь!

У нас как-то при очередном обновлении УПП база выросла на 20 Гб.
Как потом разобрались причиной послужило автоматическое включение типового механизма версионирования.
FraerFFSG; Rustig; +2 Ответить
10. dka80 16 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 33 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 18 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): Текущий проводник не поддерживает возврат нескольких наборов записей в результате одной операции.


аналогичная ситуация
13. kursaloff 33 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));
КонецПопытки;
jk107; ivanleb; CratosX; AnderWonder; гвость; +5 Ответить
14. kursaloff 33 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 125 19.06.12 11:39 Сейчас в теме
Вы получаете только таблицы с ссылками на объекты. Сколько реально данных и их объем по объектам метаданных (хоть документ, хоть - регистр), вы и близко не получаете.
реальных таблиц в которых хранятся объекты.

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

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

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

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

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

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

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

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

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

Что было? Ничего криминального не было. Добавлен реквизит (тип: перечисление) в сам документ.
52. nalivai-chai 628 14.06.18 19:22 Сейчас в теме
Автору спасибо.
Немного ускорил обработку: получение размеров всех таблицы БД выполняется одним запросом к БД.
Прикрепленные файлы:
РазмерТаблицБазыДанных1.epf
MikaPikina; KroVladS; Slikolia; +3 Ответить
53. ah7777777 259 10.10.18 07:56 Сейчас в теме
Ребят, а с постгресом работать будет? и как будет выглядеть строка соединения?
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Санкт-Петербург
зарплата от 100 000 руб.
Полный день

Консультант-аналитик 1С (ЗУП)
Санкт-Петербург
Полный день

Руководитель группы сервисов ЭДО, ЭЦП и криптографии
Москва
зарплата от 150 000 руб.
Полный день

Руководитель группы интеграций (1С)
Москва
зарплата от 150 000 руб.
Полный день

Руководитель группы сервисов FRM на 1С
Москва
зарплата от 150 000 руб.
Полный день