8.х Неконтролируемый рост базы

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Доктор Руфус Бейли, 28 май 2010.

  1. TopicStarter Overlay
    Доктор Руфус Бейли
    Offline

    Доктор Руфус Бейли Опытный в 1С

    Регистрация:
    7 апр 2010
    Сообщения:
    277
    Симпатии:
    0
    Баллы:
    26
    Итак, господа, взываю к вам с вопросом: кто знает, хотя бы, в какую сторону начать думать, чтобы додуматься до решения.

    Дано: платформа 8.1.15.14 в серверном режиме. Базой пользуются от 40 до 50 пользователей в рядовой будний день. Документооборот - около 2500 документов в день. Конфигурация: в девичестве была УТ 10.2, а ныне самописная злостная вещица, утерявшая свой изначальный облик и продолжает терять его ежедневно.

    Конфигурация сервера в файле "конфа_1С.htm", прикреплённом к сообщению.

    База данных зверски растёт ежедневно. Динамику, при желании можно посмотреть в прикреплённом изображении "Динамика роста.png".

    Что пытались сделать:
    А) Пользовали поиск, потому сразу отвечу на самые частозадаваемые вопросы:
    1. Шринк не предлагать - не помогает.
    2. Не предлагать покупать сервер по-круче.
    3. Лог-файл, как-раз-таки, растёт весьма и весьма терпимо.
    4. Помеченных на удаление объектов - полтора землекопа.
    5. Удалять движения не предлагать - у нас рост базы начался в периоде, движения за который всё ещё актуальны (середина 2009 года. Сам момент начала разбухания базы профукали, не придав ему тогда значения, и теперь уже не знаем, какие события на это повлияли)

    Как можно догадаться - ответа на интересующий меня вопрос я не нашёл.

    Б) На тестовой базе пробовали различные способы вынесения части данных за пределы базы и пришли к выводу, что актуальным было только вынесение всех картинок во внешние хранилища. (что высвободило всего 600 Мб) Вся проблема заключается в том, что я не наблюдаю такого документа или справочника, который сам по себе занимал бы много места, а потому высвобождающийся размер просто не стоил тех тормозов, которые порождала постоянная необходимость прямиком из базы получать данные, выносимые во внешние хранилища.

    Ко всему прочему поиск решения усложняется тем, что большая часть пользователей - непонятно откуда набранные невнимательные, не умеющие читать (хотя, по-моему, банально ленящиеся прочитать и осознать написанное), ленивые, лишённые капли любознательности и воображения индивиды, которым лень нажать лишнюю кнопку, не то, чтобы влезать в какую-то отдельную базу, потому необходимо всё сделать так, чтобы сами эти пользователи вообще не заметили, что что-то изменилось.

    Вложения:

  2. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Постойте, я правильно посчитал - у вас за 1,5 месяца выросла на 121 мб?
  3. TopicStarter Overlay
    Доктор Руфус Бейли
    Offline

    Доктор Руфус Бейли Опытный в 1С

    Регистрация:
    7 апр 2010
    Сообщения:
    277
    Симпатии:
    0
    Баллы:
    26
    Это только dt-шники. "Живая" база растёт (в среднем) на 500 Мб в день.
  4. lazy
    Offline

    lazy Модераторы Команда форума Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
  5. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Покажите отчет по размеру таблиц. Надо определить, в какой именно проблема.
    Навскидку:
    - расставлены лишние индексы (в этом случае таблица индексов будет пухнуть быстрее, чем основная таблица)
    - регистры не выводятся в ноль, таблица итогов будет пухнуть тоже (особенно, если измерений много)
    - много "приложенных" файлов

    Итого: нужен отчет по размеру таблиц, тогда уже будет понятно, что смотреть
  6. TopicStarter Overlay
    Доктор Руфус Бейли
    Offline

    Доктор Руфус Бейли Опытный в 1С

    Регистрация:
    7 апр 2010
    Сообщения:
    277
    Симпатии:
    0
    Баллы:
    26
    Отчёт в прикреплённом файле. (заархивированный экселевский документ)

    Вложения:

  7. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.580
    Симпатии:
    717
    Баллы:
    204
    Стоит обратить внимание на таблицы:
    Посмотреть вложение 4510

    Что говорит метод глобального контекста ПолучитьСтруктуруХраненияБазыДанных() про эти таблицы?

    Вложения:

  8. TopicStarter Overlay
    Доктор Руфус Бейли
    Offline

    Доктор Руфус Бейли Опытный в 1С

    Регистрация:
    7 апр 2010
    Сообщения:
    277
    Симпатии:
    0
    Баллы:
    26
    *шокированно пожёвывает чайную ложку*
    Что же я раньше-то не знал про такую читерско-шикарную функцию?

    Собственно, имеем следующие результаты: самым прожорливым оказался любимый начальством, в целом, и, в честности, мной (хоть я и не начальство) Журнал Изменений (про который, кстати, рекламировалось, что он ничерта не прожорливый - впрочем, это решается курением мануалов - там есть самопроизвольная выгрузка данных во внешнюю базу)
    Reference7301.VT7318 = Справочник.bpЖурналИзменений.ТабличнаяЧасть.ИзмененияОбъекта

    И далее, второй по прожорливости:

    AccumRegTotals4229 = РегистрНакопления.ЗаказыПокупателей

    Нужно будет понять, в чём здесь основная проблема, так как заказы покупателей - наш основной ходовой документ.

    AccumRegTotals4128 = РегистрНакопления.НДСРасчетыСПокупателями
    AccumRegTotals4951 = РегистрНакопления.НДСНачисленный

    У нас аккумулируется всё тем же заказом.

    Рассыпаюсь в благодарностях, сограждане и коллеги. Благодаря вам я теперь знаю, как начать думать, чтобы додуматься до решения. Дальнейшая помощь будет только приветствоваться, но самое важное вы мне уже подсказали.
  9. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Доктор Руфус Бейли сам регистр не дописывали, т.е. измерения не добавляли?
  10. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.580
    Симпатии:
    717
    Баллы:
    204
    Как заметил BabySG, итоги у РН в ноль не выходят видимо, поэтому AccumRegTotals4229, AccumRegTotals4128, AccumRegTotals4951 имеют такой большой объём.
    Примитивные данные в измерениях случаем, не храните?

    Я так понимаю, Reference7301.VT7318 содержит много примитивных типов данных + возможно, индексирование по ним - отсюда его "пухлость".
  11. TopicStarter Overlay
    Доктор Руфус Бейли
    Offline

    Доктор Руфус Бейли Опытный в 1С

    Регистрация:
    7 апр 2010
    Сообщения:
    277
    Симпатии:
    0
    Баллы:
    26
    Я-то эти регистры не дописывал... Но когда я пришёл, УТ уже УТ не являлось и было сильно изменено, потому за действия предшественника ручаться не могу.

    Содержит-содержит, но это должно быть решаемо - изменил параметры архивации (кто-то мудрый выставил хранение записей в основной базе 30 дней), изменил на 7 дней (для начала) и запустил архивацию во внешнюю базу... В любом случае, там множество настроек и Reference7301.VT7318 вполне может быть уменьшена простым чтением мануалов (и грамотной настройкой, конечно же) без использования конфигуратора.

    Вот этот вопрос мне ещё стоит рассмотреть, как дойдут до него руки (сейчас разбираюсь с Reference7301.VT7318, так как 1) она самая пухлая 2) я знаю, что с ней делать), и тогда уже я расскажу о результатах данного предприятия.
  12. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Посмотрите обработку в конце этого сообщения. А в самом сообщении увидите, как она работает :)

    Перетащите лучше механизм из УПП. Там есть регламентное задание по сжатию журнала :)
    Либо спионерьте идею сжатия оттуда.

    99.9999999% что по измерениям не сворачивается. В типовой тоже есть такой косяк.
    Посмотрите банально таблицу остатков.

    Тоже самое.

    Добавлю, что с индексами надо быть аккуратными. Иногда таблица индексов может стать больше, чем реальная таблица. А еще неплохо периодически пересчитывать их и обновлять статистику на сервере. Это регламентное задание для скуля.

    Выверяйте все регситры. Заодно и производительность повысите :)
  13. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Извиняюсь, коллеги, а как вывести отчет по размеру таблиц SQL (2000)?
  14. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    Например вот так:

    Код:
    USE [SQLNAME вашей БД]
    DECLARE @tbl_tmp TABLE(  f_name NVARCHAR(128)
    ,f_rows NVARCHAR(128)
    ,f_reserved NVARCHAR(128)
    ,f_data NVARCHAR(128)
    ,f_index_size NVARCHAR(128)
    ,f_unused NVARCHAR(128)
    )
    
    DECLARE @name_table NVARCHAR(MAX)
    DECLARE pay_cursor CURSOR LOCAL FOR
    SELECT 
    TABLE_NAME
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_TYPE='BASE TABLE' AND TABLE_NAME<>'dtproperties'
    OPEN pay_cursor
    FETCH NEXT FROM pay_cursor 
    INTO @name_table
    WHILE @@FETCH_STATUS = 0
    BEGIN
    PRINT @name_table
    insert @tbl_tmp exec sp_spaceused @name_table
    FETCH NEXT FROM pay_cursor 
    INTO @name_table
    END
    CLOSE pay_cursor
    
    SELECT * FROM @tbl_tmp ORDER BY f_reserved
    
    
    
  15. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Ругается:
  16. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    ХЗ. Под рукой нет 2000 сервака, в 2003 работает (им и пользуюсь)
    Может для разнообразия открыть справку по скулю и почитать что этой ... ля ля ля не нравиться?
    Может типа нет такого NVARCHAR? (лень лезть)
    Скриншот, в котором была бы видна ошибка и текст запроса (как вы его перенесли) мог бы помочь.
  17. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Сорри, неправильно первую ошибку написал, та была после моего "колдовства":

    Скриншот: Посмотреть вложение 4847

    п.с. я почему-то думал, что это можно сделать стандартными срдствами, без использования запроса.

    Вложения:

  18. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    Стандартными можно - но посмотреть размер ОДНОЙ таблицы SQL (разворачиваем таблицы, првой кнопой мышы вызываем контекстное меню - зырим в свойства таблицы), а я так полагаю надо ВСЕ (а их даже в маленькой базе как то дофига)?

    И да, ошибка то ЫЛЕМЕНТАРНАЙА - нет в 2000ом скуле ВАРЧАРА(МАКС) вместо МАКС напиши чтонить типа стопицотмильоновсто... хотя хватит и 300 (врядли у тебя в базе есть таблицы, с именем более 300 символов... ну поставь 305 -чтоб наверняка :unsure: )
  19. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Все равно ругнулось:
    Нашел в просторах тырнета, отработало нормально:
    Код:
    DBCC UPDATEUSAGE (0);  
    CREATE TABLE #t([имя таблицы] varchar(255), [строк] varchar(255), [зарезервировано] varchar(255), [всего данных] varchar(255), [размер индексов] varchar(255), [свободно] varchar(255));  
    
    INSERT INTO #t  
    exec sp_msforeachtable N'exec sp_spaceused ''?''';  
    
    SELECT * FROM #t ORDER BY CONVERT(bigint, REPLACE([всего данных], ' KB', '')) DESC;  
    
    DROP TABLE #t;
    

Поделиться этой страницей