powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Поэтапное сжатие БД MS SQL Server
25 сообщений из 107, страница 1 из 5
Поэтапное сжатие БД MS SQL Server
    #40113649
cad2206
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

На MS SQL Server имеется БД. Ее размер 830ГБт. Появилось желание сжать ее и попробовать в работе. На тестовом сервере сжал исходя из этой статьи https://infostart.ru/1c/articles/692209/. По времени около 20 часов. После сжатия тестировали, в производительности выиграли сильно.

Исходя из то, что остановить работу на 20 часов не представляется возможным (объекты работают с утра до вечера 7 дней в неделю), вопрос: Как поэтапно, скажем за несколько ночей сжать базу? Имея ввиду еще то, что ночью запускается обслуживание БД (бекап, дефрагментация индексов, обновление статистики)

Пока на ум приходит алгоритм 1:
1. Получили список таблиц (в БД их порядка 5000)
2. Поделили на части (например по 500 таблиц), сохранили эти части где то в виде списков таблиц (получится 10 частей)
2. И каждую ночь прогоняем по одной части

Или алгоритм 2:
1. Каждую ночь получаем список таблиц и пробегаем по нему до наступления утра.
2. Если встречаем таблицу или индекс с параметром сжатия NONE, сжимаем его
По идее за несколько проходов вся база сожмется. Но я не нашел как получить параметр сжатия именно у индекса.

Или есть более грамотные решения?
...
Рейтинг: 0 / 0
Поэтапное сжатие БД MS SQL Server
    #40113651
архивариус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cad2206,

давно нашел скрипт (он для SAP изначально) может пригодится:
...
Рейтинг: 0 / 0
Поэтапное сжатие БД MS SQL Server
    #40113654
cad2206
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
архивариус,
посмотрел скрипт, мудрено. Но не понял в чем его особенность. Он так же долго будет сжимать базу. Или я что то проглядел?
...
Рейтинг: 0 / 0
Поэтапное сжатие БД MS SQL Server
    #40113669
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cad2206
Добрый день.

На MS SQL Server имеется БД. Ее размер 830ГБт. Появилось желание сжать ее и попробовать в работе. На тестовом сервере сжал исходя из этой статьи https://infostart.ru/1c/articles/692209/. По времени около 20 часов. После сжатия тестировали, в производительности выиграли сильно.

Исходя из то, что остановить работу на 20 часов не представляется возможным (объекты работают с утра до вечера 7 дней в неделю), вопрос: Как поэтапно, скажем за несколько ночей сжать базу? Имея ввиду еще то, что ночью запускается обслуживание БД (бекап, дефрагментация индексов, обновление статистики)

Пока на ум приходит алгоритм 1:
1. Получили список таблиц (в БД их порядка 5000)
2. Поделили на части (например по 500 таблиц), сохранили эти части где то в виде списков таблиц (получится 10 частей)
2. И каждую ночь прогоняем по одной части

Или алгоритм 2:
1. Каждую ночь получаем список таблиц и пробегаем по нему до наступления утра.
2. Если встречаем таблицу или индекс с параметром сжатия NONE, сжимаем его
По идее за несколько проходов вся база сожмется. Но я не нашел как получить параметр сжатия именно у индекса.

Или есть более грамотные решения?


1. Чудеса, прям, глаголите.
Сжали усе и... завертелось.
Мой хрустальный шар немного потрескался, но более вероятно, что перестроение индексов вызвало обновление статистики.

2. Ну хотите и не можете найти (хотя искали ли?) признак сжатия на таблице. Делаете списочек таблиц и по одной табличке из списка ночью сжимаете.

3. Займитесь более продуктивной деятельностью.
...
Рейтинг: 0 / 0
Поэтапное сжатие БД MS SQL Server
    #40113672
архивариус
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cad2206,

никаких особенностей, он просто делает то что вам нужно. хотите свой пишите.
...
Рейтинг: 0 / 0
Поэтапное сжатие БД MS SQL Server
    #40113675
4es
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
4es
Гость
cad2206
Но я не нашел как получить параметр сжатия именно у индекса.

Код: sql
1.
2.
3.
4.
5.
select
   object_name(i.object_id) as ObjectName, i.name as IndexName, p.data_compression, p.data_compression_desc, p.partition_id
from sys.indexes i
inner join sys.partitions p
   on p.object_id = i.object_id and p.index_id = i.index_id
...
Рейтинг: 0 / 0
Поэтапное сжатие БД MS SQL Server
    #40113680
cad2206
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222,

1. Сжал, отдал 1С программистам на тесты, 3 дня тестировали нагрузку и т.п. Показали результаты, прирост в производительности есть. Делали тестирование и исправление БД, все в норме. Чего ожидать можно еще?

2. Признак сжатия таблицы я могу найти, например так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT st.name,
       CAST(ROUND(((SUM(au.total_pages)*8)/1024.00), 2) AS NUMERIC(36, 2)) AS TotalSpaceMB,
       CAST(ROUND(((SUM(au.used_pages)*8)/1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB,
       sp.index_id,
       sp.data_compression
FROM sys.tables st
LEFT JOIN  sys.partitions sp on st.object_id = sp.object_id
INNER JOIN sys.allocation_units au ON sp.partition_id = au.container_id

group by st.name, sp.index_id, sp.data_compression
order by UsedSpaceMB desc


Я не могу найти признак сжатия именно у индекса таблицы.
Сжимать по одной таблице за ночь 5000 таблиц, это как бы 13 лет)

3. "Займитесь более продуктивной деятельностью." - например? Я без всякого сарказма. Предполагаю, что чего то могу не понимать, поэтому и пишу тут.
...
Рейтинг: 0 / 0
Поэтапное сжатие БД MS SQL Server
    #40113683
cad2206
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
архивариус,
спасибо. Но мне бы хотелось получить советы, как грамотно организовать алгоритм поэтапного сжатия, не останавливая работу.
...
Рейтинг: 0 / 0
Поэтапное сжатие БД MS SQL Server
    #40113686
cad2206
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
4es,
спасибо
...
Рейтинг: 0 / 0
Поэтапное сжатие БД MS SQL Server
    #40113704
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222

1. Чудеса, прям, глаголите.
Сжали усе и... завертелось.
Мой хрустальный шар немного потрескался, но более вероятно, что перестроение индексов вызвало обновление статистики.


Почему это чудеса?
Вполне реально, что производительность улучшилась просто за счет того, что теперь с диска меньше данных читается.
...
Рейтинг: 0 / 0
Поэтапное сжатие БД MS SQL Server
    #40113721
cad2206
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И вопрос, ответ на который поможет мне быстрее понять, как правильно сделать: команда ALTER TABLE 'TableName' REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE) сжимает данные в таблице, или же только устанавливает флаг сжатия и сжимаются данные, которые пишутся в нее после установки флага?
Если только устанавливается флаг, то данные сжимаются командой DBCC SHRINKDATABASE?
...
Рейтинг: 0 / 0
Поэтапное сжатие БД MS SQL Server
    #40113738
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cad2206
И вопрос, ответ на который поможет мне быстрее понять, как правильно сделать: команда ALTER TABLE 'TableName' REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE) сжимает данные в таблице, или же только устанавливает флаг сжатия и сжимаются данные, которые пишутся в нее после установки флага?
Если только устанавливается флаг, то данные сжимаются командой DBCC SHRINKDATABASE?


Рано те "сжимать таблицы". Учиться надо.

ALTER TABLE 'TableName' REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE)

Толсто намекает. А время, потребное для оной операции, подтверждает толстый намек.
...
Рейтинг: 0 / 0
Поэтапное сжатие БД MS SQL Server
    #40113743
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cad2206
aleks222,
1. Сжал, отдал 1С программистам на тесты, 3 дня тестировали нагрузку и т.п. Показали результаты, прирост в производительности есть. Делали тестирование и исправление БД, все в норме. Чего ожидать можно еще?


Ну я так понимаю, UPDATE STATISTICS with fullscan вы тоже делали?
И тоже тестировали?
...
Рейтинг: 0 / 0
Поэтапное сжатие БД MS SQL Server
    #40113755
.Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про сжатие онлайн автору темы кто-нибудь говорил, про версию его сервера спрашивали?
...
Рейтинг: 0 / 0
Поэтапное сжатие БД MS SQL Server
    #40113804
cad2206
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222,
авторРано те "сжимать таблицы". Учиться надо.
Как раз я и учусь. Поэтому и вопросы задаю. А можно научиться не пробуя?

авторALTER TABLE 'TableName' REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE)

Толсто намекает. А время, потребное для оной операции, подтверждает толстый намек.
Да, уже убедился.


авторНу я так понимаю, UPDATE STATISTICS with fullscan вы тоже делали?
Нет, с параметром FULLSCAN не запускал, обновлял так:
Код: sql
1.
2.
3.
use DBName
GO  
exe sp_updatestats


Стоит обновить с этим параметром?
...
Рейтинг: 0 / 0
Поэтапное сжатие БД MS SQL Server
    #40113807
cad2206
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
.Евгений,
авторПро сжатие онлайн автору темы кто-нибудь говорил
Пока не говорили, надеюсь Вы подскажете)

авторпро версию его сервера спрашивали?
Тестирую на 2014 и на 2019
...
Рейтинг: 0 / 0
Поэтапное сжатие БД MS SQL Server
    #40113817
.Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cad2206,

сжатие возможно выполнять онлайн (не на всех версиях MS SQL). В большинстве случаев это позволяет не останавливать работу (но подтормаживать ее).
...
Рейтинг: 0 / 0
Поэтапное сжатие БД MS SQL Server
    #40113821
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо еще понять, а какие действия именно ТС называет "сжатием базы".
...
Рейтинг: 0 / 0
Поэтапное сжатие БД MS SQL Server
    #40113825
cad2206
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
.Евгений,
Понял, про что Вы.
Код: sql
1.
alter index IndexName on TableName rebuild with (resumable = on, online = on)


Нужно экспериментировать.
...
Рейтинг: 0 / 0
Поэтапное сжатие БД MS SQL Server
    #40113828
cad2206
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,
Именно те действия, которые описаны в статье, ссылку на которую я указал в первом сообщении (https://infostart.ru/1c/articles/692209/) и затем возвратить свободное место на диск методом DBCC SHRINKDATABASE
...
Рейтинг: 0 / 0
Поэтапное сжатие БД MS SQL Server
    #40113833
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cad2206
.Евгений,
Понял, про что Вы.
Код: sql
1.
alter index IndexName on TableName rebuild with (resumable = on, online = on)


Нужно экспериментировать.


C (resumable = on) осторожнее экспериментируйте.

Остановка процесса не отменяет операцию, а ставит ее на паузу.
Это значит что у вас по прежнему будет висеть недоделанная версия индекса и любая модификация будет затрагивать оба этих индекса.

Для полной отмены нужно выполнить alter index ... abort
...
Рейтинг: 0 / 0
Поэтапное сжатие БД MS SQL Server
    #40113839
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КритикВполне реально, что производительность улучшилась просто за счет того, что теперь с диска меньше данных читается.Такое может получится только если CPU (лицензируемое) некуда девать, а дисковая система полный шлак.
Надувной матрас - классное решение для маленькой квартирки, но надувать его по вечерам и сдувать по утрам - так себе занятие.

cad2206Или есть более грамотные решения? С какого-то возраста появился вопрос «Зачем?» (с)
Мой хрустальный шар показывает зуд попробовать новую игрушку что для (объекты работают с утра до вечера 7 дней в неделю) может быть чреватым.
cad2206 "Займитесь более продуктивной деятельностью." - например? Я без всякого сарказма. Предполагаю, что чего то могу не понимать, поэтому и пишу тут.ИМХО имеет смысл сжимать только партиции со старыми данными, которые никому особо не нужны, замерив выгоду для сжатия и решив стоит ли оно того.
Вместо сжатия ВСЕГО ПОДРЯД посмотрите на свои таблицы. Уверен что из 5000 большая часть это справочники которые сжимать нет смысла.
Выберите десяток другой больших таблиц (желательно секционированых по дате) и сжимайте только старые партиции в которых нет записи (а лучше и чтения). Их (монстров) можно сжимать и вручную написаным скриптом.
...
Рейтинг: 0 / 0
Поэтапное сжатие БД MS SQL Server
    #40113843
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257
Такое может получится только если CPU (лицензируемое) некуда девать, а дисковая система полный шлак.




Какой бы крутой не была дисковая подсистема, она все равно будет существенно уступать по скорости RAM.

При включении сжатия данных, в тот же объем RAM уместиться больше (иногда, значительно) данных, и это снизит (иногда, значительно) количество необходимых физических чтений.
...
Рейтинг: 0 / 0
Поэтапное сжатие БД MS SQL Server
    #40113844
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cad2206,

Если после DBCC SHRINKDATABASE улучшилась производительность, то возможны проблемы с физическим носителем, начиная от фрагментации и заканчивая повторяющимися чтениями секторов диска. Либо диск как-то не так отформатирован. После сжатия производительность слегка ухудшается.
...
Рейтинг: 0 / 0
Поэтапное сжатие БД MS SQL Server
    #40113850
cad2206
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,
Хм, все СХД только SSD...
...
Рейтинг: 0 / 0
25 сообщений из 107, страница 1 из 5
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Поэтапное сжатие БД MS SQL Server
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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