Не раз приходилось мне объясняться с нашим системным администратором по вопросу неожиданного роста базы данных. И вот наконец решил больше не гадать о причинах и написал такой инструмент.
Идея очень проста:
1. Вводим строку подключения к серверу баз данных. Нажимаем кнопку «Заполнить структуру БД».
1. Строится дерево метаданных и реальных таблиц в которых хранятся объекты.
2. Обработка обращается напрямую к серверу баз данных и для каждой реальной таблицы производится запрос с определением ее физического размера.
3. Полученные данные о размере выводятся в дерево метаданных, суммируются итоги.
4. Изучаем, идем разговаривать с админом))))
Опробовано на MS SQL Server 2008.
Полезная штука
Чего то не могу к базе данных на сервере подключится. Для входа на сервер какое имя и пароль использовать? С которыми входишь на sql-сервер?
{Форма.Форма.Форма(120)}: Ошибка при вызове метода контекста (NextRecordset)
RS = RS.NextRecordset();
по причине:
Произошла исключительная ситуация (ADODB.Recordset): Текущий проводник не поддерживает возврат нескольких наборов записей в результате одной операции.
Ну ну интересно интересно. Обьработка судя по скринам мега полезная но нету денег как появятся обязательно скачаю
Дайте пример строки соединения с SQL-базой
Пример строки запроса
Тоже вылезала ошибка на 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=»»
спасибо за обработку давно искал (+)
Я подключаюсь через 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
Спасибо, очень помогла. Размер базы удалось уменьшить с 7.1 Гб до 5.7 Гб (оказывается кадры загрузили весь кладр)
Пожалуйста))) Рад что смог помочь!
У нас как-то при очередном обновлении УПП база выросла на 20 Гб.
Как потом разобрались причиной послужило автоматическое включение типового механизма версионирования.
{Форма.Форма.Форма(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 в списке нет
(10) dka80, тоже бьюсь над этой проблеммой .
такая ошибка вылетает иногда причем я заметил только на больших таблицах. И выпадает она именно из за того, что когда выполняется sp_spaceused иногда происходит конфликт блокировок в итоге селект не возвращает ничего и 1С вылетет .
Пытаюсь бороться с этим уже недели и в транзакции запускал и время соединения (таймаут) увеличивал, все равно иногда вылетает.:( 🙁
Очень обидно так как эту замечательную обработку настроил так чтобы она выгружала информацию о статистике в отдельно стоящую базу, в которой накапливаются данных о наших 15 информационных базах. В итоге наконец то получил общую статистику по размерам. Теперь бы сделать так чтобы сбор статистики работал стабильно, чтобы можно было ее запускать регулярно.
Вопрос к автору. Во первых огромное спасибо за обработку и во вторы можно ли с Вами как то связаться е-майл, телефон, скайп? Может постараемся как то совместно решить данную проблему? Я очень заинтересован в развитии данной обработке и думаю что сделаю следующие дополнительные опции:
1) Выгрузка данных в отдельно стоящее хранилище — простенькая БД с табличками Сервер, БазаДанных, Таблица1С_СКЭЛЬ, ЛогРазмеров на каждую дату.
2) Дополнительно хочу сделать выгрузку по каждой таблице размера индекса и статистике их использования, по аналогии с таблицами получать данные по DM_DB_INDEX_OPERATIONAL_STATS,DM_DB_INDEX_USAGE_STATS, sp_MSindexspace
3) накапливание статистики по рекомендуемым индексам в БД
RS = RS.NextRecordset();
по причине:
Произошла исключительная ситуация (ADODB.Recordset): Текущий проводник не поддерживает возврат нескольких наборов записей в результате одной операции.
аналогичная ситуация
Урааа!!!!!!! Две недели бился 🙂
кажется решил проблему с таймаутом и ошибкой Текущий поставщик не поддерживает возврат нескольких наборов записей в результате
попробуйте изменить следующее:
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));
КонецПопытки;
Для информации — мой вариант запроса по размерам таблицы.
1) Была проблема когда параллельно выгружаешь данные из нескольких баз а временная таблица одна. Для каждой базы нужно создавать таблицу со своим имененм. Переменная должна быть инициализирована выше.
2) Добавил перед началом удаление таблицы если она существует.
3) Если по каким то причинам запрос вылетает (у меня иногда бывает, когда запускаешь в консоли — конфликты блокировок, сделал так чтобы команда выполнялась 30 раз в цикле, если возникает какая то проблема.
Показать
Отличная весчь, спасибо 🙂
(16) AlexO, изучите обработку повнимательнее.
Для каждого объекта выводятся таблицы SQL в которых он хранится.
Регистр — Основная, Итоги.
Документ, Справочник — Основная, Табличные части.
Для каждой реальной таблицы определяется ее размер средством запроса к SQL серверу.
Не понятен крик Вашей души… Что не так?
(18) AlexO, вы даже скриншот внимательно не посмотрели))))
и вот что там нарисовано:
Регистр накопления «Денежные средства к списанию»
Таблицы: Итоги (_AccumRGT20896)
Основная (_AccumRG20889)
Регистрация изменений (_AccumRGChng20897)
Что вы имели ввиду?
А как определить размер таблиц для файловой базы?
(10) dka80, SQL Server Native Client 10.0 может и отсутствовать на клиенте, если только вы не ставили его специально, по умолчанию он отсутствует, как выход — переделать на встроенный SQL Server, разницы не будет ни какой.
(20) and1812, для файловых баз есть такая утилита
http://infostart.ru/public/82178/
(7) вырос объем базы, и были только несколько предположений, с помощь обработки все подтвердил. Есть один удаленный филиал, объем с которым осуществляется по электронной почте, в результате отсутствия связи файл обмена вырос и они хранились в самой БД.
Интересная обработка
У меня при формировании выдала ошибку:
Не удалось соединиться с SQL — сервером
{Форма.Форма.Форма(93)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Ошибка входа пользователя «sa».
Ошибку удалось обойти выбрав сохранить пароль.
Работает. Может пригодиться.
Безвариантное представление информации — только дерево, ни фильтров, ни смены сортировки, но это легко решаемо.
Надобность вручную вписать строку подключения напрягла, но не сильно, минут на 5.
А вот что хотелось бы сразу видеть в статье — что запускать обработку надо в той же базе, для которой берешь статистику… А то я было разогнался в другую базу, мол, всё равно строку подключения целиком пишу ;-]
(19)
то, что у вас один объект — одна таблица, и подсчет только по этой таблице. А в 1С такого не бывает — чтобы объект занимал одну таблицу (документ там, или справочник; понятно, что можно получить «вес» всех записей регистра — но какое это имеет отношение к «весу», скажем, документов?).
В 1С данные по объектам «размазаны» по базе, а не в одной таблице находятся.
(28) AlexO,
Вы тестировали обработку ? Сравнивали полученный результат с размером файла базы данных?
Один в один они конечно не сойдутся, всегда будет отличие на объем служебных таблиц.
Скачайте, сравните, потом претензии….
полезно будет узнать что базу занимает больше всего 🙂
Грех не плюсануть наследника Базопузомера!
Однако воспользоваться обработкой не смогу. У меня нет MsSQL. Пользую PostgreSQL.
Может кто ответить — в чем ее преимущество перед более ранними:
Анализ размеров таблиц…для (SQL) и файлового вариантов базы
Оценка размера информационной базы
и
в базе из 122Gb из 153Gb занимает регистр сведений «Версии объектов»
О чем это может говорить и можно ли его урезать каким-то образом?
Большое спасибо.
Не один раз уже выручала после скачивания.
Правда на некоторые SQL не удалось подключиться.
А если база не SQL, как узнать размер таблиц?
Время от времени так и выручает.
Напишите пожалуйста как подключиться. Не умею эту строку подключения создавать(
Раз уж на форме есть кнопка справки, то неплохо бы засандалить в неё что-нибудь полезное. Например, образец строки соединения.
(7) да заработало. Пытался ввести доменный логин и пароль, затем пароль пользователя базы 1С с полными правами. Выкидывало в ошибку. Затем поставил чекбокс в NT и все само заработало!
Вам на заметку!
Сейчас идет полное считывание данных, а мне нужно только по нескольким таблицам метаданных. Было бы удобно, если бы был фильтр на считывание только этих данных!
А затем к этому всему еще и отчет на СКД прикрутить было бы замечательно.
Отличная штука 😉 Автору мега респект!!! Xershi поддержу, отчет на СКД не помешал бы.
Работает, Автору спасибо!
Обработка хорошая и актуальная. Вот ещё б на управляемых формах её…
А если база на Управляемых, я ведь смогу к ней подключиться и получить статистику ?
Никак не получается подключиться к базе, вываливается ошибка:
Указанный пользователь 1с не является администратором данной базы, чтение информации невозможно
Вычисленный размер базы выходит гораздо меньше реального физического объёма. Никак не могу определиться с чем это связано, поскольку в разных базах разные диспропорции…
(47) Добавляется место для временных файлов. Сразу добавляется определенным размером. Например после тестирования свободное место в базе примерно 1/3 от размера базы. Нужно сжимать базу.
Молодец, удобная обработка!
В свое время конфа была на ОФ, но пришло время УФ, сделал адаптациюhttp://infostart.ru/public/648264/ !
Подскажите, что случилось у нас с БД?
За неделю одна таблица выросла в несколько раз, до 8Gb.
Речь о табличной части Товары документа «Счет на оплату покупателю».
Вот текущее состояние таблицы:
name rows resivedKB dataKB index_sizeKB unusedKB
_Document635_VT19248 1044567 9790240 8356536 1430768 2936
Что было? Ничего криминального не было. Добавлен реквизит (тип: перечисление) в сам документ.
Автору спасибо.
Немного ускорил обработку: получение размеров всех таблицы БД выполняется одним запросом к БД.
Ребят, а с постгресом работать будет? и как будет выглядеть строка соединения?
(33) Находил ещё больше 320Гб из которых 96% была таблица «Версии объектов».
Простым образом (записать пустой набор записей регистра) не получится.
Простой выход — просто чистить последовательным удалением отдельных записей. Долго, но надежно.
(53) Сделал версию для PostgreSQL
https://infostart.ru/public/978816/
МОжете прислать мне обработку для управляемых форм? Почта krasevE@yandex.ru