Имя: Пароль:
1C
1С v8
Вопрос про SQL и таблицу, которая не освобождает место. ☑
0 ptiz
 
06.05.22
✎
16:59
Есть таблица независимого регистра сведений, некий лог.
Постоянно пишутся новые данные и очищаются старые.
Одно из полей таблицы - строка неограниченной длины (если это важно).
Количество записей примерно постоянно, но занимаемое место на диске не освобождается и только растет с каждым днем.

Всего 700 тыс записей и занято этой таблицей уже 60Гб (из них индексы занимают 300Мб).
Если сделать реструктуризацию таблицы в 1С через конфигуратор (поменять реквизит), то она проходит за пару минут и останется "честных" 2Гб.

Какой командой добиться в SQL аналогичного освобождения места?

Речь не про шринк! 1) на данной базе это слишком долго. 2) эффекта не дает.
Наверняка поможет перекидывание данных во временную, truncate, и перекидывание обратно, но может есть какая-то одна хитрая команда?

DBCC CLEANTABLE и DBCC DBREINDEX - не помогают.
1 Kassern
 
06.05.22
✎
17:18
(0) проверил на ограниченных строках, вне норм очищает, если Набор.Очистить() Набор.Записать()
2 Kassern
 
06.05.22
✎
17:18
*все
3 Kassern
 
06.05.22
✎
17:21
(0) У вас измерение строковое неограниченной длины?)
4 Конструктор1С
 
06.05.22
✎
17:23
(0) SQL Server? Покажи через SSMS сколько места занимают данные и сколько индексы. Скорее всего тебе нужно REBUILD  индексов сделать
5 Конструктор1С
 
06.05.22
✎
17:27
а, невнимательно почитал, с индексами у тебя норм
6 ptiz
 
06.05.22
✎
17:34
7 Конструктор1С
 
06.05.22
✎
17:42
(6) а, так это зарезервированное место. Есть хранимка для очистки
8 Конструктор1С
 
06.05.22
✎
17:56
Не могу найти что-то. А какая версия скуля? В последних версиях есть сжатие
https://docs.microsoft.com/ru-ru/sql/relational-databases/data-compression/enable-compression-on-a-table-or-index
9 H A D G E H O G s
 
06.05.22
✎
18:24
Вот тут пишут, что это невозможно.
Ну, ты можешь скриптом сделать копию, пепебросить туда данные и потом обратно, только так.

https://stackoverflow.com/questions/49610084/sql-server-deleting-updating-lob-data-in-a-heap
10 H A D G E H O G s
 
06.05.22
✎
18:28
Ну и можно попробовать это

Perform ALTER INDEX ALL .. DISABLE to disable all non-clustered indexes;

Perform ALTER INDEX ALL .. REORGANIZE WITH (LOB_COMPACTION = ON) to compact LOB pages of the underlying heap (this will leave the disabled indexes alone);

Perform ALTER TABLE .. REBUILD to rebuild the in-row data of the heap, as well as all data of the indexes, and re-enable them.
11 rphosts
 
07.05.22
✎
07:23
освободить в табличке - перетусовать данные что-бы в блоках оставалось незаполненными только дефолтовое место (10% что-ли) - остальные блоки останутся в файле/файлах базы но будут пустыми, а отдать файловой системе не подразумевается в принципе!
12 ДедМорроз
 
07.05.22
✎
18:00
Во-первых,все зависит от модели восстановления,так как могут храниться как транзакции добавления так и транзакции удаления,а также данные реально не удаляться.
Во-вторых,при удалении записей место освобожается только если очищена вся страница,если остаются страницы хоть с одной записью,то они так и будут жить.
Кроме того,строки неограниченной длины то бишь BLOB при удалении оставляют дыры,которые потом могут быть заняты,но для освобождения этого места нужно делать переупаковку BLOB.
13 Индиго
 
08.05.22
✎
07:53
(0)Выгрузка-загрузка в dt+ shrink
14 Ivan_495
 
naïve
08.05.22
✎
19:16
используешь простую модель восстановления?
15 ptiz
 
09.05.22
✎
17:41
(10) Не помогло. Сделал перекидывание во временную + truncate. Не критичная таблица, 2 минуты отрабатывает, впихну в задачи планировщика.
(11) Полная. Но речь про конкретную таблицу, не про файл лога.
"для освобождения этого места нужно делать переупаковку BLOB." - вот что-то не получилось.
Еще есть другой РС без строковых значений, тоже размер непропорциональный данным, но там не критичный рост.
(13) Понятно, что выгрузка через DT всё лечит, но это чересчур.
16 trad
 
09.05.22
✎
18:02
Если этот РС - только как лог и не нужны срезы, то переделать регистр на непериодический.
Первым измерением сделать поле ПериодЛога.
Таким образом кластерный индекс будет соответствовать течению лога и страницы будут обрезаться полностью при удалении старых записей
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn