) а разработчики платформы тут не причем, это довольно известное архитектурное решение, не удалять "нулевые" записи. Я бы даже сказал что это давняя "священная война".
Тут самое главное понять что запись с нулевым количеством в итоге, совершенно не означает что эта запись не нужна.
При проектировании реляционных СУБД считается (считалось) что операции CRUD (Create, Read, Update, Delete) по затратам ресурсов распределяются следующим образом
1. Легкие: Read, Update
2. Средние: Create
3. Тяжелая: Delete
И исходя из логики поведения объекта Регистр, который меняется часто; и из-за больших затрат на удаление записей, существует позиция что:
запись итога не имеет смысла удалять синхронно в момент возникновения нулевого итога, потому что "ноль" не означает "NULL" и потому что велика вероятность того что следующая транзакция "захочет" увеличить или уменьшить итог и он станет ненулевым и нам необходимо будет понести затраты еще и на операцию вставки.
отсюда и посыл, что записи с нулевым итогом имеет смысл удалять асинхронно, то есть в определенный момент времени - но опять же неизвестно как определить этот самый "определенный момент". Такое определение должно лежать на ответственных за приложение - чаще всего как мы знаем пересчет итогов возникает в один момент времени при закрытии периодов учета и подается как некая подготовительная процедура. Вот тут и кроется проблема о которой давно известно - бизнес-задача Закрытие периода не является задачей обеспечения технической стабильности и бизнес иногда может на неё "забить".
У меня в практике была таблица с 400 миллионами записей с нулевым итогом.
И вот тут я могу сказать что разработчики платформы слегка "недочлись" (от слова "недочет") - дело в том что согласно вышеописанному архитектурному решению явно становится понятно, что:
Удалять записи с нулевым итогом нужно по тем ключам (комплектам измерений), по которым длительное время не было операций UPDATE. А этого функционала в платформе нет - есть только глобальный пересчет. В крупных конторах это решается SQL Job"ом выполняющем примерно следующую работу:
1. найти 1 комплект ключей (измерений) по которому не было движений за последний месяц и которые на данный момент нулевые
2. по данному комплекту измерений удалить запись из таблицы итогов
обычно данный Job запускается раз в 10 секунд, выбирается TOP 1 чтобы уменьшить время блокировки на затратную операцию удаления. Естественно в такие базы уже встроены и планы обслуживания по пересчету статистики и перестроению дефрагментированных индексов. В случаях когда таких "ненужных" записей очень много - то обычно уменьшают период запуска Job, либо отказываются от Регистра Итогов - потому что если у вас много ключей уходит в "ноль" и больше не используется, скорее всего у вас по данным ключам 2 операции движения "пришел" и "ушел" - зачем хранить такую информацию в регистре итогов совершенно не ясно.
Ну и про статистику тут тоже все изъезжено - масcовые операции CREATE И DELETE, а также UPDATE ключевого столбца ведут к нарушению дерева поиска по индексу (диапазона распределений ключа по страницам данных) - ну то есть в поисковом диапазоне 1..10 вполне себе может оказаться ключ со значением 23 - так SQL было удобней, потому страница данных была рядом со страницей ключа 7, а ключ 6 заместо которого встал ключ 23 окажется в диапазоне 100..134 - что тоже было удобней исходя из страниц данных. Пример на пальцах - но думаю суть отражает.
Вообще про статистику в момент массовых операций удобно понять следующее: когда вы делается массовую вставку данных SQL пытается вам помочь и оперирует близостью страниц данных для оптимизации вставки и совершенно забывает про оптимизацию операций чтения, где параметром является статистика (диапазоны поиска ключа в таблице - распределение ключа), поэтому чтобы после массовых вставок операции чтения были тоже быстрыми - необходимо восстановить работоспособность инструмента оптимизации чтения выполнив UPDATE STATS.
Да и еще забыл сказать - массовое удаление ведет к массовому возникновению фантомных записей: запись числится удаленной но место занимает - такая ситуация ведет к снижению производительности операций выборок типа SCAN (просмотр).
Vatkir; asylum90; Ганс; Anikrion; Albert_2008; Niberu; ser6702; MarchTomCat; olezhe; user598655_ilia-bers; klaus38; LordKim; lmnlmn; spenser123; Monte Carlo; acanta; zaharknyaz; Aggressorak; vesd; Ilya$n; Waanneek; SkyJack; letarch; aegoncharov; user777757; [email protected]; mytg; Gang031; ice-net; Goga1979; ChessCat; RegrZ; 1cprogr_nsk; Irwin; Paradise.87; KAV2; корум; Roman100; for_questions; ragimi; EugeneMIPT; kai nk; kitaevay; crosby; Noxie41; Alex_grem; nixel; new_user; tdml; NeviD; RimidalV; reboot; denis_aka_wolf; Flashill; marchenko.y; freya-khv; asg.aleks; denis13; adm134; TIS_08; mtv:); soulsteps; shalimski; Anesk; pisarevEV; Silenser; kwazi; engineer74; vadimlp77; Артано; dgolovanov; pchela751; aexeel; artbear; jif; Dmitryiv; Rego1337h; slavap; WizaXxX; IvanBoychuk123; fishca; Evil Beaver; Dach; RodinMax; sanches; mdmdvd; zakakvo; Krio2; jacksonp; adeich; afedor; MaximStav; DoctorRoza; Serg0FFan; sanfoto; kinazarov; Bukaska; theshadowco; oitnur; JesteR; detec; audion; laeg; morok1983; krv2k; Di-dog; sparklemal; awa; KAPACEB.AA; Chif13; sa1m0nn; CratosX; AllexSoft; galich; vlad.frost; igordynets; tormozit; vasiliy_b; vladir; meuses; Poopkeen; Andreynikus; Prad2002; dicwork; JohnyDeath; An-Aleksey; It-developer; rgrisha; Bronislav; 7o2uYXg; HolodZar; адуырщдв; AzagTot; Рамзес; DenisCh; PONOM; rеd80; w-divin; metmetmet; CheBurator; PressaLod; Diversus; sevushka; Aleksey.Bochkov; yuraos;
В процессе обновления, переносов данных из других конфигураций и даже в процессе повседневной работы возможны технические сбои при выполнении системных операций. В большинстве случае такие сбои выявляются и успешно обрабатываются, но в некоторых случаях они все-таки приводят к ошибкам. Такие ошибки чаще всего проявляются при обращении к итоговым данным. Например, в оборотно-сальдовой ведомости «не сходится» сальдо начальное, оборот и конечное сальдо или итоги. Для исправления данной ситуации требуется пересчет итогов.
Пересчет итогов может быть выполнен в режиме конфигуратора (Меню Администрирование - Тестирование и исправление).
В случае, если нет возможности запустить конфигуратор, то пересчет итогов может быть выполнен и из пользовательского режима. Для этого следует сделать следующие действия.
По кнопке «ОК» начнется пересчет итогов. После завершения пересчета итогов стандартные отчеты будут формироваться без ошибок.
Консультации по работе с программой 1С
Сервис открыт специально для клиентов, работающих с программой 1С разных конфигураций или находящихся на информационно-техническом сопровождении (ИТС). Задайте свой вопрос, и мы с удовольствием на него ответим! Обязательным условием для получения консультации является наличие действующего договора ИТС Проф. Исключением являются Базовые версии ПП 1С (8 версия). Для них наличие договора не обязательно.
Как остаточные, так и оборотные регистры накопления физически состоят из двух таблиц: таблицы движений и таблицы итогов. Таблица итогов содержит агрегированные по измерениям данные из таблицы движений, для более быстрого доступа к этим данным. Итоги по умолчанию существуют по месяцам, на первое число каждого месяца; для регистров остаточных отдельно хранятся еще и актуальные итоги, то есть итоги текущего месяца. Для каждого отдельно взятого регистра текущие итоги могут быть отключены.
В момент проведения документа-регистратора, формируется как запись в таблице движений, так и запись в таблице итогов, причем, если документ проводится прошедшим месяцем - то записей будет сделано по числу прошедших месяцев. То есть все прошлые итоги обновляются.
Для измерений регистра можно отключать использование итогов, это положительно сказывается на быстродействии базы:
Также, заметим, что есть две альтернативы - использование итогов либо использование агрегатов ; второй вариант более гибкий.
Вопрос 12.30 экзамена 1С:Профессионал по Платформе. Итоги для регистров накопления остатков:
Правильный ответ третий.
Вопрос 12.32 экзамена 1С:Профессионал по Платформе. При работе с регистром накопления с видом "Остатки" выключение итогов приводит к тому, что:
Правильный ответ второй. В случае включенных итогов, остатки доступны с периодичностью Месяц.
Вопрос 12.33 экзамена 1С:Профессионал по Платформе. При пересчете текущих итогов пользователем:
Правильный ответ второй, понятие итогов "текущего сеанса" не существует. А собственно пересчет итогов - это процедура перезаполнения таблиц итогов, т.к. со временем естественным путем в ней накапливаются строки с нулевыми значениями, что снижает быстродействие системы.
Вопрос 12.34 экзамена 1С:Профессионал по Платформе. При пересчете итогов пользователем:
Правильный ответ третий, см. предыдущий вопрос.
Вопрос 12.35 экзамена 1С:Профессионал по Платформе. При записи данных в регистр накопления существует возможность:
Правильный ответ третий - чем меньше таблиц, тем быстрее работает система. Отключение итогов производится программно:
Вопрос 12.36 экзамена 1С:Профессионал по Платформе. При работе с регистром накопления выключение текущих итогов приводит к тому, что:
См. вопрос 12.32.
Вопрос 12.37 экзамена 1С:Профессионал по Платформе. В режиме конфигуратора может быть выбрана следующая периодичность таблицы итогов регистра накопления:
Правильный ответ шестой - итоги всегда рассчитываются помесячно, на первой число следующего месяца.
Вопрос 12.39 экзамена 1С:Профессионал по Платформе. Как система 1С:Предприятие 8 может хранить итоги для оборотного регистра накопления?
Правильный ответ четвертый, итоги и агрегаты это альтернативные режимы работы.
Вопрос 12.40 экзамена 1С:Профессионал по Платформе. Выберите верное утверждение по отношению к регистрам накопления
Правильный ответ третий - таблица итогов строго одна для регистра. Таблиц агрегатов может быть создано множество.
Вопрос 12.44 экзамена 1С:Профессионал по Платформе. Что может отображаться в таблицах итогов регистров накопления?
Правильный ответ пятый, итоги - это основная таблица регистра, свернутая по измерениям.
Вопрос 12.45 экзамена 1С:Профессионал по Платформе. Какая часть активных записей может не отображаться в таблицах итогов регистров накопления?
Правильный ответ пятый. Реквизиты в итогах не отображаются. Измерений у регистра может и не быть, а вот ресурс обязателен.
Вопрос 12.46 экзамена 1С:Профессионал по Платформе. Какая часть не активных записей может не отображаться в таблицах итогов регистров накопления?
Правильный ответ четвертый, неактивные записи не отображаются вообще.
Вопрос 12.47 экзамена 1С:Профессионал по Платформе. Какая часть активных записей никогда не отображается в таблицах итогов регистров накопления?
Функционирование программы может нарушиться вследствие аварийного прекращения работы, например при отключении электроэнергии. Потом в базу данных не удается войти.
Иногда функционирующая программа может показывать неверные результаты. Из списка «исчезают» документы, при попытке открыть документ программа зависает, в отчетах появляются странные результаты. Все эти «глюки» прекращаются после тестирования и исправления 1C.
Ошибки могут проявляться не столь грубо, но любые странности и неточности являются поводом для «ремонтных работ».
Причины, ведущие к проблемам:
Прежде чем тестировать базу данных, обязательно нужно сделать ее резервную копию.
Это можно сделать прямым копированием каталога, где находится информационная база. Если не удается войти в Конфигуратор, то сделать копию можно только таким способом.
Если удалось войти в Конфигуратор, то нужно выбрать в меню опцию Администрирование → Выгрузить информационную базу, как на рис.1. В открывшемся окне нужно задать каталог для записи резервной копии и имя файла, в котором будет сохранен архив.
Перед тестированием и исправлением копия делается обязательно, поскольку при исправлении выполняются необратимые изменения данных. Иногда (очень редко) они могут не улучшить, а ухудшить состояние базы данных.
При нормальной работе резервные копии нужно делать регулярно, лучше всего – ежедневно. Для того, чтобы эта работа выполнялась автоматически, установите бесплатную программу Бэкапер-1С Резервные копии бухгалтерии .
Лучше хранить резервные копии не на том же носителе, где расположена сама база. Подойдет флэшка, хранилище в Интернете, другой жесткий диск. Ведь иногда потеря данных бывает связана с физическим износом жесткого диска.
Наличие резервных копий – страховка от потери данных. Однако нельзя поручиться, что в резервных копиях все идеально, поэтому актуальность опции Тестирование и Исправление не уменьшается.
Рис. 1. Выгрузка данных.
Подведем итог:
После того, как сделана резервная копия, откроем базу в режиме Конфигуратора. Выбираем опцию меню Администрирование → Тестирование и исправление информационной базы.
В открывшемся окне нужно проставить галочки (рис.2).
Но лучше не делать этого: не все операции, перечисленные в меню, необходимы при ремонте после аварии.
Рис.2. Окно тестирования и исправления 1с 8 с проставленными галочками во всех пунктах. Так делать НЕ НАДО:
Если отметить все пункты, запустится долгий процесс. Результаты тестирования и исправления отображается в нижней части окна. После выполнения действий нужно щелкнуть по кнопке Закрыть .
Выполнить все – не самый лучший вариант! Квалифицированные пользователи выполняют действия поэтапно и выборочно.
Рассмотрим все пункты меню Тестирование и исправление.
Первый этап, Реиндексация таблиц информационной базы, помогает решить 90% проблем. Что происходит в процессе реиндексации?
Внесение данных в справочники, создание новых документов сопровождается их автоматическим упорядочиванием. Названия выстраиваются по алфавиту, документы – по датам и т.д. При этом физический порядок следования записей не меняется. Записи выводятся на экран в определенном порядке, потому что им присвоены номера (индексы), и соответствие индекса физическому номеру записи содержится в таблицах индексов.
Индексы очень важны:
Нарушение индексных таблиц приводит к хаосу в представлении документов. Может, например, засветиться документ, в котором отсутствуют наименования товаров, но есть их количество.
Каждая новая запись сопровождается изменениями в таблицах индексов: например, после внесения в справочник записи, начинающейся на букву А, ей будет присвоен один из первых индексов, а все остальные индексные номера будут изменены. Небольшая пауза, возникающая после внесения новой записи, связана с пересчетом индексов; чем больше база, тем заметнее пауза.
Создание документа и записей в нем приводит в движение несколько индексных таблиц (иногда несколько десятков). Фактически, реиндесация таблиц в 1с ведется постоянно во время работы с данными. Но в рабочем режиме индексируются каждый раз одна или несколько таблиц, а при Тестировании и исправлении выполняется полная индексация всех таблиц, и этот процесс, для больших баз, занимает длительное время.
Итак, при переиндексации происходят такие процессы:
После переиндексации можно проверить – восстановилась ли работоспособность базы.
Следующий этап – проверка логической целостности. Проверяется соответствие реальной структуры информационной базы и ее описания в Конфигурации (наличие объектов, наличие связей между объектами). Эта проверка зачастую сообщает об ошибках даже в работающей базе, не следует паниковать при таких сообщениях. Однако это повод для обращения за консультацией к специалисту.
Проверка ссылочной целостности «прозванивает» связи между объектами. Иногда в таблице используется ссылка на отсутствующий объект, например на удаленный документ. Ссылочную целостность принято восстанавливать вручную, по списку, полученному в результате проверки. Иногда ссылочная целостность нарушена на «заброшенных участках» — в старых неактуальных документах. Тогда на них просто не обращают внимания.
Пересчет итогов – длительная и рискованная процедура. В 1с производится пересчет результатов в штатном режиме, но он ведется не «от начала времен», а с начала месяца. Итоговые значения отслеживаются в регистрах, это ускоряет работу. Если включить пересчет итогов в режиме тестирования и исправления, то пересчет совершится от момента создания базы, причем правильные текущие значения регистров могут «поплыть» из-за давно удаленных или исправленных «задним числом» документов. В результате длительная работа по пересчету не принесет пользы.
Если нет необходимости, то от пересчета итогов лучше воздержаться.
Сжатие таблиц – это процедура физического удаления записей, которые были помечены на удаление и перестали выводиться на экран. Таких записей может быть очень много, они без пользы раздувают объем базы данных.
Сжатие таблиц – полезная функция, хотя ее выполнять не обязательно.
Реструктуризация таблиц – операция, актуальная при переходе на новую версию программы. При реструктуризации создаются пустые таблицы с форматом, заданным в конфигурации, и в них переносится, запись за записью, информация из старых таблиц. В новых таблицах могут быть расширены поля, добавлены новые поля. Реструктуризация – это операция, которая должна подготовить информационную базу для работы по-новому, и она абсолютно необходима при обновлениях.
Если никакие версии не менялись, то реструктуризация не нужна, эта длительная процедура ничего не добавит и не изменит.
Итак, при исправлении «упавшей» программы необходимы и полезны опции:
Если база сильно повреждена и даже в Конфигуратор не удается войти, остается еще одна возможность восстановления: воспользуйтесь утилитой chdbfl.exe. Файл можно найти в папке Bin каталога установки (рис.3).
Рис. 3. Выбор утилиты chdbfl.exe
По записи в командной строке, показанной на рис.3, видно, что путь к файлу лежит через каталог 1сv8.2, или 1сv8.3, короче говоря, через каталог программы. Он может быть расположен в папке Program Files или в другой папке. Нужно найти место расположения каталога и открыть его. Внутри каталога открыть папку Bin,
Запустив исполняемый файл, выбирайте базу, подлежащую исправлению, и разрешите исправлять обнаруженные ошибки (рис.4)
Рис.4. Окно программы chdbfl.exe
Подведем итоги. Если программа не запускается после аварийного прерывания работы, нужно сделать следующее:
Удачное восстановление данных происходит не всегда. Страховкой от потери данных является ежедневное резервное копирование: если информационная база повреждена, можно вернуться на день назад и быстро восстановить потерянные записи.