データベース接続プール 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におけるこのポインティング問題の詳細な説明

推薦する

CentOS7.4 起動時の緊急モードへようこそメッセージに対する解決策

今日は仮想マシンを使って実験をしました。システムをインストールし、いくつかのオプションを最適化した後...

MYSQLパターンマッチングREGEXPの使用に関する一般的な話など

のようにLIKE ではデータ全体が一致する必要がありますが、REGEXP では部分的な一致のみが必要...

Win 8 以降での最新の MySQL バージョン 5.7.17 (64 ビット ZIP グリーン バージョン) のインストールと展開のチュートリアル

まず、ブロガーはコミュニティ バージョンをプレイしていますが、学習とテストにはこれで十分です。 Bl...

Docker デプロイメントサービスの落とし穴を登る過程の詳細

初めて書きます。自己紹介させてください...みなさんこんにちは。私はジャスミンです。なぜジャスミンと...

jQueryは画像の強調表示を実現します

ページ上の画像を強調表示することは非常に一般的です。ここでは、jQuery を使用して画像を強調表示...

MySQL 8.0.12 インストール グラフィック チュートリアル

MySQL8.0.12 インストールチュートリアルをみんなで共有します。 1. インストール1.イン...

Docker を使ってゼロから SOLO 個人ブログを構築する方法

目次1. 環境整備2. Dockerをインストールする3. MySQLマスタースレーブデータベースを...

MySQL SQL ステートメントのパフォーマンス チューニングの簡単な例

MySQL SQL ステートメントのパフォーマンス チューニングの簡単な例サーバー開発を行う際には、...

CSSカスタムプロパティの予備的な理解

現在、CSS プリプロセッサは Web 開発の標準となっています。 プリプロセッサの主な利点の 1 ...

MySQL 8.0.12 のインストールと設定方法のグラフィックチュートリアル (Windows 版)

1. はじめにプロジェクトではMySQLを使用しています。インターネット上の例を参考にインストール...

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

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

アコーディオン効果を実現するネイティブ js

実際のWebページ開発でも、アコーディオンは頻繁に登場します。簡単なアコーディオンを作ったのですが、...

WeChatミニプログラム公式顔認証の詳しい説明

ミニプログラムはユーザーの個人情報を収集してアップロードしましたが、拒否されました。こんにちは、ミニ...

JavaScriptはキャンバスを使用して座標と線を描画します

この記事では、JavaScriptでキャンバスを使用して座標と線を描く具体的なコードを参考までに紹介...

Dockerfile をベースに Zabbix 監視システムのコード例を作成する

forループを使用してZabbixイメージをコンテナにインポートします。 n を `ls *.tar...