Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Компрессия таблиц и индексов  [new]
SlavaSQL
Member

Откуда: Moscow
Сообщений: 8
Дорогие коллеги!

Поставлена задача на MSSQL 2012 выполнить компрессию таблиц и индексов. Выполнять данную процедуру по каждой таблице по отдельности очень не хочется, а выполнить автоматом все таблицы и индексы все разом, не умею. "ДЛЯ ТЕХ, КТО НЕ ЗНАКОМ, В ВЕРСИИ 2012 ФУНКЦИЯ КОМПРЕСИИ ВЫПОЛНЯЕТ НЕ ТОЛЬКО СЖАТИЕ ДАННЫХ, А ЗА СЧЕТ МЕНЬШЕГО РАЗМЕРА, УВЕЛИЧИВАЕТСЯ СКОРОСТЬ СЧИТЫВАНИЯ, Т.Е. УВЕЛИЧИВАЕТСЯ ПРОИЗВОДИТЕЛЬНОСТЬ БАЗЫ"

ПРИМЕР:

-----------------------------------------------------------------------------------------------------------------------------------
-- сценарий выполняет компрессию таблицы "Person" на примере "AdventureWorks2008R2"
ALTER TABLE [Person].[Person] REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = PAGE)

GO


-- сценарий выполняет компрессию некластеризованного индекса таблицы "Person" по имени индекса, на примере "AdventureWorks2008R2"
ALTER INDEX [IX_Person_LastName_FirstName_MiddleName] ON [Person].[Person] REBUILD PARTITION = ALL WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = ON, ONLINE = ON, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, DATA_COMPRESSION = PAGE, MAXDOP = 12)
-----------------------------------------------------------------------------------------------------------------------------------




имеется простой для понимания код (также на примере тестовой базы AdventureWorks2008R2), который выдает все пользовательские таблицы базы и индексы. Попробуйте у себя на сервере на простой базе, соответственно заменив имя БД для пониманию результата.


-----------------------------------------------------------------------------------------------------------------------------------
-- список пользовательских таблиц базы данных
use AdventureWorks2008R2
declare @RTables as table (
id int identity (1,1),
Name varchar(250),
[object_id] bigint
)

insert into @RTables( Name, [object_id])
SELECT
name,
id
from sys.sysobjects
WHERE [type] = 'U'
ORDER BY name


-- отображение пользовательских таблиц

select * from @RTables

-- список индексов базы данных

use AdventureWorks2008R2
declare @RIndexes as table (
id int identity (1,1),
Name varchar(250),
[object_id] bigint

)

insert into @RIndexes (Name, [object_id])

select name, [object_id]
FROM sys.indexes
where [object_id] in (select [object_id] from @RTables)
and name is not null

-- отображение всех индексов по алфавиту

select * from @RIndexes
order by id asc

-----------------------------------------------------------------------------------------------------------------------------------

Вопрос заключается в следующем: Как можно выполнить процедуру так, чтобы компрессия выполнялась не по одной таблице, а по всем пользовательским таблица в базе одновременно и так же для индексов?
P.S. Думаю, вторая процедура поможет в решении данной задачи..., т.к. выдает весь список объектов, над которыми нужно выполнить компрессию.
12 мар 14, 13:09    [15709771]     Ответить | Цитировать Сообщить модератору
 Re: Компрессия таблиц и индексов  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8826
автор
по всем пользовательским таблица в базе одновременно
только если написать столько запросов на сжатие, сколько существует таблиц, и выполнить их разом с разных подключений .
12 мар 14, 13:15    [15709835]     Ответить | Цитировать Сообщить модератору
 Re: Компрессия таблиц и индексов  [new]
Glory
Member

Откуда:
Сообщений: 104751
SlavaSQL
"ДЛЯ ТЕХ, КТО НЕ ЗНАКОМ, В ВЕРСИИ 2012 ФУНКЦИЯ КОМПРЕСИИ ВЫПОЛНЯЕТ НЕ ТОЛЬКО СЖАТИЕ ДАННЫХ, А ЗА СЧЕТ МЕНЬШЕГО РАЗМЕРА, УВЕЛИЧИВАЕТСЯ СКОРОСТЬ СЧИТЫВАНИЯ, Т.Е. УВЕЛИЧИВАЕТСЯ ПРОИЗВОДИТЕЛЬНОСТЬ БАЗЫ"

Прежде, чем что-то прочитать из базы, придется в нее это что-то записать.

SlavaSQL
Вопрос заключается в следующем: Как можно выполнить процедуру так, чтобы компрессия выполнялась не по одной таблице, а по всем пользовательским таблица в базе одновременно и так же для индексов?

Руками написать цикл по списку таблиц с формированием динамического запроса

Сообщение было отредактировано: 12 мар 14, 13:21
12 мар 14, 13:20    [15709887]     Ответить | Цитировать Сообщить модератору
 Re: Компрессия таблиц и индексов  [new]
SlavaSQL
Member

Откуда: Moscow
Сообщений: 8
Владислав Колосов,
Этого как раз и хочется избежать, потому что есть Хранилища в нашей компании, в которую входит несколько сотен таблиц, а индексов и того больше и каждый день Хранилище увеличивается в размере и соответственно в БэкАпе и при добавлении новых таблиц нужно добавлять код, за этим не услежу на 100%. Поэтому данное решение не подходит к сожалению...
12 мар 14, 13:23    [15709917]     Ответить | Цитировать Сообщить модератору
 Re: Компрессия таблиц и индексов  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
SlavaSQL
Вопрос заключается в следующем: Как можно выполнить процедуру так, чтобы компрессия выполнялась не по одной таблице, а по всем пользовательским таблица в базе одновременно и так же для индексов?
Над одним объектом делать несколько онлайн-операций одновременно не получится. А ребилд всех таблицы разом может не одобрить ваша дисковая подсистема.
12 мар 14, 13:28    [15709962]     Ответить | Цитировать Сообщить модератору
 Re: Компрессия таблиц и индексов  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
SlavaSQL
Этого как раз и хочется избежать, потому что есть Хранилища в нашей компании, в которую входит несколько сотен таблиц, а индексов и того больше и каждый день Хранилище увеличивается в размере и соответственно в БэкАпе и при добавлении новых таблиц нужно добавлять код, за этим не услежу на 100%
Для того, чтобы все за всем было услежено, обычно нанимают отдельного человека или команду. DBA они называются.
12 мар 14, 13:29    [15709978]     Ответить | Цитировать Сообщить модератору
 Re: Компрессия таблиц и индексов  [new]
NickAlex66
Member

Откуда:
Сообщений: 319
SlavaSQL,

А вы не оценивали нагрузку на процессоры - компрессия/декомпрессия (доступна с SQL2008) ляжет на их плечи.
12 мар 14, 14:21    [15710502]     Ответить | Цитировать Сообщить модератору
 Re: Компрессия таблиц и индексов  [new]
SlavaSQL
Member

Откуда: Moscow
Сообщений: 8
NickAlex66,

проблем с производительностью процессоров пока нет и ОЗУ достаточно...
12 мар 14, 15:23    [15711114]     Ответить | Цитировать Сообщить модератору
 Re: Компрессия таблиц и индексов  [new]
NickAlex66
Member

Откуда:
Сообщений: 319
SlavaSQL,

Ну если процессоров завались, то компрессию вновь появляющихся таблиц, индексов можно, например, проводить как один из шагов обслуживания.
12 мар 14, 16:08    [15711541]     Ответить | Цитировать Сообщить модератору
 Re: Компрессия таблиц и индексов  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3754
sp_foreach ??
12 мар 14, 16:52    [15711941]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить