Cache Fusion
Cache Fusion — это технология когерентности кэша (cache coherence), используемая в кластерных базах данных Oracle Real Application Clusters (RAC), которая позволяет нескольким экземплярам базы данных, работающим на разных узлах (серверах) кластера, одновременно обращаться к общему набору дисковых данных без необходимости физического копирования блоков данных между узлами. Вместо этого Cache Fusion обеспечивает передачу образов блоков данных между кэшами экземпляров через высокоскоростное межсоединение (interconnect), что устраняет необходимость в повторном чтении данных с диска и значительно повышает производительность и масштабируемость.
История и предпосылки
До появления Oracle RAC (ранее — Oracle Parallel Server, OPS) в конце 1990-х годов, кластерные базы данных сталкивались с проблемой «ложного разделения» (false sharing) и конфликтов доступа к общим данным. В ранних версиях OPS (Oracle 7 и 8) использовалась модель «дискового слияния» (Disk Fusion): при изменении блока данных одним экземпляром он записывался на диск, а затем другие экземпляры считывали его заново. Это приводило к значительным накладным расходам на операции ввода-вывода (I/O) и снижало производительность.
С выходом Oracle 9i в 2001 году была представлена технология Cache Fusion, которая кардинально изменила архитектуру кластерных баз данных. Вместо записи изменённых блоков на диск для их передачи между узлами, Cache Fusion использует межсоединение (обычно InfiniBand или Gigabit Ethernet) для прямой передачи блоков между кэшами SGA (System Global Area) экземпляров. Это позволило сократить задержки на порядок и сделало RAC реальным решением для высоконагруженных систем.
Принцип работы
Cache Fusion основан на распределённой модели когерентности кэша с использованием глобального управления блокировками (Global Cache Service, GCS) и глобального управления очередями (Global Enqueue Service, GES). Каждый блок данных в базе имеет «глобальный владелец» (Global Resource Directory, GRD), который отслеживает, какой экземпляр в данный момент держит блок в определённом режиме (чтение, запись, эксклюзивный доступ).
Основные режимы доступа
- S (Shared) — блок может быть прочитан несколькими экземплярами одновременно.
- X (Exclusive) — блок может быть изменён только одним экземпляром.
- NULL — блок не кэширован ни одним экземпляром.
Процесс передачи блока
- Запрос на чтение: Если экземпляр A запрашивает блок, который уже кэширован экземпляром B в режиме S, GCS инициирует передачу блока через межсоединение. Экземпляр B отправляет копию блока напрямую, без обращения к диску.
- Запрос на запись: Если экземпляр A хочет изменить блок, который экземпляр B держит в режиме S, GCS сначала переводит блок в режим X на экземпляре A. Для этого экземпляр B «сбрасывает» (invalidates) свою копию блока, а затем A получает эксклюзивный доступ. Если блок уже был в режиме X на другом экземпляре, он передаётся напрямую.
- Конфликтные ситуации: При одновременных запросах на запись от разных экземпляров GCS использует очередь глобальных блокировок для сериализации доступа, что гарантирует целостность данных.
Роль Global Cache Service (GCS)
GCS — это распределённый сервис, работающий на всех узлах кластера, который управляет метаданными о блокировках и состоянии кэшированных блоков. Он поддерживает таблицу Global Resource Directory (GRD), которая хранит информацию о том, какой экземпляр является «владельцем» или «держателем» (holder) каждого блока. GCS координирует передачу блоков между узлами, минимизируя количество сообщений по межсоединению.
Архитектурные компоненты
Global Cache Service (GCS) и Global Enqueue Service (GES)
- GCS отвечает за управление блоками данных (data blocks) и их когерентностью.
- GES управляет не-блоковыми ресурсами, такими как блокировки строк (row locks) и табличные блокировки (table locks).
Оба сервиса работают на каждом экземпляре и взаимодействуют через протоколы межсоединения.
Межсоединение (Interconnect)
Для работы Cache Fusion требуется высокоскоростное, надёжное межсоединение между узлами кластера. Обычно используются:
- InfiniBand — низкая задержка (менее 1 мкс) и высокая пропускная способность (до 200 Гбит/с).
- Gigabit Ethernet — более дешёвое решение, но с большей задержкой (10–50 мкс).
- RDMA (Remote Direct Memory Access) — позволяет передавать данные напрямую из памяти одного узла в память другого без участия процессора, что снижает нагрузку на CPU.
Global Resource Directory (GRD)
GRD — это распределённая база данных, хранящаяся в памяти каждого экземпляра. Она содержит записи о каждом блоке, который кэширован хотя бы одним экземпляром. Записи включают:
- Идентификатор блока (file# + block#).
- Текущий режим (S, X, NULL).
- Список экземпляров, держащих блок.
- Состояние передачи (если блок находится в процессе миграции).
Преимущества
- Снижение I/O: Блоки передаются между кэшами, а не записываются на диск и считываются заново. Это особенно важно для OLTP-систем, где часты мелкие транзакции.
- Масштабируемость: Cache Fusion позволяет добавлять узлы кластера без деградации производительности, так как накладные расходы на когерентность растут линейно (а не экспоненциально, как в некоторых других решениях).
- Высокая доступность: При отказе одного узла его кэшированные блоки могут быть восстановлены из кэша другого узла или с диска, что минимизирует время простоя.
- Прозрачность для приложений: Приложения не требуют модификации для работы в кластере — Cache Fusion работает на уровне базы данных.
Ограничения и недостатки
- Зависимость от межсоединения: Производительность Cache Fusion сильно зависит от задержек и пропускной способности сети. Плохо настроенное межсоединение может стать узким местом.
- Сложность конфигурации: Требуется тщательная настройка параметров, таких как
gc_lck_procs,gc_files_to_locks, и мониторинг статистикиglobal cache(например,gc cr block receive time). - Потребление памяти: GRD и метаданные GCS занимают память SGA, что может быть проблемой для систем с очень большим количеством блоков.
- Проблемы с «горячими» блоками: Если несколько экземпляров часто конкурируют за один и тот же блок (например, для обновления одной строки), Cache Fusion может вызывать дополнительные накладные расходы на передачу блоков между узлами.
Применение
Cache Fusion является ключевой технологией Oracle RAC, которая используется в:
- Корпоративных системах управления базами данных (СУБД): для обеспечения высокой доступности и масштабируемости критически важных приложений (ERP, CRM, банковские системы).
- Облачных решениях: Oracle Exadata и Oracle Cloud Infrastructure (OCI) используют RAC с Cache Fusion для предоставления управляемых баз данных с гарантированной производительностью.
- Системах реального времени: где требуется минимальное время отклика и максимальная пропускная способность.
Сравнение с альтернативами
| Технология | Модель когерентности | Типичные задержки | Применение |
|---|---|---|---|
| Cache Fusion (Oracle RAC) | Прямая передача блоков через сеть | 1–50 мкс | Кластеры Oracle |
| Disk Fusion (Oracle OPS) | Запись/чтение с диска | 1–10 мс | Устаревшая технология |
| Shared Disk (IBM DB2) | Блокировки через дисковый контроллер | 0.5–5 мс | Кластеры DB2 |
| Shared Nothing (NoSQL) | Партиционирование данных | 0.1–1 мс | Распределённые системы |
Интересные факты
- Cache Fusion был разработан под руководством вице-президента Oracle по разработке баз данных Хуана Лоа (Juan Loaiza) и впервые представлен в 2001 году.
- Технология позволяет передавать блоки данных между узлами со скоростью до 10 ГБ/с при использовании InfiniBand.
- В Oracle 10g была добавлена поддержка «глобального кэша» для автоматического управления передачей блоков, что упростило администрирование.
Критика
Основная критика Cache Fusion связана с его сложностью и стоимостью. Для эффективной работы требуется дорогостоящее сетевое оборудование (InfiniBand) и лицензирование Oracle RAC, которое является платным дополнением к стандартной лицензии Oracle Database. Кроме того, в некоторых сценариях (например, при интенсивных операциях DML на одной таблице) Cache Fusion может не давать ожидаемого прироста производительности из-за накладных расходов на синхронизацию.
Источники
- Oracle Database Concepts, 19c, Chapter 8: Real Application Clusters (RAC)
- Oracle Real Application Clusters Administration and Deployment Guide, 19c
- «Cache Fusion: The Oracle RAC Architecture» — Oracle White Paper, 2003
- Loaiza, J. et al. «Oracle Real Application Clusters: A New Approach to High Availability and Scalability» — Proceedings of the VLDB Endowment, 2002
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →