データベース接続プール Druid の使用手順

データベース接続プール Druid の使用手順

総合的なパフォーマンス、信頼性、安定性、スケーラビリティ、使いやすさなどの要素に基づいて、最適なデータベース接続プールに置き換えます。

ドルイド:druid-1.0.29

データベースMysql.5.6.17

置き換え対象: C3P0をドルイドに置き換える

交換理由:

1. パフォーマンス面では、hikariCP>druid>tomcat-jdbc>dbcp>c3p0 です。 hikariCP の高パフォーマンスは、ロック競合を最大限に回避することによって実現されます。

2. Druid は、SQL インターセプションなどの機能を含む最も包括的な機能を備えており、比較的包括的な統計データと優れたスケーラビリティを備えています。

3. 総合的なパフォーマンスとスケーラビリティの観点から、JDBC インターフェースの監視と追跡に便利な druid または hikariCP 接続プールの使用を検討できます。

4. prepareStatement キャッシュを有効にすると、パフォーマンスが約 20% 向上します。

psCache は接続専用なので、スレッド競合の問題はありません。pscache を有効にしても、競合によるパフォーマンスの低下は発生しません。

psCache のキーは prepare によって実行される SQL とカタログであり、値は prepareStatement オブジェクトに対応します。キャッシュを有効にすると、主に SQL 解析のオーバーヘッドが削減されます。

5. 3p0 は歴史が長く、コードが非常に複雑なため、メンテナンスが容易ではありません。そして、デッドロックの潜在的なリスクがあります。

6. DruidはSQLとスロークエリのログを出力できる

ドルイドパラメータ

構成パラメータデフォルト値ゲームサーバー設定値パラメータの説明
初期サイズ0 4接続数を初期化する
最小アイドル0 4アイドル接続の最小数
最大アクティブ8 8同時接続の最大数
最大待機時間-1L 60000接続を取得する際の最大待機時間(ミリ秒単位)。 maxWaitを設定した後、
デフォルトでは、公平ロックが有効になっているため、同時実行の効率が低下します。
必要に応じて、useUnfairLock プロパティを true に設定して不公平なロックを使用できます。
立ち退き実行間の時間(ミリ秒) 60000 60000アイドル接続を閉じる必要があるかどうかを確認する間隔をミリ秒単位で設定します。
破棄スレッドは接続間隔を検出します
最小退避可能アイドル時間ミリ秒1800000 1800000プール内の接続の最小生存時間をミリ秒単位で設定します
検証クエリヌル1を選択接続が有効かどうかを検出するために使用されるSQL。クエリ文である必要があります。
借りるテスト間違い間違い接続を申請する際、validationQuery を実行して接続が有効かどうかを確認します。この構成を行うとパフォーマンスが低下します。
戻り値テスト間違い間違い接続を返すときに、validationQueryを実行して接続が有効かどうかを確認します。この設定を行うとパフォーマンスが低下します。
アイドル中のテスト真実真実パフォーマンスに影響を与えず、セキュリティを確保するには、これを true に設定することをお勧めします。 接続を申請するときに、アイドル時間が timeBetweenEvictionRunsMillis より大きい場合は、validationQuery を実行して接続が有効かどうかを確認します。
プール準備済みステートメント間違い真実false preparedStatement、つまり PSCache をキャッシュするかどうか。
PSCache は、Oracle などのカーソルをサポートするデータベースのパフォーマンスを大幅に向上させます。
MySQL 5.5 未満のバージョンには PSCache 機能がないため、オフにすることをお勧めします。
バージョン 5.5 以降には PSCache があり、これを有効にすることをお勧めします。
接続あたりの最大プール準備ステートメントサイズ10 100 PSCacheを有効にするには、0より大きい値に設定する必要があります。0より大きい値にすると、
poolPreparedStatements は自動的に true への変更をトリガーします。
単一の接続には独自のステートメント キャッシュがあるため、maxOpenPreparedStatements は単一の接続用となります。

仕組み:

データベース接続プールは初期化中に initialSize 個の接続を作成し、データベース操作が行われると、接続がプールから取り出されます。プール内で現在使用されている接続数が maxActive に等しい場合、他の操作が接続を解放するのを待って、しばらく待機します。待機時間が maxWait を超えると、エラーが報告されます。現在使用されている接続数が maxActive に達していない場合は、アイドル接続があるかどうかが判断されます。アイドル接続がある場合は、アイドル接続が直接使用されます。アイドル接続がない場合は、新しい接続が確立されます。接続が使用された後、その物理的な接続は閉じられるのではなく、プールに入れられ、他の操作による再利用を待機します。 同時に、接続プール内には、現在の接続の合計数が miniIdle 未満であるかどうかを判断するメカニズムがあり、接続数が miniIdle になるように新しいアイドル接続が確立されます。現在の接続プール内の接続が、timeBetweenEvictionRunsMillis 時間アイドル状態になってもまだ使用されない場合は、物理的に閉じられます。一部のデータベース接続にはタイムアウト制限があり (MySQL 接続は 8 時間後に切断されます)、ネットワークの中断などの理由により接続プール接続が無効になることがあります。この場合、testWhileIdle パラメータを true に設定すると、接続プールが定期的に接続の可用性を検出するようになります。使用できない接続は破棄または再構築され、接続プールから取得された Connection オブジェクトは最良の場合に使用可能であることが保証されます。もちろん、絶対的な可用性を保証するために、testOnBorrow を true に設定することもできます (つまり、Connection オブジェクトを取得するときにその可用性をチェックします)。ただし、これによりパフォーマンスに影響が出ます。

SQL 監視を実行する場合は、次のコードを追加できます。

Log4j2Filter は、log4j2 を新しい Log4j2Filter() に変換します。 
log4j2.setResultSetLogEnabled(false); 
log4j2.setStatementSqlPrettyFormat(false); 
log4j2.setStatementExecutableSqlLogEnable(true); 
 
log4j2.setDataSourceLogEnabled(false); 
log4j2.setConnectionLogEnabled(false); 
log4j2.setStatementLogEnabled(false); 
log4j2.setResultSetLogEnabled(false); 
ret.setProxyFilters(Arrays.asList(log4j2));

アイドル検出、接続の作成、放棄された接続のクリーンアップは、これら3つのスレッドによって管理されます。

デーモンスレッド [放棄された接続のクリーンアップスレッド] 
デーモン スレッド [Druid-ConnectionPool-Create-1184124073] 
デーモン スレッド [Druid-ConnectionPool-Destroy-1184124073]

要約する

以上が、データベース接続プール Druid の使用に関するこの記事の内容のすべてです。皆様のお役に立てれば幸いです。興味のある方は、「MySQL Prepare 原則の詳細な説明」およびその他の関連トピックを参照してください。質問がある場合は、いつでもメッセージを残していただければ、編集者がすぐに返信します。

以下もご興味があるかもしれません:
  • Java 開発 Druid データ接続プール Maven 簡単な構成プロセスの例
  • Alibaba Druid データ接続プールによって発生するオンライン例外の解決策
  • Java データベース接続プール Druid の紹介
  • データベース Alibaba 接続プール druid の詳細な構成
  • Spring Boot は Druid データベース接続プールを統合します
  • Java で Druid データ接続プールを実装する例

<<:  よく使われるnginxの書き換えルールの詳細な説明

>>:  JavaScriptにおけるこのポインティング問題の詳細な説明

推薦する

Windows 10 に Apache 2.4.41 をインストールするチュートリアル

1. Apache 2.4.41 のインストールと設定最初のステップは、以下に示すように、https...

この記事ではMySQLのNULLについて説明します。

目次序文MySQL の NULL 2 NULL占有長3 NULL値の比較4SQLはNULL値を処理す...

MySQL データベースの集計クエリと結合クエリ操作

目次1. クエリ結果を挿入する2. 集計クエリ2.1 はじめに2.2 集計関数2.3 group b...

Linux でのファイルの編集、保存、終了の実践的な説明

Linux でファイルを編集した後、保存して終了するにはどうすればよいですか?保存して終了するコマン...

HTMLがHikvisionカメラのリアルタイム監視機能を実現

最近、同社は CCFA 関連のいくつかの作業を行う予定で、その 1 つはカメラのリアルタイム監視を再...

MySQL の文字セット utf8 を utf8mb4 に変更する方法

MySQL 5.5 の場合、文字セットが設定されていない場合、MySQL のデフォルトの文字セットは...

vagrant+virtualBoxで仮想マシンを構築する方法

1. はじめにVagrant は、仮想マシン (VirtualBox) を構築および管理するためのツ...

HTMLシールドの右クリックメニューと左クリック入力機能の例

右クリックメニューを無効にする <body oncontextmenu=self.event....

CentOS 7にDockerをインストールする

Linuxシステムをお持ちでない場合は、ダウンロードとインストールについてはhttps://www....

パーティショニングを使用して数十億のデータに対する MySQL データ処理を最適化する方法

MySQL が数千万のデータをクエリする場合、ほとんどのクエリ最適化の問題はインデックスを通じて解決...

Win10 構成 Tomcat 環境変数チュートリアル図

設定する前に、次の操作を行う必要があります。 1. まずjdk bloggerをインストールします。...

MySQL 5.7.9 シャットダウン構文例の詳細な説明

mysql-5.7.9 では、ついにシャットダウン構文が提供されます。以前は、MySQL データベー...

Macでのファイル権限の表示と設定の詳細な説明

序文Mac システムのターミナルでファイルの権限を変更するには、Linux の chmod コマンド...

JSでよく使われるデータ処理方法

目次DOM処理配列方法要約するDOM処理DOM はドキュメントの構造化された表現を提供し、スクリプト...

CSS を使用して ul と li の水平配置を実現する 2 つの方法

li はブロックレベル要素であり、デフォルトで 1 行を占めるため、水平方向の配置を実現する場合は、...