Рассмотрим ещё одну новую возможность, которая появилась в 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 таблицы:
1
2
3
4
5
6
7
|
--Простая таблица с текстовым полем create table SimpleTable ( val varchar ( max ) ); go --Таблица с GZIP create table SimpleTableGZIP ( val varbinary( max ) ); go |
Наполним данными:
1
2
3
4
5
6
7
8
9
|
--SIMPLE insert into SimpleTable select replicate( 'A' , 10000); go 1000 --GZIP insert into SimpleTableGZIP select compress ( replicate( 'A' , 10000) ); go 1000 |
Теперь сравним их объём:
1
2
3
4
5
6
7
8
|
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' ) ); |
А теперь небольшой тест на скорость вставки:
1
2
3
4
5
6
7
8
9
10
|
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 |
И тест на извлечение данных:
1
2
3
4
5
6
7
8
9
10
|
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 |
Автор: Alexey Knyazev
*** *** *** *** *** *** *** *** *** *** *** ***
Полезные Скрипты
Рубрика Проверь себя
Ссылка на наш канал YouTube