接続は一定のリソースを消費するため、多数の長時間接続はスペックの小さいテナントの安定性に影響します。OceanBaseデータベースでは、構成パラメータまたはシステム変数を使用して、テナントの最大接続数を設定できます。
テナントの最大接続数に関連する構成パラメータまたは変数は以下のとおりです:
max_connectionsシステム変数
max_connectionsは、テナント全体の最大接続数を制御します。現在、このシステム変数はMySQLモードでのみサポートされています。デフォルト値は2147483647で、取り得る範囲は [1,2147483647] です。この変数を変更した後は、OBServerノードを再起動しなければ変更が有効になりません。max_user_connectionsシステム変数
max_user_connectionsは、テナント内の単一ユーザーの最大同時接続数を制御します。現在、このシステム変数はMySQLモードでのみサポートされています。デフォルト値は0で、接続数に制限がないことを意味します。値が0より大きい場合、実際に設定された値が適用されます。取り得る範囲は [0,4294967295] です。この変数を変更した後は、OBServerノードを再起動しなければ変更が有効になりません。_resource_limit_max_session_numテナントレベルの非表示構成パラメータ
_resource_limit_max_session_numは、ユーザーテナント内の一般ユーザーの最大同時接続数を制御します。この構成パラメータは変更後すぐに反映され、OBServerノードの再起動は不要です。デフォルト値は0で、取り得る範囲は [0,1000000] です。この構成パラメータは通常、変更する必要はありません。非表示構成パラメータ
_resource_limit_max_session_numの値が0より大きい場合、実際に設定された値が適用されます。非表示構成パラメータ_resource_limit_max_session_numの値が0の場合、システム内部で一定のルールに基づいて最大接続数が自動的に計算されます。具体的な計算式は以下のとおりです:ユーザーテナントの最大同時接続数 = MAX(100, テナントの実際のメモリ * 5%/(100 KB))
ここで:
テナントの実際のメモリ:テナント作成時に割り当てられたリソースプール内のリソースユニットのメモリ(
memory_size)から、対応するMetaテナントのメモリを差し引いた値です。ユーザーテナントと対応するMetaテナントのメモリ割り当てについては、テナント内部のメモリ管理を参照してください。100:接続数の下限。100 KB:経験則により計算された、単一セッションが占有する可能性のあるメモリ量。
このアルゴリズムによれば、ユーザーテナントのメモリサイズ(
memory_size)が3GB、対応するMetaテナントのメモリが1GBの場合、テナントの実際のメモリは3 GB - 1 GB = 2 GBとなり、そのテナントの最大接続数はMAX(100, 2 GB * 5%/(100 KB))= 1000となります。
注意事項
OceanBaseデータベースでは、名前が「_」で始まるパラメータは隠れたパラメータと呼ばれ、開発者が障害のトラブルシューティングや緊急な運用保守時にのみ使用します。
使用制限
テナントまたはテナント内のユーザーの最大接続数は、MySQLテナントのみがシステム変数
max_connectionsおよびmax_user_connectionsを使用して調整できます。大量の長時間接続により運用保守担当者がログインできなくなるのを防ぐため、パラメータ
_resource_limit_max_session_numの値はsysテナントまたはユーザーテナントの管理者ユーザー(MySQLモードのデフォルトはrootユーザー、OracleモードのデフォルトはSYSユーザー)に対しては制限されません。
MySQLテナントで自身のテナントの最大接続数を確認する
テナント管理者がクラスタのMySQLテナントにログインします。
テナントの最大接続数を確認します。
テナント全体の最大接続数を確認する
obclient> SHOW VARIABLES LIKE 'max_connections';または
obclient> SELECT * FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME = 'max_connections';クエリ結果は次のとおりです:
+-----------------+------------+ | Variable_name | Value | +-----------------+------------+ | max_connections | 2147483647 | +-----------------+------------+ 1 row in setテナント内の単一ユーザーの最大同時接続数を確認する
obclient> SHOW VARIABLES LIKE 'max_user_connections';または
obclient> SELECT * FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME = 'max_user_connections';クエリ結果は次のとおりです:
+----------------------+-------+ | Variable_name | Value | +----------------------+-------+ | max_user_connections | 0 | +----------------------+-------+ 1 row in setテナント内の一般ユーザー全体の最大同時接続数を確認する
obclient> SELECT * FROM oceanbase.GV$OB_PARAMETERS WHERE NAME LIKE '_resource_limit_max_session_num';説明
非表示パラメータは、変更前(デフォルト値の場合)は
SHOWステートメントでクエリできず、GV$OB_PARAMETERSビューでのみクエリできます。この非表示パラメータが既にデフォルト値以外に変更されている場合は、SHOWステートメントでクエリできます。クエリ結果は次のとおりです:
+----------------+----------+-------+--------+-----------+---------------------------------+-----------+-------+-----------------------------------------------------------------+----------------+-------------------+---------------+-----------+ | SVR_IP | SVR_PORT | ZONE | SCOPE | TENANT_ID | NAME | DATA_TYPE | VALUE | INFO | SECTION | EDIT_LEVEL | DEFAULT_VALUE | ISDEFAULT | +----------------+----------+-------+--------+-----------+---------------------------------+-----------+------- +-----------------------------------------------------------------+----------------+-------------------+---------------+-----------+ | 172.xx.xxx.xxx | 2882 | zone1 | TENANT | 1004 | _resource_limit_max_session_num | INT | 0 | the maximum number of sessions that can be created concurrently | RESOURCE_LIMIT | DYNAMIC_EFFECTIVE | 0 | YES | +----------------+----------+-------+--------+-----------+---------------------------------+-----------+-------+-----------------------------------------------------------------+----------------+-------------------+---------------+-----------+ 1 row in setクエリ結果において、
VALUE列の値が対応するパラメータの値です。ビュー
GV$OB_PARAMETERSの詳細については、GV$OB_PARAMETERSを参照してください。
テナントの最大接続数を設定します。
テナント全体の最大接続数を設定する
obclient> SET GLOBAL max_connections = 1000;実行が成功した後、OBServerノードを再起動する必要があります。
テナント内の単一ユーザーの最大同時接続数を設定する
obclient> SET GLOBAL max_user_connections = 50;実行が成功した後、OBServerノードを再起動する必要があります。
テナント内の一般ユーザー全体の最大同時接続数を設定する
obclient> ALTER SYSTEM SET _resource_limit_max_session_num = 100;説明
現在のテナントで
_resource_limit_max_session_num、max_user_connections、max_connectionsの値がすべて設定されている場合、特定の一般ユーザーの同時接続数がいずれかの値に達すると、新しい接続を確立できなくなります。管理者ユーザーの場合、同時接続数がmax_user_connectionsまたはmax_connectionsのいずれかの値に達すると、新しい接続を確立できなくなります。
Oracleテナントで自身のテナントに関連する最大同時接続数を確認する
テナント管理者がクラスタのOracleテナントにログインします。
ビューを使用して、テナント内の一般ユーザーの最大同時接続数を確認します。
obclient> SELECT * FROM SYS.GV$OB_PARAMETERS WHERE NAME LIKE '_resource_limit_max_session_num';説明
非表示パラメータは、変更前(デフォルト値の場合)は
SHOWステートメントではクエリできず、GV$OB_PARAMETERSビューを使用してのみクエリできます。この非表示パラメータが既にデフォルト値以外に変更されている場合は、SHOWステートメントでクエリできます。クエリ結果は次のとおりです:
+----------------+----------+-------+--------+-----------+---------------------------------+-----------+-------+-----------------------------------------------------------------+----------------+-------------------+---------------+-----------+ | SVR_IP | SVR_PORT | ZONE | SCOPE | TENANT_ID | NAME | DATA_TYPE | VALUE | INFO | SECTION | EDIT_LEVEL | DEFAULT_VALUE | ISDEFAULT | +----------------+----------+-------+--------+-----------+---------------------------------+-----------+-------+-----------------------------------------------------------------+----------------+-------------------+---------------+-----------+ | 172.xx.xxx.xxx | 2882 | zone1 | TENANT | 1004 | _resource_limit_max_session_num | INT | 0 | the maximum number of sessions that can be created concurrently | RESOURCE_LIMIT | DYNAMIC_EFFECTIVE | 0 | YES | +----------------+----------+-------+--------+-----------+---------------------------------+-----------+-------+-----------------------------------------------------------------+----------------+-------------------+---------------+-----------+ 1 row in setクエリ結果において、
VALUE列の値が対応するパラメータの値です。ビュー
GV$OB_PARAMETERSの詳細については、GV$OB_PARAMETERS を参照してください。テナント内の一般ユーザーの最大同時接続数を設定します。
obclient> ALTER SYSTEM SET "_resource_limit_max_session_num" = 100;
関連ドキュメント
パラメータと変数の詳細については、以下を参照してください: