Небольшая обработка, которая показывает информацию о физически используемом дисковом пространстве для СУБД MS SQL Server и PostgreSQL в разрезе метаданных 1С.
Использует подключение к SQL Server через OLEDB, данные запрашиваются процедурой sp_spaceused.
http://msdn.microsoft.com/ru-ru/library/ms188776.aspx
Работоспособность проверена на SQL Server 2005, 2008, 2012 И 1С: Предприятии 8.2, 8.3
Работает как в толстом так и в тонком клиенте(обычный и управляемый режимы).
Перед использованием на закладке «Настройки» указать данные для подключения к БД.
Для СУБД PostgreSQL:
Требуется установленный ODBC драйвер (если в тонком клиенте, то устанавливать на сервер приложений)
http://www.postgresql.org/ftp/odbc/versions/msi/
Проверял на версии PostgreSQL 9.0 и ODBC клиенте
http://wwwmaster.postgresql.org/download/mirrors-ftp/odbc/versions/msi/psqlodbc_09_00_0310.zip
Используются функции:
pg_total_relation_size
pg_table_size
pg_indexes_size
Количество записей берется из pg_class, имейте в виду данные обновляются там после VACUUM!
Комментарии и пожелания приветствуются.
Очень понравилась обработка. Давно собирался посмотреть величины таблиц, да так и несобрался. А тут всё супер удобно. Даже пожеланий никаких не нашлось 🙂 Благодарю!
Да спасибо, хорошая вещь, и главное удобная!
Хорошо, и вовремя:)
Обработка замечательная…а главное название подходящее
(1) ARL, мне тоже нравится
Да, хорошая вещь!
только почему-то не отображается значение имени метаданных:
8.2.14.519
sql 2005
плюс! нужная обработина! сейчас буду пробовать
Да, хорошая вещь!
только почему-то не отображается значение имени метаданных:
8.2.14.519
sql 2005
Не отображается в каждой строке метаданных? У себя в БД наткнулся на ситуацию, когда для существующей таблицы в SQL нет соответствия в метаданных 1С! Как это объяснить — видимо так работала платформа, сбой в каких то релизах, БД тянется еще начиная с версии 1С 8.0. В итоге с десяток таблиц типа «справочник» и несколько «документов» присутствуют только в виде физических таблиц MS SQL, функция ПолучитьСтруктуруХраненияБазыДанных(,Истина) не возвращает таблиц с такими именами!
(8)Да, не отображается в каждой строке метаданных!
1. Не работает в управляемом приложении
2. Хотелось бы табличные части видеть в составе своих объектов (например, в виде дерева, как в конфигураторе). И чтоб дополнительно размер родительской таблицы отображался с учетом дочерних объектов. И естественно, чтоб можно было выбрать как отображать дочерние таблицы, в составе родительских или отдельно.
3. Таблица не поддается анализу. Даже что бы выгрузить в Excel в удобоваримом виде, надо сделать несколько лишних движений. Напрягает.
И указанная БД MS Sql соответствует текущей используемой платформой, из которой запускаете обработку?
Объяснение нахожу только одно: конфигурация из которой запущена обработка и указанная БД в настройках — две различные базы данных!
При попытке подключения используя пользователя SQL с доменное авторизацией выдает ошибку, ну и не конектится:
Ошибка установки соединения: {ВнешняяОбработка.SQLБазомер.МодульОбъекта(6)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Login failed for user ‘DomenUser’.
При попытке подключения используя пользователя SQL с доменное авторизацией выдает ошибку, ну и не конектится:
Ошибка установки соединения: {ВнешняяОбработка.SQLБазомер.МодульОбъекта(6) }: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Login failed for user ‘DomenUser’.
Добавил NTLM-аутентификацию
если бы под 8.1 такое было.
http://infostart.ru/public/19463/
вот еще хорошая штука
спасибо автору 🙂 надо попробовать потестить
(11) Вот тут может быть!
запускал на платформе, отличной от той, на которой база.
Завтра проверю!
если бы под 8.1 такое было.
Да вроде нет препятствий перенести этот код в обработку созданную в 8.1.
Если не ошибаюсь, функция ПолучитьСтруктуруХраненияБазыДанных() в 8.1 существует, так что всй должно взлететь)
В мене помилка «Ошибка установки соединения: {ВнешняяОбработка.SQLБазомер.МодульОбъекта(12)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Ошибка входа пользователя «admin»», але коли включаю Аутентифікацію то все працює. З чим це може бути повязане?
(18) Вибачайте вже побачив аналогічне повідомлення.
(11) Точно, запустил на той платформе, на которой работает база,
и имя метаданных отображается
Спасибо!
Взвесил обработкой получилось 45,1 Гб, а mdf файл весит 69,7 Гб.
Можете объяснить?
Взвесил обработкой получилось 45,1 Гб, а mdf файл весит 69,7 Гб.
Можете объяснить?
Обработка возвращает физически занятый размер под структуры MS SQL внутри mdf файла (-ов). Сам mdf файл как правило всегда больше, и не отражает физически занятое пространство под структуры, для уменьшения можете использовать SHRINKDATABASE
http://msdn.microsoft.com/ru-ru/library/ms190488.aspx
Т.е в вашем случае SHRINKDATABASE выбросит пустое место из mdf и файл станет чуть больше 45,1 гб
Благодарю, сделаем, проверим.
А нет подобного для postgres?
А нет подобного для postgres?
Уже есть, качайте)
Может на СКД переписать?
Спасибо,как раз искал.
попробуем, спасибо
(0) Посмотрел обработку и не понял смысла ее появления, и чем она лучше моейАнализ размеров таблиц, метаданных, различная статистика для клиент-серверного (SQL) и файлового вариантов базы , ну кроме еще поддержки PostgreSQL. Моя же показывает все в удобном виде, написана на СКД, дает возможность показывать информацию по выбранным метаданным, а не только по всем, выводить информацию не только в килобайтах, но и в мегабайтах и гигабайтах, накладывать различные отборы, и просто выводимый вид гораздо более понятен. У одного вида метаданных может быть несколько таблиц, в моей обработке это сгруппировано, в данной же обработке выводится простыня, не упорядоченная даже по наименованию и типу метаданных. В общем я не понимаю ни смысла данной обработки и ее плюсов, ни плюсов за эту саму обработку. И даже немного обидно, потому что подавляющая часть времени мною был потрачена именно на удобность и приятность использования, здесь же автор вообще этим не заворачивался, и оказывается это никому собственно и не надо, народ проглотит все что угодно. Мда…
{ВнешняяОбработка.SQLБазомер.МодульОбъекта(79)}: Ошибка при вызове метода контекста (Execute)
Результат = objCmd.Execute();
по причине:
Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): ERROR: function pg_table_size(text) does not exist;
Error while executing the query
На какой версии PostgreSQL пробуете? На 9.x работает, возможно на более ранних нет функции pg_table_size
У нас PostgreSQL версии 8.4.3
Вещь хорошая, на MS SQL работает нормально, но PostgreSQL у нас ниже 9, стабильная для 1С 8.4.3-3.1C, так что подождем пока
Спасибо за обработку.
Спасибо, как раз то, что нужно
Для отображения метаданных (кого не работает) в нашем случае помогло привести записи в таблице в нижний регистр
Таблица = ПолучитьСтруктуруХраненияБазыДанных(,Истина);
//
для Каждого СтрокаТаб из Таблица цикл
СтрокаТаб.ИмяТаблицыХранения=НРег(СтрокаТаб.ИмяТаблицыХранения);
КонецЦикла;
//
Да и спасибо автору за полезную вещь
Интересная сервисная штука, даже для того, чтобы сопоставить таблицы бд — объектам конфигурации
Очень интересно. То есть она и сопоставляет таблицы? И вес показывает?
Спасибо за обработку. Именно сейчас ищем причину, по которой база перестала загружаться из dt архива. Во время загрузки вылетает с ошибкой. Размер таблицы превышает 4 гб. Вот нам срочно понадобилось определить, какая из таблиц так распухла.
спасибо большое !!!
(30) igor_aviant, В общем модуле закоментить строки 59,60 так:
//|pg_table_size(schemaname||’.’||tablename) / 1024 AS table_usage_kb,
//|pg_indexes_size(schemaname||’.’||tablename) / 1024 as index_usage_kb,
|0 AS table_usage_kb,
|0 as index_usage_kb,
Тогда такой ошибки не будет. А так в 8.4 нет такой функции pg_table_size
(29) Istur, не переживайте: у Вашей обработки и плюсов больше, и скачиваний )
Не хватает функции сравнения двух и более баз на предмет чего поменялось.
У нас вот база за последний месяц в два раза в размерах выросла.
Запустил в рабочей базе, запустил в копии месячной давности.
Вижу, регистр ВерсииОбъектов вышел на лидирующие позиции. Вспомнил, что месяц назад добавлял объекты для контроля версий. Собственно, на него и так думал, но после просмотра результатов обработки, подозрения подтвердились.
Однако, это по одному объекту стало понятно, а чтобы выявить какие еще объекты, к примеру, добавились в базе, придется в Excel выгружать и искать отличия ?
Очень помогла бы функция сравнения с подсветкой строк с добавленными и удаленными объектами. И возможность сортировки не только по размеру, но и по другим столбцам при клике на заголовок колонки.
Но это все хотелки, а за уже имеющееся огромное спасибо!
Очень помогло.
(29) Istur, не важно у кого информативнее, человек старался — делал. Пусть ваша более информативна — но может кому-то достаточно такой информации.
Обработку подключил, статистика собралась, но «Имя метаданных» пусто (PostgreSQL)! Что не так?
Неистово плюсую!
(45) В режиме совместимости 8.2.13 ряд метаданных (например, константы, регламентные задания) хранятся в одной общей таблице, поэтому их собственные имена в данном поле не отражаются. Возможно, у Вас такая ситуация.
(36)
На Postgre не отображались имена метаданных. Ваш способ помог исправить проблему.
На windows server 2016, база на PSQL, упорно не хочет видеть psql odbc, кто нибудь проверял на сервер 2016?
вот есть по-свежееhttps://infostart.ru/public/1093355/ отчетиком
MS SQL 13 (2016), win server 2016 — работает. Единственное, не выводилисьт имена метаданных — потому что «ИмяТаблицыSQL» теперь содержит «[dbo].[_Name]» вместо «_Name»; как следствие не срабатывет поиск
СтрокаДанные1С = Таблица.Найти(Запись.ИмяТаблицыSQL, «ИмяТаблицыХранения»);
Решается парой строк кода.