Сжатие HCC в Oracle Live SQL
Ранее мы писали об 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; |
Размер сегмента уменьшился до 2048 Kb или 4 раза. Это выглядит лучше. Что, если мы попробуем HCC с высоким уровнем сжатия запросов?
DROP TABLE t1_hccquerylow purge; |
Сегмент был всего лишь 832 Кбайт, что почти в 10 раз уменьшает объем. В результате мы могли бы создать таблицу с в 10 раз больше строк. Исходная таблица была создана с 109054 строками.
DROP TABLE t1_hccqueryhigh purge; |
Теперь у нас есть таблица с 1090540 строками, а размер сегмента - 8192 Kb. Следовательно, если вам нужна таблица из 1 миллиона строк для теста Oracle Live SQL, сжатие HCC может стать вашим спасителем.
Очень хорошо иметь сжатие HCC и базу данных в функциях памяти на бесплатной службе для разработчиков. Это может помочь вам понять, как это работает и, возможно, проверить некоторые из ваших сценариев.