|
v7: 1SBLOB.dbf незаметно подкрался к 2 Гб | ☑ | ||
---|---|---|---|---|
0
victuan1
21.04.20
✎
20:35
|
Есть какой готовый внешний отчет, который бы проанализировал бы справочники и документы и вывел бы долю вклада каждого объекта метаданных в рост строк неограниченной длины?
Базу обрезали недавно, но она всё равно быстро выросла. Пока грешу на служебные справочники Контуровского обмена EDI, встроенного в конфигурацию. Проверил объекты Обмена с Меркурием - они не сильно "вложились" в рост строк неограниченной длины (я постарался по максимуму ограничить применение неогр. строк). Но вот контуровская поделка в этом плане мне совсем не нравится. Упаковку базы и проверку физ.целостности через ТИИ тоже делал - вообще никак не изменило объем базы. |
|||
1
victuan1
21.04.20
✎
20:38
|
Пока запустил на ночь вот эту поделку http://1clancer.ru/catalog/1595 - вроде находит какие-то лишние записи. Посмотрю утром результат.
|
|||
2
victuan1
21.04.20
✎
20:41
|
За полтора часа обработала миллион записей из 20 млн - есть мнение, что до утра не выполнится ;)
|
|||
3
Курцвейл
21.04.20
✎
20:55
|
(0) Напиши сам запрос. Увидишь какие объекты и их реквизиты дали наибольший вклад в размер.
Точно не помню, но неограниченная длина автоматом резервирует какой объем. Получается что неограниченная длина строки с " " реально занимает больше информации, чем 1 символ. |
|||
4
Курцвейл
21.04.20
✎
20:58
|
Еще есть вариант - выгрузить/загрузить БД. Это операции оптимизирует таблицы dbf и удалит пустые записи в 1SBLOB
|
|||
5
Фрэнки
21.04.20
✎
23:10
|
но там же 2 ГБ всего - если на одну запись приходится 1024 байта, то общее число будет 2 млн всего. Что-то там о 20 млн, т.е. по 100 байт в среднем на каждую запись?
|
|||
6
vde69
21.04.20
✎
23:19
|
20 лямов в записи ОДНОЙ таблице и Вы работаете с файловой 7.7 ? извращенцы... я уж молчу про переход на 8.3, но могли-бы хотя бы на SQL переползти...
|
|||
7
Злопчинский
21.04.20
✎
23:57
|
В блобе стрка неограниченная хранится блоками фиксированной длины, то ли по 80 то ли по 60 байт.
|
|||
8
Гость из Мариуполя
гуру
22.04.20
✎
00:45
|
по 80
|
|||
9
victuan1
22.04.20
✎
02:57
|
(3) Это всё понятно. Ищется готовый отчет, чтобы время сэкономить.
(6) Но восьмерка же еще сырая, как на нее переходить? ;) Второй по размеру файл дбф - всего 400 МБ. Надо с блобом разобраться, а не сломя голову на SQL переходить. (2) За ночь обработалось 8 млни из 20 - прервал. Попробую на копии выгрузку/загрузку базы. Параллельно голову ломаю над контуровским справочником КонтурEDI_Сообщения - не нравится мне его структура с кучей строк неогр. длины. |
|||
10
victuan1
22.04.20
✎
04:42
|
Интересно, если не удастся существенно уменьшить БЛОБ, то поможет ли "вирт" Через раз отображаются данные и некорректно выполняются обработки ?
|
|||
11
Провинциальный 1сник
22.04.20
✎
07:53
|
Переходите на sql-версию, там такого ограничения нет.
PS Что-то мне помнится, в начале двухтысячных было какое-то решение, которое эмулировало dbf для 1с через другую СУБД, при этом отсутствовали ограничения индексов в 2 Гб. |
|||
12
Djelf
22.04.20
✎
08:57
|
(9) Тю. КонтурЕДИ... они же все сообщения в длинные строки засовывают и никогда не удаляют. Грохни там все, кроме последнего месяца, все и исправится.
|
|||
13
Злопчинский
22.04.20
✎
09:01
|
(12) надо просто обработку для 1SBLOB наваять, которая возьмет id записей и распихает их в таблицу по типам и видам обьектов с подсчетом количества Кб по каждому типу-виду + по какому реквизиту...
как из 9-ти символьного ида получить тип и вид объекта? |
|||
14
ДенисЧ
22.04.20
✎
09:06
|
(13) Из 9исимвольного никак. Но в блобе должен быть ещё один ид, типа.
Под рукой нет, не помню. |
|||
15
mishaPH
модератор
22.04.20
✎
09:09
|
за запихивание чего либо в длинные строки бить палками нежадно
|
|||
16
Злопчинский
22.04.20
✎
09:09
|
(14) если из 9-ти симольного никак, то как 1Сина знает - куда подтягивать?
#=============================================================================== #==TABLE no 7 : Длинные строки # Name |Descr |Type[A/S/U]|DBTableName|ReUsable T=1SBLOB |Длинные строки |A |1SBLOB |1 #-----Fields------- # Name |Descr |Type|Length|Precision F=FIELDID |Field Id |C |4 |0 F=OBJID |Obj Id |C |9 |0 F=BLOCKNO |Block Number |N |4 |0 F=BLOCK |Block |C |80 |0 #----Indexes------ # Name |Descr |Unique|Indexed fields |DBName I=MAIN | |0 |FIELDID,OBJID,BLOCKNO |MAIN |
|||
17
Djelf
22.04.20
✎
09:14
|
(13) Нет, просто грохнуть и все. У них есть в каталоге КонтурEDI_ФормаСервис_УдалениеСообщений.ert
|
|||
18
ДенисЧ
22.04.20
✎
09:15
|
(16) По метаданным?
|
|||
19
Злопчинский
22.04.20
✎
09:24
|
(18) ну так как по метаданным?
открывается прогой документ. с полем "Комментарий" - как подтягиваются записи из блоба? OBJID - 9 символов - по нему система понимает какая запись в файле относится к этому документу? OBJID - уникальный в пределах всей базы? |
|||
20
vde69
22.04.20
✎
10:33
|
ddl Ромикса подключали? на память уже непомню, она вроде до 3х(или до 4х) гигов позволяет файлы юзать
|
|||
21
MarySue
22.04.20
✎
10:44
|
(9) а зачем вы храните сообщения в длинных строках справочника?
Для файловой базы это моветон! В модуле Контур.EDI давно уже есть возможность держать их во внешнем хранилище (в базе SQLite). https://ibb.co/DQzpjKN |
|||
22
MarySue
22.04.20
✎
10:57
|
Ну и да, прав (12).
Нужно удалить старые сообщения сервисной обработкой КонтурEDI_ФормаСервис_УдалениеСообщений.ert (оставить только текущий год). И затем сделать упаковку таблиц через конфигуратор. |
|||
23
Djelf
22.04.20
✎
13:36
|
(0) Не было такого отчета. Теперь есть. Требует 1с++ и 1sqlite.
https://gyazo.com/47dad00bfe9b8e8e5ec8bff7c195ddb4
|
|||
24
Cthulhu
22.04.20
✎
14:46
|
// (16): ня.
Функция ПолучитьОбъектПоИлВнутреннегоПредставления( Знач ИлВнутреннегоПредставления , Знач тБазаОЛЕ="") Экспорт Перем _Объект; Если СтрДлина(ИлВнутреннегоПредставления)=24 Тогда Если Лев(ИлВнутреннегоПредставления,1)="T" Тогда // Счет - составляется по-другому _Объект="{""T"",""0"",""0"",""0"",""0"",""0"","""+Сред(ИлВнутреннегоПредставления,2)+"""}"; Иначе//Если Лев(ИлВнутреннегоПредставления,1)<>"T" Тогда _Объект="{"""+Лев(ИлВнутреннегоПредставления,1)+""",""0"",""0"",""" +Сред(ИлВнутреннегоПредставления,2,10)+""",""0"",""0"",""" +Сред(ИлВнутреннегоПредставления,12)+"""}"; КонецЕсли; Если ТипЗначенияСтр(тБазаОЛЕ)="OLE" Тогда _Объект=тБазаОЛЕ.EvalExpr("ЗначениеИзСтрокиВнутр("""+СтрЗаменить(_Объект,"""","""""")+""")"); Иначе//Если ТипЗначенияСтр(тБазаОЛЕ)<>"OLE" Тогда _Объект=ЗначениеИзСтрокиВнутр(_Объект); КонецЕсли; КонецЕсли; Возврат(_Объект); КонецФункции //ПолучитьОбъектПоИлВнутреннегоПредставления Функция ПолучитьОбъектПоИдБазыДанных9( Знач ИдБазыДанных9 , Знач тБазаОЛЕ="") Экспорт Возврат(ПолучитьОбъектПоИлВнутреннегоПредставления( Лев(ИдБазыДанных9,1)+Формат(СокрЛП(_StrToId(Сред(ИдБазыДанных9,2,6))),"Ч10.0") +Формат(СокрЛП(_StrToId(Сред(ИдБазыДанных9,8,6))),"Ч10.0")+Прав(ИдБазыДанных9,3),тБазаОЛЕ)); КонецФункции //ПолучитьОбъектПоИдБазыДанных9 |
|||
25
victuan1
22.04.20
✎
15:23
|
СписокFIELDIDДляОбработки=СоздатьОбъект("СписокЗначений");
ТаблицаФайлДИД=СоздатьОбъект("ТаблицаЗначений"); ТаблицаФайлДИД.НоваяКолонка("IDFIND"); ТаблицаФайлДИД.НоваяКолонка("FIELDID"); ТаблицаФайлДИД.НоваяКолонка("OBJID"); ТаблицаФайлДИД.НоваяКолонка("Содержание"); ИмяДокумента=""; ИмяРеквезита=""; Попытка глМД = СоздатьОбъект("MetaDataWork"); Исключение Если ЗагрузитьВнешнююКомпоненту("1cpp.dll")=1 Тогда глМД = СоздатьОбъект("MetaDataWork"); КонецЕсли; КонецПопытки; Для к = 1 По Метаданные.Справочник() Цикл Для сч = 1 По Метаданные.Справочник(к).Реквизит() Цикл Если (Метаданные.Справочник(к).Реквизит(сч).Тип = "Строка") И (Метаданные.Справочник(к).Реквизит(сч).Длина = 0) Тогда Состояние("Справочник."+Метаданные.Справочник(к).Идентификатор+" Реквизит: "+Метаданные.Справочник(к).Реквизит(сч).Идентификатор); Ид = Прав(_IDToStr(глМД.ИДРеквизитаСправочника(Метаданные.Справочник(к).Идентификатор,Метаданные.Справочник(к).Реквизит(сч).Идентификатор)),4); СписокFIELDIDДляОбработки.ДобавитьЗначение(СокрЛП(Ид),СокрЛП(Ид)); ИмяСправочника=Метаданные.Справочник(к).Идентификатор; ИмяРеквезитаС=Метаданные.Справочник(к).Реквизит(сч).Идентификатор; Спр=СоздатьОбъект("Справочник."+ИмяСправочника); //Если ИмяСправочника = "аисЗапросыМеркурий" Тогда // продолжить; // Предупреждение(ИмяСправочника) //КонецЕсли; Спр.ВыбратьЭлементы(0); Пока Спр.ПолучитьЭлемент()=1 цикл Если ПустаяСтрока(Спр.ПолучитьАтрибут(ИмяРеквезитаС))=0 тогда ТаблицаФайлДИД.НоваяСтрока(); ТаблицаФайлДИД.FIELDID=Ид; СписокСпр=СоздатьОбъект("СписокЗначений"); СписокСпр.ДобавитьЗначение("",Спр.ТекущийЭлемент()); СписокСпр.ПолучитьЗначение(1,id); ТаблицаФайлДИД.OBJID=_IdToStr(id); ТаблицаФайлДИД.IDFIND=СокрЛП(ТаблицаФайлДИД.FIELDID)+СокрЛП(ТаблицаФайлДИД.OBJID); ТаблицаФайлДИД.Содержание=Спр.ПолучитьАтрибут(ИмяРеквезитаС); КонецЕсли; КонецЦикла; Сообщить("Справочник."+Метаданные.Справочник(к).Идентификатор+" Реквизит: "+Метаданные.Справочник(к).Реквизит(сч).Идентификатор+" FIELDID "+Ид,"i"); КонецЕсли; КонецЦикла; КонецЦикла; Для к = 1 По Метаданные.Документ() Цикл Для сч = 1 По Метаданные.Документ(к).РеквизитШапки() Цикл Если (Метаданные.Документ(к).РеквизитШапки(сч).Тип = "Строка") И (Метаданные.Документ(к).РеквизитШапки(сч).Длина = 0) Тогда Состояние("Докумет."+Метаданные.Документ(к).Идентификатор+" Реквизит: "+Метаданные.Документ(к).РеквизитШапки(сч).Идентификатор); Ид = Прав(_IDToStr(глМД.ИДРеквизитаШапки(Метаданные.Документ(к).Идентификатор,Метаданные.Документ(к).РеквизитШапки(сч).Идентификатор)),4); СписокFIELDIDДляОбработки.ДобавитьЗначение(СокрЛП(Ид),СокрЛП(Ид)); ИмяДокумента=Метаданные.Документ(к).Идентификатор; ИмяРеквезита=Метаданные.Документ(к).РеквизитШапки(сч).Идентификатор; Док=СоздатьОбъект("Документ."+ИмяДокумента); Док.ВыбратьДокументы(); Пока Док.ПолучитьДокумент()=1 цикл Если ПустаяСтрока(Док.ПолучитьАтрибут(ИмяРеквезита))=0 тогда ТаблицаФайлДИД.НоваяСтрока(); ТаблицаФайлДИД.FIELDID=Ид; СписокСпр=СоздатьОбъект("СписокЗначений"); СписокСпр.ДобавитьЗначение("",Док.ТекущийДокумент()); СписокСпр.ПолучитьЗначение(1,id); ТаблицаФайлДИД.OBJID=_IdToStr(id); ТаблицаФайлДИД.IDFIND=СокрЛП(ТаблицаФайлДИД.FIELDID)+СокрЛП(ТаблицаФайлДИД.OBJID); ТаблицаФайлДИД.Содержание=Док.ПолучитьАтрибут(ИмяРеквезита); КонецЕсли; КонецЦикла; Сообщить("Докумет."+Метаданные.Документ(к).Идентификатор+" Реквизит: "+Метаданные.Документ(к).РеквизитШапки(сч).Идентификатор+" FIELDID "+Ид,"i"); КонецЕсли; КонецЦикла; КонецЦикла; |
|||
26
victuan1
22.04.20
✎
15:35
|
(21) Молодцы, если реализовали возможность внешней БД на SQLite, но вот только у меня версия еще новее чем на скрине (1.03.001.331 СТ), но такой опции почему-то нет.
|
|||
27
victuan1
22.04.20
✎
16:30
|
(23) Отлично! Вот что у меня получилось https://ibb.co/348CKWv
Теперь понятно, что нужно грохнуть справочник Контур.EDI |
|||
28
victuan1
22.04.20
✎
17:15
|
Ну вот, БЛОМ получился 370 Мб, можно жить дальше.
|
|||
29
victuan1
22.04.20
✎
17:16
|
*БЛОБ
|
|||
30
victuan1
22.04.20
✎
17:17
|
Но по расчету должен был стать 39 Мб, возможно остался мусор, пробую выгрузку-загрузку теперь.
|
|||
31
victuan1
22.04.20
✎
17:48
|
(30) Не помогло, размер файла практически не изменился.
|
|||
32
Cthulhu
22.04.20
✎
18:03
|
(31): натрави мерялку еще раз - посмотри откуда там столько теперь
|
|||
33
victuan1
22.04.20
✎
18:10
|
(32) Я понял, забыл что я же не весь справочник Контура грохнул, оставил записи за 2020 год. Всё нормально.
|
|||
34
victuan1
22.04.20
✎
18:11
|
(21) Где можно получить обработку Контура, в которой реализовано возможность держать БД во внешнем хранилище (в базе SQLite)?
|
|||
35
MarySue
23.04.20
✎
00:22
|
(26) по сути, у тебя версия 1.03.001.33.1
В последнем разряде третий знак - номер хотфикса. То есть, после релиза 1.03.001.33 выпустили хотфикс №1. Такая раньше была нумерация, но её поменяли полгода или год назад. Теперь там семантическое версионирование https://semver.org/lang/ru/ Сейчас последняя версия 1.7.3. |
|||
36
MarySue
23.04.20
✎
01:43
|
(34) да как обычно, звонишь на ТП, называешь свою организацию, говоришь что надо обновиться, они скинут обновление
в новых версиях можно обновиться прямо из интерфейса по нажатию кнопки, но у тебя старая, нужно вручную ставить распакуешь архив и скопируешь в него папку с настройками из старого модуля, вот и все дела |
|||
37
MarySue
23.04.20
✎
01:48
|
или может не звонить, а написать им надо, как вы там связываетесь обычно с ними
|
|||
38
victuan1
23.04.20
✎
06:39
|
(37) Уже написал, получил обновление.
|
|||
39
victuan1
23.04.20
✎
06:41
|
(36) Прямо из интерфейса обновиться не получится, т.к. я модуль адаптировал для нашей нетиповой конфигурации (переписанной в хлам Бух 4.5). Надо будет опять все правки вручную накатывать.
|
|||
40
Волшебник
модератор
23.04.20
✎
07:34
|
Семёрка ещё сырая...
|
|||
41
Злопчинский
23.04.20
✎
09:59
|
(40) зато вкусная, натурпродукт... а некоторые суррогаты в красивой обертке только едят... и ругаются что тяжесть в желудке...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |