Меню
На этом сайте используются файлы cookie. Нажимая ПРИНЯТЬ или продолжая просмотр сайта, вы разрешаете их использование. Подробнее

ПРИНЯТЬ
Тест: Oracle In-memory и Exadata Cell Memory
В Oracle Database версии 12.1.0.2 для работы с хранилищами данных появился новый формат поколоночного хранения данных, предназначенный для обработки информации в оперативной памяти (формат In-Memory или IM).
При работе c данными в формате In-Memory используются низкоуровневые процессорные инструкции типа "Single Instruction Multiple Data" (SIMD) позволяющие обеспечить параллелизм на уровне данных. Это позволяет очень быстро находить запрошенные данные при просмотре таблиц, представленных в In-Memory.

В Oracle Exadata Database Machine этот же формат стал применяться для кэширования запрашиваемых многократно данных во флэш-памяти серверов хранения (CellMemory).
Следует отметить, что ранее для Exadata был разработан формат для кэширования во flash-памяти данных, хранящихся в сжатом виде в таблицах Hybrid Columnar Compression (НСС). Многократно запрашиваемые данные могли автоматически помещаться в кэш на флэш-памяти в распакованном поколоночном формате, и последующие запросы к таблице выбирали данные уже из этого кэша, серьёзно экономя время на распаковку. Немаловажно отметить, что поколоночный формат для кэширования распакованных HCC-данных не позволяет использовать для обработки инструкции SIMD.

Начиная с версии Oracle Database 12.2.0.1, для Exadata появилась возможность флэш-кэширования данных в формате In-Memory. Далее в семействе БД 12.2 продолжалось совершенствование механизма кэширования в формате IM, и в версии 18с появилась возможность кэширования данных таблиц HCC в формате IM (а не в распакованном формате HCC). Однако для использования такого подхода нужно было обязательно отвести хотя бы 100 МБ оперативной памяти под хранилище данных IM. То есть, параметр INMEMORY_SIZE должен быть, как минимум 100 мегабайт.

В текущей версии БД 19с уже можно автоматически флэш-кэшировать в формате IM данные любых таблиц, в том числе со сжатием в формате OLTP. Кроме того, начиная с БД версии 19.8 появилась возможность кэшировать данные в формате IM, не резервируя оперативную память на серверах БД. Для этого при INMEMORY_SIZE=0 нужно просто задать INMEMORY_FORCE=CELLMEMORY_LEVEL.
Не следует забывать, что для использования кэширования формата CellMemory во флэш-памяти серверов хранения, как и для обработки данных в оперативной памяти в формате In-Memory, необходимо приобрести лицензию на использование опции In-Memory.

Ниже представлены результаты тестирования In-Memory и CellMemory
проведённые нами на Oracle Database 19.8
1
В нашем распоряжении был программно-аппаратный комплекс Exadata X4-2 Quarter Rack
(2 узла баз данных по 256 GB оперативной памяти на каждом + 3 сервера хранения по 96 GB оперативной памяти и 3 TB Flash Cache на каждом)
2
Для опытов использовался известный генератор нагрузки SwingBench
имитирующий систему приёма и обработки заказов
3
В настройках SwingBench мы отключили все DML-операции
оставив только запросы типа OLTP (просмотр информации о продукте или заказе) и типа DSS (отчёты об остатках и движении на складах и т.п.).
Были проведены две серии экспериментов
1
на схемах со scale factor = 100 GB
(SF-100)
2
на схемах со scale factor = 1 ТB
(SF-1000)
Все индексы, кроме первичных ключей, были удалены. Эффект оценивали главным образом в терминах пропускной способности, т.е. количества выполнений нескольких эталонных запросов в единицу времени.
-
Сначала на схеме SF-100 было проверено, может ли использование CellMemory дать эффект без In-Memory
Оказалось, что включение параметра
INMEMORY_FORCE = CELLMEMORY_LEVEL 
при значении
INMEMORY_SIZE = 0 
позволяет увеличить пропускную способность почти в 3 раза по сравнению с конфигурацией без In-Memory и без CellMemory.
Но поскольку включение CellMemory требует лицензии на In-Memory option, наибольший интерес представляет совместное использование In-Memory и CellMemory.
В серии тестов на схеме SF-100 выяснилось
что включение CellMemory не даёт заметного эффекта, если все запрашиваемые данные умещаются в выделенный In-Memory pool.
Такой результат представляется вполне очевидным и ожидаемым.
Поэтому, если объём оперативной памяти ненамного меньше объёма активных данных
использование In-Memory позволяет увеличить пропускную способность в 150-200 раз (например, для одного из эталонных запросов – с 255 до 50000 выполнений за 30 минут).
Однако далеко не всегда можно выделить In-Memory pool такого размера, чтобы он вмещал все запрашиваемые данные.
Поэтому были проведены две серии экспериментов с явно недостаточным размером In-Memory pool:
1
5 GB для схемы SF-100
2
50 GB для схемы SF-1000
Результаты получились следующие:
Пропускная способность на 20-25% больше
В серии тестов на схеме SF-1000
с включённым кэшированием CellMemory
(INMEMORY_FORCE = CELLMEMORY_LEVEL)
чем при выключенном кешировании (INMEMORY_FORCE=DEFAULT)
В 4-5 раз выросло количество выполнений эталонных запросов
В серии аналогичных тестов на схеме SF-100
В 2-4 раза уменьшилось среднее время выполнения запроса
В серии аналогичных тестов на схеме SF-100
Резкое снижение загрузки CPU - с 60-70% до 12-20%
Наблюдалось на серверах хранения в обеих сериях экспериментов при включённой CellMemory
Резкое снижение интенсивности ввода-вывода - с 2000 IOPS
до 160 IOPS
Наблюдалось на серверах хранения в обеих сериях экспериментов при включённой CellMemory
Таким образом, использование кэширования в CellMemory в формате IM позволяет повысить пропускную способность системы и сэкономить ресурсы серверов хранения как без использования обработки данных в оперативной памяти (IM), так и при её использовании.