OceanBaseデータベースは、パラメータを使用してメモリの使用状況を設定および管理できます。
説明
以下に記載されているパラメータの詳細については、構成パラメータとシステム変数の概要セクションを参照してください。
OBServerノードの総メモリ
OBServerノードのすべてのメモリの上限を示します。つまり、すべてのテナントを合計しても超えることができない上限であり、2つのパラメータによって制御されます:
memory_limit_percentage:物理マシンまたはコンテナの物理メモリの割合。
memory_limit:絶対値。
memory_limit が 0M 以外の場合、memory_limit を上限として使用します。それ以外の場合は、memory_limit_percentage から計算された値を上限として使用します。
高優先順位予約メモリ
特に重要な基盤モジュールに予約された領域を示します。
memory_reservedパラメータで設定できます。
500テナントメモリ
500テナントの予約メモリを示し、system_memoryパラメータで設定できます。
これは制限(limit)という意味ではありません。現在の実装では、500テナントが実際に使用できるメモリはsystem_memoryを超える可能性がありますが、他のテナントが使用できるメモリはmemory_limit - system_memoryの値を超えることはできません。
ビジネステナントのメモリ
ビジネステナントのメモリは、テナントがUnitを作成する際に指定します。コマンド例は以下のとおりです。
create resource unit if not exists sp_trans_test MAX_CPU=1, MEMORY_SIZE='5G', MAX_IOPS=128000, MIN_IOPS=128000, LOG_DISK_SIZE='2G';
create resource pool if not exists sp_trans_test unit='sp_trans_test', unit_num=1;
create tenant if not exists sp_trans_test RESOURCE_POOL_LIST=('sp_trans_test') set ob_tcp_invited_nodes='%';
OceanBaseデータベースは、Unitの仕様を動的に調整することをサポートしています(縮小は慎重に行う必要があります)。
alter RESOURCE UNIT sp_trans_test MAX_CPU=1, MEMORY_SIZE='6G';
システムテナントは、ビューを通じてUnitの仕様を照会できます。
obclient> SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS\G
*************************** 1. row ***************************
UNIT_CONFIG_ID: 1
NAME: sys_unit_config
MAX_CPU: 2.5
MIN_CPU: 2.5
MEMORY_SIZE: 17179869184
LOG_DISK_SIZE: 17179869184
MAX_IOPS: 25000
MIN_IOPS: 25000
IOPS_WEIGHT: 2
*************************** 2. row ***************************
UNIT_CONFIG_ID: 1001
NAME: unit001
MAX_CPU: 2
MIN_CPU: 2
MEMORY_SIZE: 6442450944
LOG_DISK_SIZE: 19327352832
MAX_IOPS: 20000
MIN_IOPS: 20000
IOPS_WEIGHT: 2
*************************** 3. row ***************************
UNIT_CONFIG_ID: 1004
NAME: sp_trans_test
MAX_CPU: 1
MIN_CPU: 1
MEMORY_SIZE: 5368709120
LOG_DISK_SIZE: 2147483648
MAX_IOPS: 128000
MIN_IOPS: 128000
IOPS_WEIGHT: 0
3 rows in set
テナントメモリの分類
テナントメモリは、MemStoreとSQL実行の2種類に分類されます。
MemStore
主にデータベースの増分データを保存するために使用されます。MemStoreの上限はパラメータMemStore_limit_percentageで制御され、これはテナントのMemStoreがテナントの総メモリ上限の最大で占めることができる割合を示します。freeze_trigger_percentageパラメータは、ダンプのタイミングを制御するために使用され、MemStoreメモリがMemStore上限の特定の割合に達した場合にダンプをトリガーするように設定します。テナントのMemStore使用状況は内部テーブルで確認できます。
MySQL [oceanbase]> select * From GV$OB_MEMSTORE; +-----------+----------------+-------+-----------+-----------+---------------------+---------------------+------------+ | TENANT_ID | IP | PORT | ACTIVE | TOTAL | FREEZE_TRIGGER | MEM_LIMIT | FREEZE_CNT | +-----------+----------------+-------+-----------+-----------+---------------------+---------------------+------------+ | 1 | xx.xx.xx.xx | 46824 | 169792200 | 171966464 | 5153960700 | 10307921440 | 0 | | 500 | xx.xx.xx.xx | 46824 | 0 | 0 | 3689348814741910300 | 7378697629483820640 | 0 | | 1001 | xx.xx.xx.xx | 46824 | 33539200 | 35651584 | 382730200 | 858993440 | 0 | | 1002 | xx.xx.xx.xx | 46824 | 0 | 228589568 | 34359738350 | 68719476720 | 0 | +-----------+----------------+-------+-----------+-----------+---------------------+---------------------+------------+SQL実行
SQL実行に必要なメモリおよびスループット向上のためのキャッシュ、例えばSQL実行計画などを指します。
ob_sql_work_area_percentageはSQLワークエリアメモリパラメータであり、SQLが大量のメモリを消費する可能性のあるブロッカーオペレータが使用するメモリを示します。
sysテナントのメモリ
前述のとおり、sysテナントは実体テナントであり、その管理メカニズムは業務テナントと完全に同一です。