本記事では、JDBCの設定例を紹介します。JDBCはJavaからデータベースに接続するためのインターフェースであり、OceanBaseはJavaアプリケーションが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をprepareするには、prepareStatement方式を使用して準備し、その後に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とexecutecachePrepStmts=TRUEは繰り返しのprepare操作を回避できます。prepStmtCacheSQLLimit:PS cacheに格納できるSQLの長さの制限です。超長SQLはキャッシュに入れることができません。prepStmtCacheSize:PS cacheが保存できるSQLの数です。maxBatchTotalParamsNum:バッチ操作において、一つのSQLがサポートできる最大パラメータ数(バッチ内の?の数)です。パラメータ数がこの制限を超えると、バッチSQLは分割されます。