• Обсуждения на сайте Альта-Софт

переполнение sql базы

Ответить


BBCode ВКЛЮЧЁН
[img] ОТКЛЮЧЕН
[flash] ОТКЛЮЧЕН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: переполнение sql базы

Re: переполнение sql базы

starik » Чт янв 23, 2020 17:15

Здравствуйте.
А нельзя ли сделать галочку - "Оставить в рабочей базе ГТД за последний год (два, три) со всеми связанными документами"?
Алгоритм будет такой:
1. Делаем копию БД для страховки BAK.
2. Создаём новую пустую с новым названием NEW.
3. Переименовываем рабочую в OLD.
4. Ищем ГТД и связанные доки за последний год в OLD и преносим их в NEW, с одновременным, или на втором проходе, удалением из OLD.
5. Переименовываем NEW в рабочую или переименовываем ВАК, если что-то не так.

Я думаю было бы лучше чем сейчас мильон галочек. Но текущий вариант нужно тоже оставить, для тонкой настройки.
Или есть сложности?
Ответьте, пожалуйста.

Re: переполнение sql базы

starik » Чт янв 23, 2020 11:13

"Дата документа" - это действительно дата документа, а не дата создания документа в Гтд-Альта. Вот я молодец.
Все документы созданные вчера, с датой раньше чем год назад, улетели в архив.

Re: переполнение sql базы

popov » Вт ноя 14, 2017 13:17

Sidyakin писал(а):Параметр "Не удалять документы по ключевому слову" имеет весьма ограниченное применение. Он ориентируется на фразу, прописанную в комментарии, не более того.
Тут тоже формулировку поправим, чтобы с толку не сбивала...
Ну и добавим галочку "не удалять/архивировать документы, содержащие слова"...

Re: переполнение sql базы

Sidyakin » Вт ноя 14, 2017 11:24

Параметр "Не удалять документы по ключевому слову" имеет весьма ограниченное применение. Он ориентируется на фразу, прописанную в комментарии, не более того.

Что касается вопроса, будет ли толк от чистки, если оставить все документы типа "Неформализованный документ", то это можно проверить запросами:
1) кол-во и суммарный размер (в байтах) всех документов этого типа
select count(*), sum(docsize)
from Docs
where DocTyp = 'freedoc'
2) то же, но уже содержащие слова "довереннность" и/или "устав"
select count(*), sum(docsize)
from Docs
where DocTyp = 'freedoc'
and (contains(blob, 'доверенность') or contains(blob, 'устав'))

Re: переполнение sql базы

terminalzm » Пт ноя 10, 2017 11:38

Добрый день! Еще один вопрос по архивированию баз при помощи dbutils. Каков синтаксис строки "не удалять документы по ключевому слову"?
Мне надо чтобы остались "Устав" и "Доверенность". Как там записать? Через запятую, точку с запятой, пробел?
Со слов наших декларантов эти два документа, по-видимому, входят в тип "[ЭД Альбомы] Неформализованный документ. Используется для...", но если оставлять его весь то толку от чистки будет, наверно, мало.

Re: переполнение sql базы

terminalzm » Чт окт 12, 2017 12:23

popov
Благодарю, все теперь понятно. Название функции действительно смущает, так что переименование или какие-то разъяснения в теле программы будут не лишними. Когда в прошлый раз архивировал оставил её именно "от греха подальше" чтоб ничего не удалилось :)

Re: переполнение sql базы

popov » Ср окт 11, 2017 17:25

terminalzm писал(а):Спасибо, но я хотел бы все же разобраться что конкретно происходит если её не ставить.
На выходе я получаю две базы в которых декларашки, сообщения эд и проч. поделены на две части
в соответствии с датами их создания. А что с "документами архива таможни"? Удаляются вообще все что есть?
Эта форма просто общая с функцией чистки БД в Альта-ГТД, поэтому данная галка при архивации конечно не очень уместна - надо нам её спрятать наверное или переименовать...

По сути при архивации она просто приводит к тому, что док-ты, отправлявшиеся в архив таможни (а нынче по сути все ЭД-документы таковые), в архивную БД не перенесутся. Т.е. эффект от архивации будет "не очень", как у Вас и вышло.

Но в данной ф-ции (архивации) ничего вообще никогда не удаляется - любой док-т БД переносится либо в новую рабочую БД, либо в архивную БД, т.ч. не смущайтесь из-за названия галки - исправим её. Спасибо за сигнал!

Re: переполнение sql базы

terminalzm » Ср окт 11, 2017 16:39

gorkin писал(а):Да. Лучше эту галку не ставить, а то эффекта от чистки не много будет.
Спасибо, но я хотел бы все же разобраться что конкретно происходит если её не ставить.
На выходе я получаю две базы в которых декларашки, сообщения эд и проч. поделены на две части
в соответствии с датами их создания. А что с "документами архива таможни"? Удаляются вообще все что есть?

Re: переполнение sql базы

gorkin » Ср окт 11, 2017 15:50

Да. Лучше эту галку не ставить, а то эффекта от чистки не много будет.

Re: переполнение sql базы

terminalzm » Ср окт 11, 2017 11:09

Добрый день! Подниму тему с новым вопросом.
При создании архивной базы в dbutil имеем вот такой набор опций:
Изображение

Хотелось бы разобраться, что означает галка "Не удалять документы, отправленные в архив таможни".
Вообще, такое ощущение что с того времени как появился этот самый "архив таможни" базы стали забиваться
неимоверными темпами. Последний раз когда делал архив забитой до 10гиг базы (эта галка вроде бы стояла),
получил размер новой - 9гиг, при том что оставил декларации только за последний год!

Re: переполнение sql базы

gorkin » Пн апр 03, 2017 09:28

Не сервис, а Список\Просмотр архивной БД.

Re: переполнение sql базы

popov » Чт мар 30, 2017 19:24

terminalzm писал(а):Главное чтобы это на скорости работы пользователей никак не сказывалось.
Не должно сказываться, т.к. блобы сообщений читаются довольно редко и таблица тут простейшей структуры - это просто склад файлов, грубо говоря. Тормозить там нечему.
terminalzm писал(а):Вот только в меню "Сервис" пункта для просмотра архивных баз не нашел, не подскажете поконкретнее куда там смотреть?
Пардон, меню "Список" имел в виду, а не "Сервис".

Re: переполнение sql базы

terminalzm » Чт мар 30, 2017 14:25

gorkin писал(а):Если место есть лучше не обращать внимания. А если хотите всё-таки подчистить напишем скрипт, но если чего-то потом будет не хватать, мы не виноваты.
Cпасибо, место есть, лучше без скрипта оставим как есть :) Просто хотелось навести порядок, но судя по всему придется плодить эти доп. базы, время от времени скидывая часть основной базы в архивы и одновременно увеличивая количество мусора в допах. Главное чтобы это на скорости работы пользователей никак не сказывалось.

popov
Спасибо за разъяснения. Вот только в меню "Сервис" пункта для просмотра архивных баз не нашел, не подскажете поконкретнее куда там смотреть?

Re: переполнение sql базы

popov » Чт мар 30, 2017 11:20

terminalzm писал(а):1)Почему при подключении архивной базы доп. база помечается как "БД испочена!?" при этом количество сообщений в ней вообще не отображается?
Потому что в ней прописано, что она принадлежит раб. БД с именем gtd, а не gtd_archiv1.
Подключать архивные БД как рабочие не предполагается - это неправильно, т.к. в них может пойти ЭД-доставка и пр. неприятности.
Для просмотра архивных БД есть спец. пункт в меню Сервис.
terminalzm писал(а):2)Если мое предположение о том что появление всех этих "красных" сообщений в доп.базе связано с тем что из основной выгружена часть деклараций в архив верно, можно ли все эти сообщения так же переместить в архивную базу чтобы они там все вместе красиво жили? Если не верно, то откуда они еще могли возникнуть и можно ли их как-то почистить? Кнопочка "исправить" никаких результатов не дала.
Да, кол-во указанное в колонке "мусор" (192 579) - это те самые сообщения, которые были перенесены в архивную БД и соотв-но удалены их заголовки из основной (рабочей) БД - она теперь на них не ссылается и это как бы мусор.
А вот те что в колонке "дубли" (11 545) - это задвоившиеся XML-тела одних и тех же сообщений. Видимо когда-то перенос сообщений оборвали и он не дошел до конца...
В принципе эти "красные" XML-тела никому не мешают и переносить их куда-то после архивации данных основной БД не предполагается опять же. Поскольку чисто технически они при необходимости всегда доступны всем тем пользователям SQL-сервера, которые имеют SQL-доступ к этой доп. БД, независимо от того какая у них БД подключена в кач-ве рабочей/архивной. А гонять туда-сюда большие блобы это только лишняя потеря времени. Предполается, что доп. базы для ЭД должны "умирать" естественным путем - через 3 года после того как в них закончилась запись новых сообщений (см. колонку "Период: ПО"). А "отчеркиваются" эти моменты, путем создания очередной новой доп. БД и направления в нее записи новых сообщений, например, раз в год или как Вам больше нравится...

Re: переполнение sql базы

gorkin » Чт мар 30, 2017 10:25

Если место есть лучше не обращать внимания. А если хотите всё-таки подчистить напишем скрипт, но если чего-то потом будет не хватать, мы не виноваты.

Re: переполнение sql базы

terminalzm » Вт мар 28, 2017 11:39

Не стал создавать новую тему, спрошу тут. Возникла слудующая ситуация:
Изображение
Как видно на скриншоте в одной из дополнительных баз (gtd_ED) имеется большое количество сообщений не связаных с основной (gtd). Я предполагаю, что это произошло в силу того что часть деклараций за старые годы из основной базы было выгружена при помощи gtdutil в архивную базу (gtd_arhiv1), а в доп. базе остались сообщения связанные с этими старыми декларациями.

Если подключить эту самую архивную базу в качестве основной, наблюдаем следующую картину:
Изображение

Из этого всего у меня возникают следующие вопросы:
1)Почему при подключении архивной базы доп. база помечается как "БД испочена!?" при этом количество сообщений в ней вообще не отображается?
2)Если мое предположение о том что появление всех этих "красных" сообщений в доп.базе связано с тем что из основной выгружена часть деклараций в архив верно, можно ли все эти сообщения так же переместить в архивную базу чтобы они там все вместе красиво жили? Если не верно, то откуда они еще могли возникнуть и можно ли их как-то почистить? Кнопочка "исправить" никаких результатов не дала.

Re: переполнение sql базы

aiki » Пн янв 11, 2016 11:03

-Никола- писал(а):Подниму тему.
Разделение баз на базу с декларациями и базу с ЭД сообщениями помогло на 2 года. База с декларациями достигла 10Гбт. Варианта было 3.
1. Купить SQL
2. Поставить SQL с одного из трекеров )
3. Архивировать старые декларации.

Решил пойти по третьему пути. Большого опыта работы с базами данных нет, есть только общее понимание. Подробного описания процесса не нашел, поэтому делал интуитивно. Сделал бэкап основной базы, создал через SQL Management новую базу Arhiv_1 и попытался восстановить в нее базу из бэкапа. Сразу получил ошибку, поскольку основная база (gtd) и восстанавливаемая база (Arhiv_1) имеют одинаковые файлы.
Изображение

Два файла подменил на аналогичные от базы Arhiv_1, а третий (ftrow...) создал вручную.
Изображение

После этого все прошло гладко. Проверил в альте "Просмотр архивной SQL БД", все видно и работает.
Пришло время чистить основную БД. Запустил встроенную процедуру из Альты с параметрами удалить все старее 1го января 2015:
Изображение

Сжал базу:
Изображение
Удалив 4 года из 5, базу удалось уменьшить только на 15%.

Собственно возникли вопросы:
1. Правильно ли я делал архивную копию, есть ощущение, что можно было сделать более корректно.
2. Почему база сократилась так незначительно? Это явно какая то ошибка.
Доброго дня. Вы пошли мудреным путем :)
Для создания архивной БД лучше воспользоваться утилитой DBUTILS (там и другие плюшки есть) Находится на любом месте где установлен продукт Альта-софт в подкаталоге utils. Она значительно упростит вам работу с БД, проста и понятна.

Теперь по поводу объема.
Если вы чистили основную БД с параметрами как на вашем скрине, то видно что не включены множество типов документов. Возможно самые "тяжелые" остались в БД, например ЭД2-картинки.
По уму, надо разобраться что в вашей основной БД кушает больше места и уже смотреть можете ли вы удалить этот тип документов и до каких пределов. Сделать это можно SQL запросом к базе в том же менеджмент студио

SELECT doctyp, sum(convert(bigint,[DOCSIZE])), count(*)

FROM ["имя базы"].[dbo].[Docs]
group by doctyp
order by 2 desc

в выводе получите 3 столбца
1 - тип документов
2 - занимаемый объем в БД типом документов (в байтах. Думаю учить как пересчитывать не стоит :) )
3 - количество документов в БД конкретным типом

Таким образом, посмотрев на столбец 2, вы поймете какой тип документов в вашей БД занимает больше все места.

Re: переполнение sql базы

gorkin » Пн янв 11, 2016 10:58

1. Сделали правильно. Но можно проще - в папку utils есть утилита dbutils, где есть пункт Создание архивной БД. Она делает копию базы, а текущую чистит.
2. Скорее всего в последнее время декларанты активно создавали ЭД-картинки, которые занимают большую часть места. Попробуйте почистить документы, оставив за последние 6 месяцев, и поставьте галку где тип документа - оставьте только ЭД-Картинки.

Re: переполнение sql базы

-Никола- » Сб янв 09, 2016 12:47

Подниму тему.
Разделение баз на базу с декларациями и базу с ЭД сообщениями помогло на 2 года. База с декларациями достигла 10Гбт. Варианта было 3.
1. Купить SQL
2. Поставить SQL с одного из трекеров )
3. Архивировать старые декларации.

Решил пойти по третьему пути. Большого опыта работы с базами данных нет, есть только общее понимание. Подробного описания процесса не нашел, поэтому делал интуитивно. Сделал бэкап основной базы, создал через SQL Management новую базу Arhiv_1 и попытался восстановить в нее базу из бэкапа. Сразу получил ошибку, поскольку основная база (gtd) и восстанавливаемая база (Arhiv_1) имеют одинаковые файлы.
Изображение

Два файла подменил на аналогичные от базы Arhiv_1, а третий (ftrow...) создал вручную.
Изображение

После этого все прошло гладко. Проверил в альте "Просмотр архивной SQL БД", все видно и работает.
Пришло время чистить основную БД. Запустил встроенную процедуру из Альты с параметрами удалить все старее 1го января 2015:
Изображение

Сжал базу:
Изображение
Удалив 4 года из 5, базу удалось уменьшить только на 15%.

Собственно возникли вопросы:
1. Правильно ли я делал архивную копию, есть ощущение, что можно было сделать более корректно.
2. Почему база сократилась так незначительно? Это явно какая то ошибка.

Re: переполнение sql базы

-Никола- » Чт сен 05, 2013 11:41

aiki писал(а):А зачем SSD? Я упомянул SSD в ключе их малого объема, в том плане что с нынешними объемами HDD процесс чистки БД от ЭД сообщений теряет смысл, хранить несколько дополнительных БД с ЭД по 10ГБ накладно только если у вас малый объем дискового пространства как при использовании SSD. Обычных HDD на небольшую раб группу вполне хватает в зеркале, но не забывайте что рэйд это не панацея и не отменяет резервного копирования, рэйд это возможность сократить время простоя при аварии и отложить сервисные работы до завершения рабочего процесса при необходимости, ну и повысить производительность при 10 (от 4 дисков) уровне рэйда.
SSD потому что он по скорости работы обойдет обычный хард раз в 10 (именно при работе с базами). Но с надежностью пока не очень.
По рэйду ясно, это защита от поломки носителя, а бэкап защита от кривых рук работающих с базой ).

Вернуться к началу