О чем молчит 1С (хранение оборотного регистра) #658727


#0 by KingDzen
Коллеги, добрый день! Крутую штуку обнаружил, на выяснение которой ушло несколько рабочих дней: Условие: 1С:Предприятие 8.2 (8.2.15.319) размер ее составляет 230 Гб после шринка. есть документ РеализацияТоваров, в нем три строки и он сделал три движения по регистру ПродажиКомпании. Выполняю код, чтобы очистить движекния по данному регистру: 1С показывает, что у этого документа нет движений по данному регистру. НО ЭТО ВРАНЬЕ!!! Движения есть! Правда 1С про них ничего нам не говорит. Видимо скрывает, чтобы сберечь наши нервы. Лезу на скуле в оборотную таблицу этого регистра _AccumRgTn6629 и вижу эти строки, но с нулевыми ресурсами. Эти движения абсолютно не влияют на обороты так как все ресурсы у них - нулевые. И все бы ничего, но они занимают место не хуже обычных движений. Индексы на эту таблицу тоже значительно больше, чем без них. К счастью сама 1С удаляет эти строки с случае рестуктуризации таблиц регистра. В моем случае это случилось после смены типа измерения с ДокументСсылка на ДокументСсылка.ЗаказПокупателя почти случайно. Не все изменения структуры регистра приведут к реструктуризации, но именно эти приводят точно. Можно еще использовать такую нереграментированную штуку : delete from _AccumRgTn6629 where  _Fld6620 = 0 and _Fld6621 = 0 and _Fld6622 = 0 and _Fld7477 = 0 но как ты понимаешь это является нарушением лицензионного соглашения 1С :) Ну и что с этого, спросишь ты меня. Да, ничего особенного, но эти действия позволили уменьшить размер нашей базы на 45 гигобайт! А также повысить скорость работы отчетов по продажам не десятки процентов. Все это сравнительно бесплатно и является безусловно "низко висящим фруктом". Одно действие приводит к огромной экономии дискового пространства, ускорению регламентного обслуживания базы и уменьшению времени выполнения отчетов. А у тебя есть оборотные регистры в конфигурации? :) Скажите, может я Америку открыл? Нигде не смог найти информацию о подобном поведении системы. Спасибо!
#0 by KingDzen
Коллеги, добрый день! Крутую штуку обнаружил, на выяснение которой ушло несколько рабочих дней: Условие: 1С:Предприятие 8.2 (8.2.15.319) размер ее составляет 230 Гб после шринка. есть документ РеализацияТоваров, в нем три строки и он сделал три движения по регистру ПродажиКомпании. Выполняю код, чтобы очистить движекния по данному регистру: 1С показывает, что у этого документа нет движений по данному регистру. НО ЭТО ВРАНЬЕ!!! Движения есть! Правда 1С про них ничего нам не говорит. Видимо скрывает, чтобы сберечь наши нервы. Лезу на скуле в оборотную таблицу этого регистра _AccumRgTn6629 и вижу эти строки, но с нулевыми ресурсами. Эти движения абсолютно не влияют на обороты так как все ресурсы у них - нулевые. И все бы ничего, но они занимают место не хуже обычных движений. Индексы на эту таблицу тоже значительно больше, чем без них. К счастью сама 1С удаляет эти строки с случае рестуктуризации таблиц регистра. В моем случае это случилось после смены типа измерения с ДокументСсылка на ДокументСсылка.ЗаказПокупателя почти случайно. Не все изменения структуры регистра приведут к реструктуризации, но именно эти приводят точно. Можно еще использовать такую нереграментированную штуку : delete from _AccumRgTn6629 where  _Fld6620 = 0 and _Fld6621 = 0 and _Fld6622 = 0 and _Fld7477 = 0 но как ты понимаешь это является нарушением лицензионного соглашения 1С :) Ну и что с этого, спросишь ты меня. Да, ничего особенного, но эти действия позволили уменьшить размер нашей базы на 45 гигобайт! А также повысить скорость работы отчетов по продажам не десятки процентов. Все это сравнительно бесплатно и является безусловно "низко висящим фруктом". Одно действие приводит к огромной экономии дискового пространства, ускорению регламентного обслуживания базы и уменьшению времени выполнения отчетов. А у тебя есть оборотные регистры в конфигурации? :) Скажите, может я Америку открыл? Нигде не смог найти информацию о подобном поведении системы. Спасибо!
#0 by KingDzen
Коллеги, добрый день! Крутую штуку обнаружил, на выяснение которой ушло несколько рабочих дней: Условие: 1С:Предприятие 8.2 (8.2.15.319) размер ее составляет 230 Гб после шринка. есть документ РеализацияТоваров, в нем три строки и он сделал три движения по регистру ПродажиКомпании. Выполняю код, чтобы очистить движекния по данному регистру: 1С показывает, что у этого документа нет движений по данному регистру. НО ЭТО ВРАНЬЕ!!! Движения есть! Правда 1С про них ничего нам не говорит. Видимо скрывает, чтобы сберечь наши нервы. Лезу на скуле в оборотную таблицу этого регистра _AccumRgTn6629 и вижу эти строки, но с нулевыми ресурсами. Эти движения абсолютно не влияют на обороты так как все ресурсы у них - нулевые. И все бы ничего, но они занимают место не хуже обычных движений. Индексы на эту таблицу тоже значительно больше, чем без них. К счастью сама 1С удаляет эти строки с случае рестуктуризации таблиц регистра. В моем случае это случилось после смены типа измерения с ДокументСсылка на ДокументСсылка.ЗаказПокупателя почти случайно. Не все изменения структуры регистра приведут к реструктуризации, но именно эти приводят точно. Можно еще использовать такую нереграментированную штуку : delete from _AccumRgTn6629 where  _Fld6620 = 0 and _Fld6621 = 0 and _Fld6622 = 0 and _Fld7477 = 0 но как ты понимаешь это является нарушением лицензионного соглашения 1С :) Ну и что с этого, спросишь ты меня. Да, ничего особенного, но эти действия позволили уменьшить размер нашей базы на 45 гигобайт! А также повысить скорость работы отчетов по продажам не десятки процентов. Все это сравнительно бесплатно и является безусловно "низко висящим фруктом". Одно действие приводит к огромной экономии дискового пространства, ускорению регламентного обслуживания базы и уменьшению времени выполнения отчетов. А у тебя есть оборотные регистры в конфигурации? :) Скажите, может я Америку открыл? Нигде не смог найти информацию о подобном поведении системы. Спасибо!
#1 by shuhard
[НО ЭТО ВРАНЬЕ!!! Движения есть! Правда 1С про них ничего нам не говорит. Видимо скрывает, чтобы сберечь наши нервы]
#2 by KingDzen
С нервами у меня порядок. Я надеюсь получить комментарии по теме.
#3 by Lexusss
Баянист. Как тебя подпускают к боевым конфам? Гораздо прикольнее, что такие фантомные записи могут повлиять на RLS :) И да, они не только в регистре оборотов, но и в накопления прут.
#4 by Широкий
Таблицу итогов регистра накоплений еще глянь.. Инфаркт обеспечен
#5 by KingDzen
Почему баянист? Проблема давно озвучена? Сам не нашел, подскажи, пожалуйста, где читать матчасть про это?
#6 by НафНаф
_AccumRgTn6629 Это итоги оборотов, к таблице движений не имеет отношения
#7 by Широкий
На инфостарте тема была.. и прилагалась обработка. Стоимость удаления записи дороже апдейта.. вот записи и остаются (хотя и нудевые)
#8 by zmaximka
прикольно
#9 by KingDzen
В регистре накопления тоже видел, но там такого массового безобразия в плане поглощения места на диске нет, так как ежемесячно рассчитываются итоги. В случае же оборотного регистра помогает только реструктуризация (т.е. пересоздание средствами 1С) оборотной таблицы регистра. Или есть еще какой-то способ?
#10 by KingDzen
Да, я так и понял, что дешевле не удалять. Но в моем случае это привело к тому, что база содержит информацию, которая не используется системой (около 17% от размера базы это не шутки) и вредит быстродействию
#11 by KingDzen
_AccumRgTn6629 это таблица, где хранятся обороты по месяцам, можно конечно и как вы сказать, что она содержит итоги.
#12 by Нога
Это рваный баян же, В таблицах ИТОГОВ не удаляются физически записи, ставится 0, только после пересчета итогов они уходят. Неприятные последствия РЛС может вызвать на эти регистры, данных вроде нет, а нарушение прав доступа
#13 by Зойч
поминится в 81 подобный глюк был для регистров остатков
#14 by KingDzen
Пересчет итогов никак не исправляет фантомные записи ОБОРОТНОГО регистра. Т.е. он растет безконтрольно в процессе работы конфигурации.
#15 by Carpintera
это происходит именно при программной очистке регистра? И что это за очистка аж на 45 гигов?
#16 by Нога
не верю... как итоги пересчитываешь? из пофигуратора?
#17 by Нога
Сжатие данных там же делал?
#18 by KingDzen
Это происходит и при программном удалении через обработку и в случае удаления проведенного документа у которого стоит Удалять движения автоматически при проведении. Я проверил и был немало удивлен.
#19 by Kreont
Ну хз. вроде ж нормальное поведение любой БД при удалениях всередине таблиц. А шринк мссюл это тоже что вакуум для постгреса? Если да, то неверится что шринк часть таких записей не уберет :(
#20 by KingDzen
Нет не по конфигуратору, а через предприятие. А есть разница? Шринк делал конечно же, но средствами скуля. Опять же есть разница?
#21 by Нога
наверняка есть. я бы проверил, на маленькой базе, чтоб часы не ждать
#22 by Нога
Для скуля строки в таблицах с 0 не есть лишние записи, он их не сожмёт. А вот для 1с разница есть
#23 by GROOVY
Открытие века.... Ты еще глянь как удаление файлов происходит... Ты себе представь как удалять строки из середины таблицы! Сколько это займет времени?
#24 by KingDzen
Не уберет, конечно! С точки зрения скуля это АБСОЛЮТНО нормальные записи. Скуль же не знает, что записи с пустым набором всех ресурсов абсолютно бесполезны с прикладной точки зрения.
#25 by KingDzen
Да я не против, я только за! :) Меня волнует другой вопрос: каким регламентным заданием на обслуживание 1С я могу периодически избавляться от таких записей? Два способа я отразил в посте. Может кто-то знает более красивый вариант, о котором я не знаю?
#26 by Нога
в конфигураторе в ТИИ есть сжатие таблиц
#27 by KingDzen
Спасибо, за совет, действительно есть разница между SHRINK  и Сжатие таблиц в конфигураторе 1С?
#28 by Нога
есть, SHRINK FILE вобще свободное место просто освобождает
#29 by KingDzen
Кстати, задача стоит уменьшение размера базы данных не типовой КИС на основании УТ. Начал ее решать запуском скрипта, чтобы узнать какие объекты отъедают больше всего места:    CREATE TABLE #t([имя таблицы] varchar, [строк] varchar, [зарезервировано] varchar, [всего данных] varchar, [размер индексов] varchar, [свободно] varchar);        exec sp_msforeachtable N'exec sp_spaceused ''?''';        SELECT * FROM #t where [имя таблицы] like N'%RgTn%' ORDER BY CONVERT(bigint, REPLACE([всего данных], ' KB', '')) DESC;        DROP TABLE #t; в топе оказалась как раз оборотная таблица _AccumRgTn6629
#30 by Вуглускр1991
лицензионное соглашение это как девочка на фронте в автосервисе, красивая, ухоженная, чай наливает. в гараже все немного иначе.
#31 by KingDzen
До удаления фантомных записей она занимала 54 гигабайта (оборотная таблица и индекс) или 83 миллиона записей. После удаления эта таблица стала весить 20 гигабайт или 34 миллиона записей.
#32 by KingDzen
улыбнуло, коллега
#33 by Fragster
А зачем там ".Прочитать; .Очистить;"?
#34 by Fragster
гигобайт, круто!
#35 by KingDzen
Для надежности. Я знаю, что хватает и Записать.
#36 by Fragster
вообще об этом написано в умных книжках и куче статей по инету. достаточно сделать пересчет итогов и все пройдет
#37 by NcSteel
ТОгда нужно было еще и запрос сделать или удалять по каждой отдельной записи.
#38 by KingDzen
В конфигураторе пересчитать итогов?
#39 by ssh2006
> Пересчет итогов никак не исправляет Вот это странно и сомнительно
#40 by KingDzen
Коллега, это не по теме :)
#41 by ковер
закладка
#42 by KingDzen
Может все-таки есть разница между пересчитать итоги в конфигураторе и в предприятии? Тогда да - мы никогда не рассчитывали итоги в конфигураторе.
#43 by ssh2006
"Зачем в 1С нужно периодически пересчитывать итоги по регистрам?"
#44 by НафНаф
набросал
#45 by KingDzen
отлично коллега, я на это намекал в посте
#46 by KingDzen
Верно, но в статье говорится только про остатки. Но оборотный регистр хоть и имеет ту же самую проблему фантомных записей - имеет и свою специфику. А именно пересчет итогов для него не устраняет фантомный записи!
#47 by Нога
да проверь уже! на тощей базе. в пофигураторе Пересчет, потом сжатие там же
#48 by KingDzen
Проблема точно решается реструктуризацией таблицы. Вызывать из конфигуратора - слишком роскошно для меня. База большая и потребуется большое время для выполнение этой операции для всех таблиц - несколько суток точно. Есть более дешевый по времени вариант - вызвать реструктуризацию только таблицы проблемного регистра. Один из способов я описал в посте.
#49 by KingDzen
ща проверю на тестовой и отпишусь
#50 by ssh2006
> пересчет итогов для него не устраняет фантомный записи! Сложно в это поверить.
#51 by KingDzen
только что проверил - пересчет итогов через 1С Предприятие управление итогами - проблему НЕ РЕШАЕТ для оборотных регистров. Оно и так было понятно, так как мы это делаем каждый месяц - все бы давно обрезалось. Для регистров ОСТАТКОВ шлак исчезает. Сейчас запустил пересчитать итоги через конфигуратор. Жду.
#52 by Нога
сдаётся мне, что в режиме предприятия нельзя указать оборотные регистры для пересчета итогов. Из конфигуратора надо
#53 by bodri
В конфигураторе есть выбор? Неожиданно.
#54 by Нога
в конфигураторе пересчитывает абсолютно ВСЁ, выбрать нельзя
#55 by KingDzen
Задумался конфигуратор, что-то он другое делает по сравнению с пересчетом итогов в предприятии. Видимо разница в этих режимах все же есть. Ждем окончания, что же будет с фантомными записями? :)
#56 by ptiz
Да тьфу на вас, навели панику. У меня нулевых записей оказалось 0.0001 % от общего числа.
#57 by bodri
меня тоже заинтересовало. жду вместе с тобой
#58 by viktor_vv
Что ж они тебя так зацепили :)? Эта фигня еще с 7.7 тянется, там же на ДБФ еще удаленные записи справочников физически не удалялись.
#59 by Нога
да понятно что другое, минимум - за весь период считает итоги, а не за указанный, ну и фантомчики удаляет может в обротных. Тут я не уверен, возможно это сделает сжатие таблиц БД
#60 by Fragster
ТИИ пересчет итогов тоже спасет. Но можно и в предприятии.
#61 by KingDzen
как это ты так быстро определил?
#62 by ptiz
Обработкой прошелся по всем таблицам SQL
#63 by Нога
пересчет итогов и сжатие давно делали?
#64 by KingDzen
Можно обработку в студию?
#65 by ptiz
Не поверишь, никогда не делали. На базе в почти 300гб не возникает такого желания :)
#66 by Нога
Да я сейчас тоже занимаюсь в плотную чисткой 150-ти гиговой базы, от помеченых на удаление, чистки регистров кривых, и этой темой тоже надо будет занятся
#67 by KingDzen
во-во у меня тоже нет желания. Единственно что делаем пересчет итогов в предприятии раз в месяц и шринк средствами скуля.
#68 by KarpovDeniska
итоги пересчитай
#69 by Нога
абсолютно ценный совет, каждый считает своим долгом это тут сказать?)
#70 by KingDzen
не говори, коллега :)
#71 by ILM
"Я вот не трогаю Гондурас, он и не беспокоит" (с). Если прочитать про механизмы работы SQL серверов, то становится понятно почему так поступает 1С. Удалять и перестраивать индексы и статистику, освобождать память и страницы в он-лайне выходит ох, как затратно. У вас что уже место кончилось? или тормоза повылазили? Кароче, я бы световал не чесать "Гондурас".
#72 by KarpovDeniska
ну нужно же помочь человеку ))
#74 by KingDzen
Коллеги, запустил на копии рабочей базы пересчет итогов в режиме конфигуратор. Так вот, висит уже полчаса на регистре, который на порядок меньше, чем сабжевый регистр. Интересно, сколько времени должно пройти для переиндексации всех объектов конфигурации и завершится ли она удачно. Возможно мой вариант с реструктуризаций регистра самый разумный вариант в данном случае. Отпишусь в любом случае.
#75 by KingDzen
спасибо за обработку, думаю многим пригодится
#76 by bodri
спасибо за обработку. 0,17% (44 056/25 279 560) не критично)
#77 by Chai Nic
Вопрос. А при выгрузке/загрузке через dt эти нулевые записи сохраняются?
#78 by ssh2006
Думаю, да, т.к. при загрузке итоги не пересчитываются
#79 by Нога
почти всё ТИИ происходит при загрузке выгрузке, думаю что удалятся
#80 by Живой Ископаемый
2 нет, не сохраняются
#81 by ssh2006
незнаю насчет сохранения нулевых записей, а про пересчет итогов при загрузке из dt задавал вопрос на V8@1c.ru, ответили - не пересчитываются
#82 by ssh2006
* но сам не проверял
#83 by Axel2009
да обработка проверил. регистр продажи записей 2 400 000. хотя смотрю записей через count(*) там 5 лямов... хыхы
#84 by Axel2009
+ обработка показывает наличие нулевых записей в основной таблице, а не в итогах. так что переделайте ее быстрее :)
#85 by ssh2006
Посмотрел код обработки - подтверждаю
#86 by ssh2006
переделать несложно
#87 by be-may
спасибо. не знала.
#88 by Фрэнки
я проверял сравнивая размеры файловой версии базы. При загрузке из дт размер практически такой же. При ТИИ (все галки) в моем случае размер снизился на 25% процентов.
#89 by Нога
хм, а то что в клиент-серверной в конфигураторе ТИИ нет "Сжатие таблиц БД" кто замечал? всегда думал что есть...)
#90 by Fragster
делай в скуле, будь мужиком
#91 by Фрэнки
а это чтоб шринк не забывали делать
#92 by Нога
я к тому что значит только Пересчет итогов уберёт , была мысль что это сжатие сделает. Шринк скуля их не убирает
#93 by Никола_Питерский
Уважаемые мегагуру специалисты, подскажите нормально что этот запрос столько выполняется ?? Объект = Хозрасчетный ИтогиПоСчетамССубконто4 Команда = SELECT COUNT(*) FROM _AccRgAT410090 Начало выполнения: 29.03.2013 15:36:56 Окончание выполнения: 29.03.2013 15:38:03
#94 by Chai Nic
"Шринк скуля их не убирает" Ну это логично.. с его точки зрения это обычные строки таблиц, которые он обязан хранить, пока приложение не захочет ух удалять. То, что они хранят бесполезную информацию, известно на прикладном уровне, но на уровне хранения данных они вполне не пустые.
#95 by ptiz
Всем большое спасибо за указание на ошибку, исправил. Действительно, в итогах много нулевых.
#96 by ptiz
Осталось select заменить на delete и радоваться :)
#97 by Никола_Питерский
Да у тебя там в найти косяк был только по основной таблице долбило )))
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С