本記事では、JDBCの設定例を紹介します。JDBCはJavaからデータベースに接続するためのインターフェースであり、OceanBaseはJavaアプリケーションがOceanBaseデータベースに接続できるようにJDBCドライバーを提供しています。JDBCドライバーのダウンロードURLは以下のとおりです:OceanBase JDBCドライバー。
JDBCを使用してデータベースに接続する際には、データベースのパフォーマンスを最適化するために関連パラメータを設定する必要があります。ここでは、推奨するパラメータの設定例をいくつかご紹介します。
JDBC接続の例は以下のとおりです:
conn=jdbc:oceanbase://xxx.xxx.xxx.xxx:2881/test?rewriteBatchedStatements=TRUE&allowMultiQueries=TRUE&useLocalSessionState=TRUE&useUnicode=TRUE&characterEncoding=utf-8&socketTimeout=10000&connectTimeout=30000
この接続において、関連する構成パラメータは以下のとおりです:
rewriteBatchedStatements:TRUEに設定することを推奨します。OceanBaseのJDBCドライバーはデフォルトでexecuteBatch() ステートメントを無視し、一括実行される一連のSQLステートメントを分解して、一つずつデータベースに送信します。この場合、バッチ挿入は実際には単一挿入となり、パフォーマンスが低下します。実際にバッチ挿入を実行するには、このパラメータをTRUEに設定する必要があります。そうすることで、ドライバーはSQLをバッチ処理します。addBatchメソッドを使用して、同一テーブル上の複数のINSERTステートメントを一つのINSERTステートメント内の複数のvalues値としてまとめることで、バッチINSERTのパフォーマンスを向上させます。
各INSERT文は、prepareStatementを使用してprepareを行った後、addBatchを呼び出す必要があります。そうでない場合、結合実行はできません。
allowMultiQueries:TRUEに設定することを推奨します。JDBCドライバーは、アプリケーションコードが複数のSQLをセミコロン(;)で結合し、一つのSQLとしてサーバー側に送信することを許可します。
useLocalSessionState:TRUEに設定することを推奨します。これにより、トランザクションが頻繁にOBデータベースにsession変数のクエリSQLを送信するのを回避できます。session変数は主に以下のものです:autocommit、read_only、transaction isolation。
socketTimeout:SQL実行時に、ソケットがSQLの返却を待機する時間です。connectTimeout:接続確立時に、接続を待機する時間です。useCursorFetch:TRUEに設定することを推奨します。データ量の多いクエリステートメントについて、データベースサーバーはCursorを確立し、FetchSizeのサイズに応じてClientにデータを配信します。このプロパティを
TRUEに設定すると、useServerPrepStmts=TRUEが自動的に連動して設定されます。useServerPrepStmts:SQLをデータベースサーバーに送信する際にPSプロトコルを使用するかどうかを制御します。TRUEに設定すると、SQLはデータベース内で2段階に分けて実行されます:?を含むSQLテキストをデータベースサーバーに送信してPrepareを行います(SQL_audit: request_type=5)。実際のValueを使用して、データベース内でExecuteを行います(
SQL_audit: request_type=6)。
cachePrepStmts:JDBC driverがPS cacheを有効にしてPreparedStatmentをキャッシュし、prepareの繰り返し実行(client側およびserver側)を回避するかどうかを制御します。cachePrepStmts=TRUEは、useServerPrepStmts=TRUEを使用し、同一SQLに対してバッチ実行を繰り返す場合に有効です。バッチ実行のたびにprepareが実行されますが、cachePrepStmts=TRUEを設定すると、prepareの繰り返し実行を回避できます。prepStmtCacheSQLLimit:PS cacheに格納できるSQLの長さの制限です。この長さを超えるSQLはキャッシュに入れることができません。prepStmtCacheSize:PS cacheが保存できるSQLの数です。maxBatchTotalParamsNum:バッチ操作において、一つのSQLがサポートできる最大パラメータ数(バッチ内の?の数)です。パラメータ数がこの制限を超えると、バッチSQLは分割されます。