by Alexey Knyazev
28. декабря 2015 02:16
Рассмотрим ещё одну новую возможность, которая появилась в SQL Server 2016 CTP 3.1. Это встроенная поддержка сжатия GZIP: COMPRESS и DECOMPRESS.
В данной статье я попробую оценить эффективность использования встроенного сжатия. Посмотрим, какой объём занимают сжатые данные и оценим время, которое SQL Server тратит на сжатие и извлечение данных.
Для начала убедитесь, что вы используете SQL Server 2016 CTP 3.1 и выше. Я использую Microsoft SQL Server 2016 (CTP3.2) - 13.0.900.73 (X64) Dec 10 2015 18:49:31 Copyright (c) Microsoft Corporation Enterprise Evaluation Edition (64-bit) on Windows 10 Enterprise 6.3 <X64> (Build 10586: ).
Создадим 2 таблицы:
--Простая таблица с текстовым полем
create table SimpleTable ( val varchar(max) );
go
--Таблица с GZIP
create table SimpleTableGZIP ( val varbinary(max) );
go
Наполним данными:
--SIMPLE
insert into SimpleTable
select replicate('A', 10000);
go 1000
--GZIP
insert into SimpleTableGZIP
select compress ( replicate('A', 10000) );
go 1000
Теперь сравним их объём:
select object_name( object_id ) table_name
, reserved_page_count
, ( reserved_page_count ) * 8. sizeKb
, row_count
from sys.dm_db_partition_stats
where object_id in ( object_id( 'SimpleTable' )
, object_id( 'SimpleTableGZIP' )
);
А теперь небольшой тест на скорость вставки:
set statistics time on;
go
insert into SimpleTable
select t1.name + t2.name from sys.all_objects t1, sys.all_objects t2;
go
insert into SimpleTableGZIP
select compress ( t1.name + t2.name ) from sys.all_objects t1, sys.all_objects t2;
go
set statistics time off;
go
И тест на извлечение данных:
set statistics time on;
go
select * into #t1
from SimpleTable
go
select decompress(val) val into #t2
from SimpleTableGZIP;
go
set statistics time off;
go