接続は一定のリソースを消費するため、大量の長時間接続は小規模なテナントの安定性に影響を与えます。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))
ここで、テナントメモリは、テナント作成時に割り当てられたリソースプール内のリソースユニットのメモリによって決定されます。100 KBは、経験に基づいて計算された単一セッションが占有する可能性のあるメモリです。
100は接続数の下限です。このアルゴリズムによれば、テナントのメモリが2GBの場合、そのテナントの最大接続数はMAX(100, 2 GB × 5% / (100 KB)) = 1000となります。
注意事項
OceanBaseデータベースでは、名前が「_」で始まる構成パラメータは隠れた構成パラメータと呼ばれ、開発者が障害のトラブルシューティングや緊急の運用保守時にのみ使用します。
制限事項
テナントまたはテナント内ユーザーの最大接続数を調整できるのは、システム変数
max_connectionsおよびmax_user_connectionsを使用しているMySQLテナントのみです。多数の長時間接続により運用保守担当者がログインできなくなるのを防ぐため、構成パラメータ
_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;
関連ドキュメント
構成パラメータと変数の詳細については、以下のドキュメントを参照してください。