本記事では、OceanBaseにおけるデータベース接続の規範について説明します。
接続プールを使用する場合は、接続の最大アイドル時間を設定する必要があります。
フロントエンドプログラムがデータベースまたはデータベースプロキシ層に接続する際、JDBCについては接続タイムアウトを1秒に設定し、失敗時の再接続メカニズムを備えることを推奨します。また、失敗時の再接続には間隔時間を設ける必要があります。
プログラム側のログには、データベース接続に関する標準的なOceanBaseエラーコードおよび接続先のデータベース情報(IPアドレス、ポート、データベースユーザー名など)を記録する必要があります。これはDBAによる障害調査に利用されます。
接続プールを使用するフロントエンドプログラムでは、業務ニーズに基づいて初期接続数、最小接続数、最大接続数を設定する必要があります。タイムアウト時間は30秒に設定し、接続検出やアイドルタイムアウト、および接続回収メカニズム(最大3600秒)を設定することを推奨します。
プログラム側で使用するデータベース接続用のSOバンドル、JARバンドル、およびクライアントデータベースのバージョンは、オンラインデータベースサーバーのバージョンと互換性がある必要があります。
DB切り替えについて、
use <dbname>の実行は推奨されません。Connection.setCatalog(dbname)インターフェースの使用を推奨します。ReadOnlyの設定について、
set session transaction readonlyの実行は推奨されません。Connection.setReadOnly(xx)インターフェースの使用を推奨します。単一のトランザクションステートメント(単一SQLトランザクションステートメントまたは複数SQLのトランザクションステートメント)を実行する前には、必ず再度
getConnectionを行い、実行後にはclose connectionを行う必要があります。1つのプロシージャ内で複数のトランザクションを実行することはできません。すなわち、以下の方法で使用する必要があります:getConnection、単一トランザクションステートメントの実行、close connection。特に説明が必要な点は、OceanBaseは現在、単一のトランザクションがそのライフサイクル全体を単一のサーバー上で完了することを制限しているためです。つまり、トランザクションは単一のサーバー上で開始、実行、終了されます。Aサーバー上で開始されたトランザクションがBサーバー上でも有効であるとは保証されません。これはJAVA Connectorに具体的に影響し、現在の接続がトランザクション中の場合、次のSQLは前のサーバーにルーティングされるしかなく、他のサーバーへのルーティング切り替えはできません。現在の接続がトランザクション外の場合は、次のSQLに応じて最適なサーバーにルーティングされます。