Сжатие HCC в Oracle Live SQL

Tags: data, Oracle

Ранее мы писали об Oracle Live SQL, бесплатной службе Oracle, где вы можете попробовать свои навыки кодирования и научиться использовать свою обширную библиотеку кода. Сегодня мы хотели бы осветить одну из ее других функций, которые не могут быть широко известны: сжатие.

Если вы используете эту услугу, вы знаете, что она предоставляет всего несколько мегабайт для вашей временной схемы, которой обычно достаточно для простых небольших таблиц и индексов для использования в ваших тестах. Кроме того, они предоставляют публичные схемы с некоторыми образцами данных. Но что, если вы хотите насытить ее большим объемом данных для своих тестов? Вы можете использовать Oracle Compression для своих объектов. И вы можете быть удивлены, узнав, что у вас будет не только ожидаемое базовое и OLTP-сжатие, но и надлежащее сжатие HCC. Я думаю, из этого вы можете догадаться, какой вид на бэкэнде у вас есть для службы!

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

CREATE TABLE t1_nocompress AS SELECT * FROM
(SELECT rownum t1_id, object_id p1, object_name p2, owner p3 FROM all_objects),(SELECT rownum FROM dual CONNECT BY LEVEL <=2);

SELECT segment_name,blocks,bytes/1024 bytes_k FROM user_segments;


Из этого мы получили сегмент 8192 Kb, который может быть недостаточно большим, чтобы увидеть реальную разницу в размере для разных типов сжатия, но мы все равно попробуем. Давайтесоздать объект с расширенным сжатием и посмотрим, сохранит ли он какое-либо пространство.

DROP TABLE t1_nocompress purge;

CREATE TABLE t1_advcompress ROW store compress advanced AS SELECT * FROM
(SELECT rownum t1_id, object_id p1, object_name p2, owner p3 FROM all_objects),(SELECT rownum FROM dual CONNECT BY LEVEL <=2);


Итак, вместо 8192 Kb мы имеем 7168 Kb. Экономия 1M пространства не очень впечатляет. Что делать, если попробовать гибридное сжатие столбцов (HCC)?

DROP TABLE t1_advcompress purge;

CREATE TABLE t1_hccquerylow COLUMN store compress FOR query low AS SELECT * FROM
(SELECT rownum t1_id, object_id p1, object_name p2, owner p3 FROM all_objects),(SELECT rownum FROM dual CONNECT BY LEVEL <=2);

Размер сегмента уменьшился до 2048 Kb или 4 раза. Это выглядит лучше. Что, если мы попробуем HCC с высоким уровнем сжатия запросов?

DROP TABLE t1_hccquerylow purge;

CREATE TABLE t1_hccqueryhigh COLUMN store compress FOR query high AS SELECT * FROM
(SELECT rownum t1_id, object_id p1, object_name p2, owner p3 FROM all_objects),(SELECT rownum FROM dual CONNECT BY LEVEL <=2);

Сегмент был всего лишь 832 Кбайт, что почти в 10 раз уменьшает объем. В результате мы могли бы создать таблицу с в 10 раз больше строк. Исходная таблица была создана с 109054 строками.

DROP TABLE t1_hccqueryhigh purge;

CREATE TABLE t1_hccqueryhigh COLUMN store compress FOR query high AS SELECT * FROM
(SELECT rownum t1_id, object_id p1, object_name p2, owner p3 FROM all_objects),(SELECT rownum FROM dual CONNECT BY LEVEL <=20);

SELECT COUNT(*) FROM t1_hccqueryhigh;

Теперь у нас есть таблица с 1090540 строками, а размер сегмента - 8192 Kb. Следовательно, если вам нужна таблица из 1 миллиона строк для теста Oracle Live SQL, сжатие HCC может стать вашим спасителем.

Очень хорошо иметь сжатие HCC и базу данных в функциях памяти на бесплатной службе для разработчиков. Это может помочь вам понять, как это работает и, возможно, проверить некоторые из ваших сценариев.

No Comments

Add a Comment