OceanBaseデータベースでは、パラメータを使用してメモリの使用状況を設定および管理できます。
説明
以下に述べるパラメータの詳細については、構成パラメータとシステム変数の概要を参照してください。
OBServerノードの総メモリ
OBServerノードのすべてのメモリの上限を表します。つまり、すべてのテナントが合計しても超えることのできない上限であり、以下の2つのパラメータによって制御されます:
memory_limit_percentage:物理マシンまたはコンテナの物理メモリの割合。
memory_limit:絶対値。
memory_limit が 0M 以外の場合、memory_limit を上限として使用します。それ以外の場合は、memory_limit_percentage から計算された値を上限として使用します。
高優先順位予約メモリ
特に重要な基盤モジュールのために予約された領域を示します。
memory_reservedパラメータで設定できます。
テナント500のメモリ
テナント500の予約メモリを表します。system_memoryパラメータで設定できます。
これはリミットの意味ではありません。現在の実装では、テナント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テナントはエンティティテナントであり、その管理メカニズムは業務テナントと完全に同一です。