Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Вопрос по сжатию данных SQL 2012  [new]
pugovka
Member

Откуда:
Сообщений: 36
Добрый день, коллеги.
Небольшой вопрос по включению сжатия данных на SQL Server 2012.
Есть таблица, в которой содержится, порядка, 30000 записей. Необходимо включить компрессию данных типа PAGE. Для данной таблицы была запущена команда:

ALTER TABLE имя таблицы REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = PAGE);
GO

Было ли выполнено сжатие данных, которые уже были в таблице до момента включения компрессии или сжатие будет применятся только для новых данных? Нужно ли дополнительно запускать процедуру для сжатия индексов данной таблицы?
29 окт 15, 16:24    [18344729]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по сжатию данных SQL 2012  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
Пережмет все данные. К сжатию следует подходить осторожно, т.к. при изменении схемы столбцов произойдет распаковка-упаковка.
29 окт 15, 16:35    [18344826]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по сжатию данных SQL 2012  [new]
o-o
Guest
pugovka
Нужно ли дополнительно запускать процедуру для сжатия индексов данной таблицы?

нужно оно вам или нет, решать вам
a ваша команда пожмет только таблицу, индексы нет.
для сжатия индексов
ALTER INDEX ALL ON ...
REBUILD WITH (DATA_COMPRESSION = PAGE);
29 окт 15, 17:19    [18345126]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по сжатию данных SQL 2012  [new]
запоздалый зип
Guest
pugovka,

да, 30тыс - самое оно. уже пора.
29 окт 15, 17:48    [18345311]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по сжатию данных SQL 2012  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
запоздалый зип
pugovka,

да, 30тыс - самое оно. уже пора.
Не, поздно уже. Логи переполнят дисковые массивы. Нужно начинать с 1000 записей.
29 окт 15, 18:09    [18345427]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по сжатию данных SQL 2012  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
А вы проверили, что после сжатия ваша таблица не стенет... больше?
29 окт 15, 18:11    [18345439]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по сжатию данных SQL 2012  [new]
o-o
Guest
какие все издеватели,
может, это натуральное big data!!!

create table dbo.big_data (col char(8000));
insert into dbo.big_data (col)
select top 30000 '0'
from sys.all_columns c1 cross join sys.all_columns c2
--234,375 MB

alter table dbo.big_data rebuild 
with (data_compression = page); 
--0,344 MB

почти в 1000 раз
:P
29 окт 15, 18:27    [18345539]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по сжатию данных SQL 2012  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
Для тех, кто в тренде

DATA_COMPRESSION = COLUMNSTORE_ARCHIVE
DATA_COMPRESSION = COLUMNSTORE
29 окт 15, 18:52    [18345681]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по сжатию данных SQL 2012  [new]
o-o
Guest
что-то меня осенило.
это вопрос с собеседования.
и автор -- Гавриленко.
30000 строк и партиции там для того,
чтобы первую реакцию собеседуемого отследить.
но т.к. реакция 0, то провокация продолжается:
вот какая разница, сколько строк,
если степень сжатия зависит от типов колонок и от повторяемости данных?
если на 30000 от сжатия таблицу раздует,
то и на 30000000 раздует
29 окт 15, 18:53    [18345685]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по сжатию данных SQL 2012  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
o-o
если степень сжатия зависит от типов колонок и от повторяемости данных?
На этом стандартная процеура sys.sp_estimate_data_compression_savings как бы и построена.
29 окт 15, 18:58    [18345719]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по сжатию данных SQL 2012  [new]
o-o
Guest
a_voronin
Для тех, кто в тренде

DATA_COMPRESSION = COLUMNSTORE_ARCHIVE
DATA_COMPRESSION = COLUMNSTORE

ой!
меня сбил с толку 2012-ый сервер.
вот если бы 2014-ый был,
то была бы 100%-ная уверенность, что собеседователь -- a_voronin.
в тренде, бренде и с бренди.
для тех, кто не в теме:
a_voronin не только увольняет ДБА, он их еще и собеседует (отсюда 18074909 и до конца темы)
29 окт 15, 19:04    [18345742]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по сжатию данных SQL 2012  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
o-o
a_voronin
Для тех, кто в тренде

DATA_COMPRESSION = COLUMNSTORE_ARCHIVE
DATA_COMPRESSION =
-- проекция 1
CREATE PROJECTION Facts.prj_Stock2_chrt_quantity
(
pk_date100 ENCODING RLE,
pk_date ENCODING RLE,
NM_id ENCODING DELTARANGE_COMP,
IMT_id ENCODING DELTARANGE_COMP,
brand_cod ENCODING RLE,
kind_id ENCODING RLE,
collection_id ENCODING DELTARANGE_COMP,
subject_id ENCODING DELTARANGE_COMP,
subject_brand_id ENCODING DELTARANGE_COMP,
chrt_qty ENCODING DELTARANGE_COMP,
days_on_site ENCODING RLE,
IsNew_Int ENCODING RLE
)

AS
SELECT
f.pk_date100 AS pk_date100,
f.pk_date AS pk_date,
f.NM_id AS NM_id,
MAX(f.IMT_id) AS IMT_id,
MAX(f.brand_cod) AS brand_cod,
MAX(f.kind_id) AS kind_id,
MAX(f.collection_id) AS collection_id,
MAX(f.subject_id) AS subject_id,
MAX(f.subject_id + f.brand_cod * 100000000::BIGINT) AS subject_brand_id,
COUNT(f.chrt_id) AS chrt_qty,
MAX(days_on_site) AS days_on_site,
MIN(IsNew_Int) AS IsNew_Int
FROM Facts.Stock2 f
GROUP BY pk_date100, pk_date, NM_id;


ой!
меня сбил с толку 2012-ый сервер.
вот если бы 2014-ый был,
то была бы 100%-ная уверенность, что собеседователь -- a_voronin.
в тренде, бренде и с бренди.
для тех, кто не в теме:
a_voronin не только увольняет ДБА, он их еще и собеседует (отсюда 18074909 и до конца темы)


Так почему вы до сих пор не побывали у меня на собеседовании? ДБА тонка?

Настоящая компрессия данных она вот тут

+

-- проекция 1
CREATE PROJECTION Facts.prj_Stock2_chrt_quantity 
(
    pk_date100  ENCODING RLE,
    pk_date  ENCODING RLE,
    NM_id ENCODING DELTARANGE_COMP, 
    IMT_id ENCODING DELTARANGE_COMP,
    brand_cod  ENCODING RLE,
    kind_id  ENCODING RLE,
	collection_id ENCODING DELTARANGE_COMP, 
	subject_id ENCODING DELTARANGE_COMP, 
	subject_brand_id ENCODING DELTARANGE_COMP,
    chrt_qty ENCODING DELTARANGE_COMP,
	days_on_site  ENCODING RLE,
	IsNew_Int  ENCODING RLE
)

AS 
SELECT 
    f.pk_date100						AS pk_date100,
    f.pk_date							AS pk_date,
    f.NM_id								AS NM_id, 
    MAX(f.IMT_id)						AS IMT_id,
    MAX(f.brand_cod)					AS brand_cod,
    MAX(f.kind_id)						AS kind_id,
	MAX(f.collection_id)				AS collection_id, 
	MAX(f.subject_id) 					AS subject_id,
	MAX(f.subject_id + f.brand_cod * 100000000::BIGINT)				AS subject_brand_id,
    COUNT(f.chrt_id) 					AS chrt_qty,
	MAX(days_on_site) 					AS days_on_site,
	MIN(IsNew_Int) 						AS IsNew_Int
FROM Facts.Stock2 f
GROUP BY pk_date100, pk_date, NM_id; 


29 окт 15, 19:07    [18345752]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по сжатию данных SQL 2012  [new]
o-o
Guest
Гавриленко Сергей Алексеевич
o-o
если степень сжатия зависит от типов колонок и от повторяемости данных?
На этом стандартная процеура sys.sp_estimate_data_compression_savings как бы и построена.

а мне показалось, вы попытались собеседуемого дальше с толку сбить,
продолжая начатую ранее тему "30000 записей -- самое время подумать о сжатии".
но теперь вопрос снят, a_voronin себя выдал с потрохами
----
to a_voronin:
прибегу, как только вы опубликуете давно обещанный ответ
на вами же придуманный вопрос "что там с фрагментацией *кластерных индексов* в инмемори"
29 окт 15, 19:14    [18345780]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по сжатию данных SQL 2012  [new]
pugovka
Member

Откуда:
Сообщений: 36
o-o,

это не вопрос из собеседования. это реально существующая задача.
30 окт 15, 10:30    [18347510]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по сжатию данных SQL 2012  [new]
Glory
Member

Откуда:
Сообщений: 104751
pugovka
это не вопрос из собеседования. это реально существующая задача.

Т.е. реально кто-то озадачился вопросом "как сжать 30 000 записей" ?
30 окт 15, 10:32    [18347527]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по сжатию данных SQL 2012  [new]
o-o
Guest
Если это реальная таблица на реальном сервере,
разве не быстрее проверить compression в sys.partitions для индексов?
30 окт 15, 10:35    [18347542]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по сжатию данных SQL 2012  [new]
pugovka
Member

Откуда:
Сообщений: 36
вопрос заключался в том, применилось ли сжатие для старых данных после выполнения команды

ALTER TABLE имя таблицы REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = PAGE);
GO

Т.к. обьем таблицы уменьшился всего на 400 Мб и данная команда выполнялась по времени меньше 1 минуты.
30 окт 15, 10:47    [18347599]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по сжатию данных SQL 2012  [new]
Glory
Member

Откуда:
Сообщений: 104751
pugovka
вопрос заключался в том, применилось ли сжатие для старых данных после выполнения команды

А хелп про это вы уже прочитали ?
30 окт 15, 10:47    [18347608]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по сжатию данных SQL 2012  [new]
pugovka
Member

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

да, читали. Но если Вы посоветуюте хороший материал про сжатие данных, это было бы хорошо.
Спасибо
30 окт 15, 10:51    [18347631]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по сжатию данных SQL 2012  [new]
Glory
Member

Откуда:
Сообщений: 104751
pugovka
да, читали.

И что же именно вы прочитали про
ALTER TABLE имя таблицы REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = PAGE); ?

pugovka
Но если Вы посоветуюте хороший материал про сжатие данных, это было бы хорошо.

Т.е. в хелпе материал плохлой ?
30 окт 15, 10:53    [18347636]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по сжатию данных SQL 2012  [new]
pugovka
Member

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

Нет, не плохой. первый раз столкнулись с сжатием данных, остались вопросы, поэтому и появился первоначальный вопрос на форуме. Хотелось услышать рекомендации по вполнению данной процедуры от коллег, которые с этим уже сталкивались.
30 окт 15, 10:58    [18347659]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по сжатию данных SQL 2012  [new]
o-o
Guest
pugovka
вопрос заключался в том, применилось ли сжатие для старых данных после выполнения команды

ALTER TABLE имя таблицы REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = PAGE);
GO

Т.к. обьем таблицы уменьшился всего на 400 Мб и данная команда выполнялась по времени меньше 1 минуты.

блин, 30000 строк сколько ж вы хотели, чтоб он перестаивал, час что ли?
вопросов было 2, но на оба ответ лежит в sys.partitions.
т.к. или компрессия есть, или ее нет.

при включенной компрессии меняется структура записи, и в таблице не может быть страниц с записями
FixedVar-структуры и сжатой одновременно.
другое дело, сколько он мог применить именно запрошенное PAGE compression.
ROW compression делается безоговорочно, раз заказано (и у вас оно будет, т.к. page compression включает row compression),
а с page compression, если выигрыша не будет, он не утруждается
30 окт 15, 11:02    [18347681]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по сжатию данных SQL 2012  [new]
Glory
Member

Откуда:
Сообщений: 104751
pugovka
остались вопросы,

Вопросы остаются, когда вы _что-то_ прочитаете про команду/опцию
А вы по всей видимости вообще ничего не прочитали и начали фантазировать вроде "а если бы он вез снаряды"

BOL - ALTER TABLE

DATA_COMPRESSION
Specifies the data compression option for the specified table, partition number, or range of partitions. The options are as follows:

NONE
Table or specified partitions are not compressed.

ROW
Table or specified partitions are compressed by using row compression.

PAGE
Table or specified partitions are compressed by using page compression.

To rebuild multiple partitions at the same time, see index_option (Transact-SQL). If the table does not have a clustered index, changing the data compression rebuilds the heap and the nonclustered indexes. For more information about compression, see Creating Compressed Tables and Indexes and Overview of UNICODE Compression.
30 окт 15, 11:02    [18347683]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по сжатию данных SQL 2012  [new]
o-o
Guest
pugovka
Хотелось услышать рекомендации по вполнению данной процедуры от коллег, которые с этим уже сталкивались.

а советы были.
вы их проигнорировали:
Гавриленко Сергей Алексеевич
А вы проверили, что после сжатия ваша таблица не стенет... больше?

Гавриленко Сергей Алексеевич
o-o
если степень сжатия зависит от типов колонок и от повторяемости данных?
На этом стандартная процеура sys.sp_estimate_data_compression_savings как бы и построена.
30 окт 15, 11:05    [18347697]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по сжатию данных SQL 2012  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
pugovka
Glory,

Нет, не плохой. первый раз столкнулись с сжатием данных, остались вопросы, поэтому и появился первоначальный вопрос на форуме. Хотелось услышать рекомендации по вполнению данной процедуры от коллег, которые с этим уже сталкивались.


Посмотрите, может вот этот вариант вам будет полезен.

http://www.codeproject.com/Articles/16934/Using-CLR-integration-to-compress-BLOBs-CLOBs-in-S
30 окт 15, 11:15    [18347747]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить