Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Рост веса таблицы при сжатии / 25 сообщений из 26, страница 1 из 2
02.03.2020, 10:10
    #39932875
Danion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рост веса таблицы при сжатии
Добрый день.

Версия 2016 SP2 CU10 Enterprise.

Есть база размером 1.2 ТБ. В ней есть свободное место, шринк базы показывает минимум 620 ГБ. Появилась задача уменьшить размер до 650 ГБ.
Перед работами в выходные был выполнен бекап, база переведена в режим simple и запущено сжатие.
Через 18 часов запрос всё ещё продолжался, лог базы вырос до 460 ГБ, а в дата-файле показывало, что занято 900 ГБ. По самым крупным таблицам рост во время сжатия был около 30%. Была таблица 626к строк и размером 540 ГБ, во время сжатия стала 836 ГБ при всё тех же 626к строк, и так по всем таблицам. На самой большой таблице всего 1 некластерный индекс, как был размером 1МБ так и оставался. Свободного места на диске было 570 ГБ, оставалось около 110 ГБ. За несколько часов наблюдений ничего не менялось, сжатие было остановлено, лог очищен, база переведена в режим фулл, создан новый фулл-бекап.
Сегодня проверяю базу - размер таблиц и свободное место в базе вернулось к исходному.

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

Если кто-то сталкивался или просто знает - что это было и как решить?
...
Рейтинг: 0 / 0
02.03.2020, 10:15
    #39932878
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рост веса таблицы при сжатии
Danion,

Тут обсуждали недавно похожую ситуацию со свободным местом.

https://www.sql.ru/forum/1322756/unused-space-klasternyh-tablic

А вообще на SQL 2016 Ent надо использовать columnstore
...
Рейтинг: 0 / 0
02.03.2020, 11:49
    #39932918
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рост веса таблицы при сжатии
Команду-то в итоге какую запускали?
...
Рейтинг: 0 / 0
02.03.2020, 12:09
    #39932928
Danion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рост веса таблицы при сжатии
Гавриленко Сергей Алексеевич,

Сжатие файла из SSMS с реорганизацией страниц.

Код: sql
1.
2.
3.
4.
USE [DB]
GO
DBCC SHRINKFILE (N'DB' , 650000)
GO
...
Рейтинг: 0 / 0
02.03.2020, 12:39
    #39932939
Danion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рост веса таблицы при сжатии
a_voronin,

Тему прочитал, но вроде не очень похоже.

У меня на таблице нет кластерного индекса, массовой вставки данных во время работ тоже не было.
В базе уже давно было свободное место в дата-файле, когда-то удаляли ненужные уже таблицы.
...
Рейтинг: 0 / 0
02.03.2020, 12:51
    #39932948
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рост веса таблицы при сжатии
Danion
Гавриленко Сергей Алексеевич,

Сжатие файла из SSMS с реорганизацией страниц.

Код: sql
1.
2.
3.
4.
USE [DB]
GO
DBCC SHRINKFILE (N'DB' , 650000)
GO

Я большие базы всегда шринкал в цикле, по чуть чуть. Мегабайт по 50.
...
Рейтинг: 0 / 0
02.03.2020, 13:12
    #39932956
Danion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рост веса таблицы при сжатии
Danion,

Перепроверил индекс на самой большой таблице - я утром всё же не туда посмотрел и индекс там кластерный уникальный, хотя и не РК. Fill factor - 0.

alexeyvg,

Не очень понял, можно пример?
По 50 МБ это как, если файл сейчас 100000 МБ указывать сжимать до 99950? (ну или текущее - 50 МБ). Так вроде всё равно будет долго выполняться такое.
...
Рейтинг: 0 / 0
02.03.2020, 14:06
    #39932987
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рост веса таблицы при сжатии
Danion,

автор836 ГБ при всё тех же 626к строк

BLOB, что ли?
...
Рейтинг: 0 / 0
02.03.2020, 14:21
    #39932997
Danion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рост веса таблицы при сжатии
Владислав Колосов,

База из серии 1С, к документообороту относится.

Самая большая таблица:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
USE [DB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[_InfoRg9744](
	[_Fld9745_TYPE] [binary](1) NOT NULL,
	[_Fld9745_RTRef] [binary](4) NOT NULL,
	[_Fld9745_RRRef] [binary](16) NOT NULL,
	[_Fld9746] [varbinary](max) NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO



Единственный индекс:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
USE [DB]
GO
SET ANSI_PADDING ON
GO
CREATE UNIQUE CLUSTERED INDEX [_InfoRg9744_ByDims] ON [dbo].[_InfoRg9744]
(
	[_Fld9745_TYPE] ASC,
	[_Fld9745_RTRef] ASC,
	[_Fld9745_RRRef] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO



[_Fld9746] [varbinary](max) - ага, похоже на BLOB.

У таблицы топ 2 по размеру и росту во время шринка тоже [_SettingsData] [varbinary](max) NULL
У следующей по размеру одно из полей [_Fld1030] [varbinary](max) NOT NULL

Пойду пока освежу воспоминания по блобам.
...
Рейтинг: 0 / 0
02.03.2020, 15:13
    #39933026
Danion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рост веса таблицы при сжатии
alexeyvg,

Нашел пример сжатия частями на https://infostart.ru/public/1031815/
5 пост
и в https://www.sqlshack.com/shrinking-your-database-using-dbcc-shrinkfile/
На тестовой базе отработало нормально, проверю как будет себя вести база при таком способе.
Что-то подобное используете?
...
Рейтинг: 0 / 0
02.03.2020, 15:29
    #39933037
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рост веса таблицы при сжатии
Danion
Есть база размером 1.2 ТБ.
Через 18 часов запрос всё ещё продолжался

Смешно.
Если там не "японский сверхкомпутер"... то 18 суток было бы уместнее.
...
Рейтинг: 0 / 0
02.03.2020, 15:43
    #39933052
Danion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рост веса таблицы при сжатии
aleks222,

В смысле? 1 целое, 2 десятых ТБ - оно же 1229 ГБ. Какие 18 суток?
Если нормально всё происходит, то меньше суток на среднем сервере подобные размеры обрабатывает.
...
Рейтинг: 0 / 0
02.03.2020, 16:08
    #39933075
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рост веса таблицы при сжатии
Danion
aleks222,

В смысле? 1 целое, 2 десятых ТБ - оно же 1229 ГБ. Какие 18 суток?
Если нормально всё происходит, то меньше суток на среднем сервере подобные размеры обрабатывает.

У нас очень разные "средние" сервера.
Но я рад за вас.
...
Рейтинг: 0 / 0
02.03.2020, 16:20
    #39933086
Danion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рост веса таблицы при сжатии
aleks222,

Если реально так долго выполняется у вас - то сочувствую. Я пока встречал только ситуации, что к моменту базы 1ТБ все же разорялись хоть на сколько-то приличное железо.

Пока немного позапускал сжатие частями из поста выше и получается неплохо. Таблицы не растут, можно останавливать в любой момент и прошлые куски уже выполнены. За два подхода 100+ ГБ освободилось.
До этого как-то запускал шринк именно с небольшим уменьшением размера файла и времени занимало уйму, но это видимо зависит ещё от разброса пустого места по файлу.
...
Рейтинг: 0 / 0
02.03.2020, 17:28
    #39933140
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рост веса таблицы при сжатии
Danion
alexeyvg,

Нашел пример сжатия частями на https://infostart.ru/public/1031815/
5 пост
и в https://www.sqlshack.com/shrinking-your-database-using-dbcc-shrinkfile/
На тестовой базе отработало нормально, проверю как будет себя вести база при таком способе.
Что-то подобное используете?
Ну да, цикл.
Посмотрел, на самом деле я шринкал порциями не по 50, а по 500-1000 мб, это оказалось оптимально.
Я размер порции сделал параметром, и потом подбирал оптимальный размер.

Danion
Пока немного позапускал сжатие частями из поста выше и получается неплохо.
И ещё, оно не мешает работе базы.
Можно просто запустить, и потом проверить результат.
...
Рейтинг: 0 / 0
02.03.2020, 17:44
    #39933151
Danion
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рост веса таблицы при сжатии
alexeyvg,

За идею спасибо! С сжатием базы реально намного проще пошло. Понаблюдаю ещё за базой несколько дней.

Хотя именно с причинами почему обычное сжатие пошло так странно осталось не ясно. У блоба с налёту не нашел описаний похожего поведения, кластерные индексы могут расти обратно при планах обслуживания индекса, но не самого шринка.
...
Рейтинг: 0 / 0
02.03.2020, 17:44
    #39933152
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рост веса таблицы при сжатии
Подозреваю, что размер таблицы растет из-за фрагментации BLOB.
...
Рейтинг: 0 / 0
02.03.2020, 19:46
    #39933188
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рост веса таблицы при сжатии
Danion,

при ваших объемах я бы советовал вам перегнать таблицы в новые ФГ, с последующим удалением старых.
да это "больше" в плане трудозатрат, но экономичнее в плане ресурсов времени и IO.

на тему вредности shrink уже столько всего написано.
лучше всего наверное с аггрегацией у Брента:
https://www.brentozar.com/archive/2009/08/stop-shrinking-your-database-files-seriously-now/

куча ссылок и рекомендаций: не используете shrink
...
Рейтинг: 0 / 0
04.03.2020, 05:13
    #39933842
Idol_111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рост веса таблицы при сжатии
felix_ff,

Если пол базы пустая, почему бы и не использовать шринк.

Другое дело, что делать это с лагом всего в 5% (30Гб), очень затратная затея. И про 18 дней не такая уж фантастика :). Хотя бы стольник оставили и все шринканулось бы за несколько часов.
...
Рейтинг: 0 / 0
04.03.2020, 13:22
    #39934088
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рост веса таблицы при сжатии
Idol_111,
Потому что еще после шринка базу нужно будет приводить в порядок. А все это время которое потребуется на обслуживание конечные пользователи будут страдать и выносить дба мозги.

Ну если организация допускает такие моменты то пожалуйста
...
Рейтинг: 0 / 0
06.03.2020, 00:58
    #39934981
Idol_111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рост веса таблицы при сжатии
felix_ff
Idol_111,
Потому что еще после шринка базу нужно будет приводить в порядок.

А вот это момент если можно по-подробней.
Что хотите там улучшить? Не забываем, что на дворе 2020 год, а не системы прошлого века.
...
Рейтинг: 0 / 0
06.03.2020, 02:23
    #39934994
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рост веса таблицы при сжатии
Idol_111
felix_ff
Idol_111,
Потому что еще после шринка базу нужно будет приводить в порядок.

А вот это момент если можно по-подробней.
Что хотите там улучшить? Не забываем, что на дворе 2020 год, а не системы прошлого века.


А вы не забывайте что шринк это не просто освобождение неиспользуемого места для ОС (не говорим сейчас про TRUNCATE ONLY).
Он перемещает страницы данных. После него такая каша будет в плане внешней фрагментации - закачаешься.
После него нужно еще все индексы на затронутых таблицах перестраивать и вот тут вот как раз и есть обратная сторона медали - процесс затратный и дорогой, а пока вы их будете ребилдить получите еще тонну писем от возмущенных пользователей почему сегодня система работает очень медленно.
...
Рейтинг: 0 / 0
06.03.2020, 06:40
    #39935002
Idol_111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рост веса таблицы при сжатии
felix_ff,

внешняя фрагментация имела существенное значение лет 10 назад, а сейчас при современных шибко "умных" хранилищах, вы и понятия не будете иметь где ваши данные находятся и как расположены.

Я тоже балуюсь этой ерундой (ребилдингом) по привычке. Толку от него около ноля.
...
Рейтинг: 0 / 0
06.03.2020, 13:53
    #39935188
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рост веса таблицы при сжатии
Idol_111,

именно, даже если это не NAS, а HDD, то логические головки и диски не отображают физическое расположение.
...
Рейтинг: 0 / 0
06.03.2020, 14:14
    #39935199
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Рост веса таблицы при сжатии
Владислав Колосов
Idol_111,

именно, даже если это не NAS, а HDD, то логические головки и диски не отображают физическое расположение.
То есть, получается, можно шринк всех баз вставить в ежедневное обслуживание?
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Рост веса таблицы при сжатии / 25 сообщений из 26, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]