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

推薦する

TypeScript のマップされた型とより優れたリテラル型推論について説明します。

目次概要マップされた型を使用して Object.freeze() を構築するマッピングタイプの構文は...

JavaScript axiosのインストールとパッケージ化のケースの詳細な説明

1. axiosプラグインをダウンロードする cnpm インストール axios -S 2. mai...

CSS3 を使用して入力複数選択ボックスのスタイルをカスタマイズする例

原則: まず入力要素を非表示にし、次に CSS を使用してラベル要素のスタイルを設定します (他の要...

ユーザーがフォームを繰り返し送信するのを防ぐ方法の概要

重複したフォーム送信は、マルチユーザー Web アプリケーションで最も一般的で厄介な問題です。重複送...

Linuxコマンドunzipの詳しい説明

目次1. 解凍コマンド1.1 構文1.2 オプション2. 例1. 解凍コマンドunzip コマンドは...

HTML要素によるFlashブロックの詳細な例

コードをコピーコードは次のとおりです。 wmode パラメータ:透過モード: z-indexを使用し...

Websocket+Vuexはリアルタイムチャットソフトウェアを実装します

目次序文1. 効果は図の通りです2. 具体的な実施手順1. Vuexの紹介2.webscoked実装...

ウェブデザインを改善するための 8 つの CSS ツールを共有する

ウェブサイトのデザインを編集または変更する必要がある場合、CSS が重要な役割を果たします。 CSS...

CSS3はウェブサイトの製品表示効果図を実現します

この記事では、CSS3 を使用した Web サイトの商品表示の効果を紹介し、皆さんと共有します。詳細...

CentOS 7 での mysql 5.7 のインストール チュートリアル

1. 公式MySQL Yumリポジトリをダウンロードしてインストールする 実行ファイル: mysql...

VPSサーバーでよく使われるパフォーマンステストスクリプトの概要

これは、VPS サーバー用の一般的なワンクリック パフォーマンス テスト スクリプトです。マシンの構...

MySQL マルチテーブルクエリの具体例

1. SELECT句を使用して複数のテーブルをクエリするSELECT フィールド名 FROM tab...

XHTML 1.0 リファレンス

機能別に並べ替えNN: このタグをサポートする Netscape の以前のバージョンを示しますIE:...

要素テーブルの多層ネスト表示の実践

複数の注文を含むリストが必要です。各注文は一意にすることも、複数の注文を結合することもできます。各注...

JavaScript setinterval 1秒遅延ソリューション

setinterval を使用すると、ページを開いた直後に 1 秒の遅延後に実行されることがわかりま...