|
Сжатие пользователских баз данных на уровне таблиц
|
|||
---|---|---|---|
#18+
Доброго дня всем. Есть задача добавить в план обслуживания такой T-SQL скрипт, который будет каждый запуск плана обслуживания шуршать по не системным базам данных и делать сжатие на уровне таблиц (там где его нет (было уже выполнено)). MS SQL 2019 Есть скрипт, но он работает только на запросе к базе данных и отрабатывает как надо. Вот его бы как нибудь допилить на массовую работу (или поочередную). Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 15:29 |
|
Сжатие пользователских баз данных на уровне таблиц
|
|||
---|---|---|---|
#18+
ownsmir, (DATA_COMPRESSION = PAGE) Не делайте этого. Лучше посмотрите в сторону колумнстора. Он него сжатие куда более эффективное. А вместо ваших курсоров Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 15:35 |
|
Сжатие пользователских баз данных на уровне таблиц
|
|||
---|---|---|---|
#18+
a_voronin ownsmir, (DATA_COMPRESSION = PAGE) Не делайте этого. Лучше посмотрите в сторону колумнстора. Он него сжатие куда более эффективное. А вместо ваших курсоров Код: sql 1.
Если есть возможность, можете накидать как с колумнстором будет...? А то так себе разбираюсь в T-SQL ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 16:08 |
|
Сжатие пользователских баз данных на уровне таблиц
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 16:10 |
|
Сжатие пользователских баз данных на уровне таблиц
|
|||
---|---|---|---|
#18+
a_voronin Я конечно извиняюсь, но времени изучать новый язык для написания рабочего скрипта для рабочей среды баз данных у меня нет, по этому и написал сюда в надежде на помощь с готовым решением, которое смогу использовать на проде как говорится. Вместо курсоров тоже не особо понял что Ваш код делает ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 16:16 |
|
Сжатие пользователских баз данных на уровне таблиц
|
|||
---|---|---|---|
#18+
ownsmir, у колумнстора свои особенности и побочные эффекты слепо на него переходить не стоит ownsmirЕсть скрипт, но он работает только на запросе к базе данных и отрабатывает как надо. Вот его бы как нибудь допилить на массовую работу (или поочередную). напишите простой цикл по перебору нужных вам баз и для каждой выполните данный скрипт, сделав его динамическим ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 16:18 |
|
Сжатие пользователских баз данных на уровне таблиц
|
|||
---|---|---|---|
#18+
komrad ownsmir, у колумнстора свои особенности и побочные эффекты слепо на него переходить не стоит ownsmirЕсть скрипт, но он работает только на запросе к базе данных и отрабатывает как надо. Вот его бы как нибудь допилить на массовую работу (или поочередную). напишите простой цикл по перебору нужных вам баз и для каждой выполните данный скрипт, сделав его динамическим все мои попытки его написать (выдрав из скриптов которые работают по всем базам) не работают... Я по этому написал сюда, потому что не знаю как его написать, а времени разбираться нет, стоит задача, Админа баз данных в штате нет к большому моему сожалению... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 16:25 |
|
Сжатие пользователских баз данных на уровне таблиц
|
|||
---|---|---|---|
#18+
komrad ownsmir, напишите простой цикл по перебору нужных вам баз и для каждой выполните данный скрипт, сделав его динамическим Там не со всем нужных, там всех кроме системных, базы ежедневно меняются (удаляются, добавляются) и нужно их отлавливать и обрабатывать ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 16:26 |
|
Сжатие пользователских баз данных на уровне таблиц
|
|||
---|---|---|---|
#18+
ownsmir komrad ownsmir, напишите простой цикл по перебору нужных вам баз и для каждой выполните данный скрипт, сделав его динамическим Там не со всем нужных, там всех кроме системных, базы ежедневно меняются (удаляются, добавляются) и нужно их отлавливать и обрабатывать ну, например, так : Код: sql 1.
после/вместо print db_name() вставляете нужный вам скрипт ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 16:39 |
|
Сжатие пользователских баз данных на уровне таблиц
|
|||
---|---|---|---|
#18+
komrad ownsmir пропущено... Там не со всем нужных, там всех кроме системных, базы ежедневно меняются (удаляются, добавляются) и нужно их отлавливать и обрабатывать ну, например, так : Код: sql 1.
после/вместо print db_name() вставляете нужный вам скрипт Спасибо огромное за уже зацепочку. Выглядит совсем не как в интернете все что находил. Работает, но почему-то показывает не все базы данных ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 16:43 |
|
Сжатие пользователских баз данных на уровне таблиц
|
|||
---|---|---|---|
#18+
ownsmir Работает, но почему-то показывает не все базы данных пропущены следующие базы: 1) недоступные 2) в однопользовательском режиме 3) системные 4) в режиме только для чтения ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 16:48 |
|
Сжатие пользователских баз данных на уровне таблиц
|
|||
---|---|---|---|
#18+
ownsmir komrad ownsmir, напишите простой цикл по перебору нужных вам баз и для каждой выполните данный скрипт, сделав его динамическим Там не со всем нужных, там всех кроме системных, базы ежедневно меняются (удаляются, добавляются) и нужно их отлавливать и обрабатывать не хотел, но не выдержал, запятые - х.с.н., но б***ь же ж, вы хоть сами понимаете, что пишете? "Я по этому написал сюда"-> поэтому "не со всем нужных" - > не совсем нужных ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 16:59 |
|
Сжатие пользователских баз данных на уровне таблиц
|
|||
---|---|---|---|
#18+
ownsmir, сжатие имеет неприятные последствия, например, при изменении таблицы, колонку добавить или еще что, будет автоматически перезалита вся таблица. Сжимать следует лишь то, что очень редко изменяется. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 17:09 |
|
Сжатие пользователских баз данных на уровне таблиц
|
|||
---|---|---|---|
#18+
Владислав Колосов сжатие имеет неприятные последствия ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 19:20 |
|
Сжатие пользователских баз данных на уровне таблиц
|
|||
---|---|---|---|
#18+
Давайте танцевать от печки - какую цель преследуете? Пока что я вижу - спонсор скриптов производитель систем хранения. Убей диски, загрузи их ненужной работой, заполни диск с логами баз и повтори это на следующий день. Вместо этого рекомендую делать DBCC CHECKDB - шуршать будет также, но с пользой, плюс не будет расти лог. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 21:28 |
|
Сжатие пользователских баз данных на уровне таблиц
|
|||
---|---|---|---|
#18+
Ролг Хупин ownsmir пропущено... Там не со всем нужных, там всех кроме системных, базы ежедневно меняются (удаляются, добавляются) и нужно их отлавливать и обрабатывать не хотел, но не выдержал, запятые - х.с.н., но б***ь же ж, вы хоть сами понимаете, что пишете? "Я по этому написал сюда"-> поэтому "не со всем нужных" - > не совсем нужных Учитили руского езыка падьехоли... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 09:10 |
|
Сжатие пользователских баз данных на уровне таблиц
|
|||
---|---|---|---|
#18+
SERG1257 Давайте танцевать от печки - какую цель преследуете? Пока что я вижу - спонсор скриптов производитель систем хранения. Убей диски, загрузи их ненужной работой, заполни диск с логами баз и повтори это на следующий день. Вместо этого рекомендую делать DBCC CHECKDB - шуршать будет также, но с пользой, плюс не будет расти лог. Дело происходит в тестовой среде для разрабов. Базы по 300гб, памяти не хватает, по этому надо их ужать на сколько это возможно. Базы ежедневно восстанавливаются с рабочих, удаляется. В ручную сжимаю скриптом из 290гб становится 30гб. Но каждый день этим заниматься по 5-6 часов надоело, хочется чтобы этим занимался скрипт, по всем базам которые не сжаты. Т.е. базу восстановили, она 300гб, ночью план обслуживания отработал и на утро она 30 гигов. Вся цель ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 09:13 |
|
Сжатие пользователских баз данных на уровне таблиц
|
|||
---|---|---|---|
#18+
ownsmir Дело происходит в тестовой среде для разрабов. Базы по 300гб, памяти не хватает, по этому надо их ужать на сколько это возможно. ...Т.е. базу восстановили, она 300гб, ночью план обслуживания отработал и на утро она 30 гигов. Вся цель то есть, на восстановление (всех?) места хватает и всё сжатие только для того, чтобы количество свободного места на диске радовало глаз в течение дня? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 10:15 |
|
Сжатие пользователских баз данных на уровне таблиц
|
|||
---|---|---|---|
#18+
komrad ownsmir Дело происходит в тестовой среде для разрабов. Базы по 300гб, памяти не хватает, по этому надо их ужать на сколько это возможно. ...Т.е. базу восстановили, она 300гб, ночью план обслуживания отработал и на утро она 30 гигов. Вся цель то есть, на восстановление (всех?) места хватает и всё сжатие только для того, чтобы количество свободного места на диске радовало глаз в течение дня? Не совсем. Если бы места было куча, я бы сейчас не заморачивался, а так приходится отслеживать появление новых баз. И запускать скрипт на сжатие в ручную, иначе приходит ошибочка что места нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 11:00 |
|
Сжатие пользователских баз данных на уровне таблиц
|
|||
---|---|---|---|
#18+
ownsmir Не совсем. Если бы места было куча, я бы сейчас не заморачивался, а так приходится отслеживать появление новых баз. И запускать скрипт на сжатие в ручную, иначе приходит ошибочка что места нет. это, конечно, не лучший вариант, но попробуйте включить компрессию на диске, на котором лежат базы - если это даст такой же эффект, что и компрессия баз, то это будет заменой. а что там с логами? может будеть достаточно переводить в симпл и обрезать логи? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 11:22 |
|
Сжатие пользователских баз данных на уровне таблиц
|
|||
---|---|---|---|
#18+
komrad ownsmir пропущено... Там не со всем нужных, там всех кроме системных, базы ежедневно меняются (удаляются, добавляются) и нужно их отлавливать и обрабатывать ну, например, так : Код: sql 1.
после/вместо print db_name() вставляете нужный вам скрипт Не хочет работать((( Что получилось: exec sp_msforeachdb 'use [?]; if db_id()<5 or databasepropertyex(db_name(),''Updateability'')=''READ_ONLY'' return; DECLARE @Table_catalog NVARCHAR(128) DECLARE @Table_schema NVARCHAR(128) DECLARE @Table_name NVARCHAR(128) DECLARE @Index_Name NVARCHAR(128) DECLARE @cmd VARCHAR(4000) -- включение сжатия для таблиц DECLARE TableNameCursor CURSOR FOR SELECT Table_catalog, Table_schema, Table_name FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' ORDER BY Table_catalog, Table_schema, Table_name OPEN TableNameCursor FETCH NEXT FROM TableNameCursor INTO @Table_catalog, @Table_schema, @Table_name WHILE @@fetch_status = 0 BEGIN PRINT @Table_catalog + '.' + @Table_schema + '.' + @Table_name SET @cmd = 'ALTER TABLE [' + @Table_catalog + '].[' + @Table_schema + '].[' + @Table_name + '] REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE)' EXEC (@cmd) FETCH NEXT FROM TableNameCursor INTO @Table_catalog, @Table_schema, @Table_name END CLOSE TableNameCursor DEALLOCATE TableNameCursor -- включение сжатия для индексов DECLARE IndexCursor CURSOR FOR SELECT DB_NAME(), schemas.name, tables.name, indexes.name FROM sys.schemas as schemas inner join sys.tables as tables inner join sys.indexes as indexes on tables.object_id = indexes.object_id on schemas.schema_id = tables.schema_id ORDER BY schemas.name, tables.name, indexes.name; OPEN IndexCursor FETCH NEXT FROM IndexCursor INTO @Table_catalog, @Table_schema, @Table_name, @Index_Name WHILE @@fetch_status = 0 BEGIN PRINT @Table_catalog + '.' + @Table_schema + '.' + @Table_name + ': ' + @Index_Name SET @cmd = 'ALTER INDEX [' + @Index_Name + '] ON [' + @Table_catalog + '].[' + @Table_schema + '].[' + @Table_name + '] REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE)' EXEC (@cmd) FETCH NEXT FROM IndexCursor INTO @Table_catalog, @Table_schema, @Table_name, @Index_Name END CLOSE IndexCursor DEALLOCATE IndexCursor -- делаем шринк базы - возвращаем свободное место на диск SELECT @cmd=( SELECT 'DBCC SHRINKDATABASE('''+ DB_NAME() + ''')' ) EXEC (@cmd);' что выдает: Сообщение 102, уровень 15, состояние 1, строка 12 Неправильный синтаксис около конструкции "BASE". Сообщение 102, уровень 15, состояние 1, строка 22 Неправильный синтаксис около конструкции " EXEC (@cmd) FETCH NEXT FROM TableNameCursor INTO @Table_catalog, @Table_schema, @Table_name END CLOSE TableNameCur". Сообщение 102, уровень 15, состояние 1, строка 45 Неправильный синтаксис около конструкции " EXEC (@cmd) FETCH NEXT FROM IndexCursor INTO @Table_catalog, @Table_schema, @Table_name, @Index_Name END CLOSE Inde". Сообщение 102, уровень 15, состояние 1, строка 55 Неправильный синтаксис около конструкции " ) EXEC (@cmd);". ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 11:50 |
|
Сжатие пользователских баз данных на уровне таблиц
|
|||
---|---|---|---|
#18+
ownsmir komrad после/вместо print db_name() вставляете нужный вам скрипт Не хочет работать((( "TABLE_TYPE = 'BASE TABLE'" все кавычки исходного скрипта надо задвоить/экранировать т.е. "TABLE_TYPE = ''BASE TABLE''" и так далее ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 11:54 |
|
Сжатие пользователских баз данных на уровне таблиц
|
|||
---|---|---|---|
#18+
ownsmir Ролг Хупин пропущено... не хотел, но не выдержал, запятые - х.с.н., но б***ь же ж, вы хоть сами понимаете, что пишете? "Я по этому написал сюда"-> поэтому "не со всем нужных" - > не совсем нужных Учитили руского езыка падьехоли... не "учитили езвга", но долбо*бами тоже быть не стоит, ведь профессия предполагает, что человек учился в ВУЗе, не так ли? А если он неграмотен, то какой из него специолизд? парадокс ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 11:59 |
|
Сжатие пользователских баз данных на уровне таблиц
|
|||
---|---|---|---|
#18+
komrad ownsmir пропущено... Не хочет работать((( "TABLE_TYPE = 'BASE TABLE'" все кавычки исходного скрипта надо задвоить/экранировать т.е. "TABLE_TYPE = ''BASE TABLE''" и так далее Спасибо за ответ. Поправил: exec sp_msforeachdb 'use [?]; if db_id()<5 or databasepropertyex(db_name(),''Updateability'')="READ_ONLY"" return; DECLARE @Table_schema NVARCHAR(128) DECLARE @Table_name NVARCHAR(128) DECLARE @Index_Name NVARCHAR(128) DECLARE @cmd VARCHAR(4000) -- включение сжатия для таблиц DECLARE TableNameCursor CURSOR FOR SELECT Table_catalog, Table_schema, Table_name FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = "BASE TABLE" ORDER BY Table_catalog, Table_schema, Table_name OPEN TableNameCursor FETCH NEXT FROM TableNameCursor INTO @Table_catalog, @Table_schema, @Table_name WHILE @@fetch_status = 0 BEGIN PRINT @Table_catalog + '.' + @Table_schema + '.' + @Table_name SET @cmd = "ALTER TABLE [' + @Table_catalog + '].[' + @Table_schema + '].[' + @Table_name + '] REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE)" EXEC (@cmd) FETCH NEXT FROM TableNameCursor INTO @Table_catalog, @Table_schema, @Table_name END CLOSE TableNameCursor DEALLOCATE TableNameCursor -- включение сжатия для индексов DECLARE IndexCursor CURSOR FOR SELECT DB_NAME(), schemas.name, tables.name, indexes.name FROM sys.schemas as schemas inner join sys.tables as tables inner join sys.indexes as indexes on tables.object_id = indexes.object_id on schemas.schema_id = tables.schema_id ORDER BY schemas.name, tables.name, indexes.name; OPEN IndexCursor FETCH NEXT FROM IndexCursor INTO @Table_catalog, @Table_schema, @Table_name, @Index_Name WHILE @@fetch_status = 0 BEGIN PRINT @Table_catalog + '.' + @Table_schema + '.' + @Table_name + ': ' + @Index_Name SET @cmd = "ALTER INDEX [' + @Index_Name + '] ON [' + @Table_catalog + '].[' + @Table_schema + '].[' + @Table_name + '] REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE)" EXEC (@cmd) FETCH NEXT FROM IndexCursor INTO @Table_catalog, @Table_schema, @Table_name, @Index_Name END CLOSE IndexCursor DEALLOCATE IndexCursor -- делаем шринк базы - возвращаем свободное место на диск SELECT @cmd=( SELECT "DBCC SHRINKDATABASE('''+ DB_NAME() + ''')" ) EXEC (@cmd);' Ругается на Неверный синтаксис BEGIN PRINT @Table_catalog + '.' + @Table_schema + '.' + @Table_name SET @cmd = "ALTER TABLE [' + @Table_catalog + '].[' + @Table_schema + '].[' + @Table_name + '] REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE)" EXEC (@cmd) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 13:13 |
|
|
start [/forum/topic.php?fid=46&msg=40103534&tid=1684211]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 137ms |
0 / 0 |