架构师_程序员_码农网

ユーザー名 パスワード取得
会員登録

QQ登录

ワンステップ

検索
閲覧:4942|返信: 1
打印 上一主题 下一主题

[アーカイブ]Spring Bootデータベース接続プールHikariPoolの最適化

[リンクコピー]
Spring-Boot-2.0.0-M1のバージョンで、デフォルトのデータベース接続プールがtomcat jdbc poolからhikariに変更されたため、Spring Bootアプリケーションを実行すると、コンソールに以下のように出力されます:
2021-11-25 14:48:09.429 INFO 22236 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2021-11-25 14:48:09.813 INFO 22236 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - 起動完了しました。

ひかりの初期設定値は以下の通りです:
{"connection-timeout":30000, "maximum-pool-size":10, "max-lifetime":1800000, "minimum-idle".10、"validation-timeout":5000、"idle-timeout":600000}。

名前コンストラクタのデフォルトバリデーション後のデフォルト値。バリデート・リセット
minIdle-110minIdle<0またはminIdle>maxPoolSizeはmaxPoolSizeにリセットされる。
maxPoolSizemaxPoolSize -110maxPoolSizeが1より小さい場合、リセットされる。minIdle<=0 の場合、DEFAULT_POOL_SIZE にリセットされ、10 になります。 minIdle>0 の場合、minIdle の値にリセットされます。
maxLifetimeMINUTES.toMillis(30) = 180000018000000に等しくなく、30秒未満の場合は、30分にリセットされます。
コネクションタイムアウトSECONDS.toMillis(30) = 3000030000250ミリ秒未満の場合、30秒にリセットされます。
バリデーションタイムアウトSECONDS.toMillis(5) = 50005000250ミリ秒未満の場合、5秒にリセットされる
ログインタイムアウト1030Math.max(1, (int) MILLISECONDS.toSeconds(500L + connectionTimeout))、connectionTimeout + 500msの場合は秒単位に切り上げ、1の場合は1。
アイドルタイムアウトMINUTES.toMillis(10) = 600000600000idleTimeout+1sec>maxLifetimeかつmaxLifetime>0の場合は0にリセットされ、idleTimeout!=0かつ10sec未満の場合は10secにリセットされる。
リーク検出しきい値000より大きく、ユニットテストでない場合、さらに判定: (leakDetectionThreshold < SECONDS.toMillis(2) or (leakDetectionThreshold > maxLifetime && maxLifetime &gt0)、0にリセットされる。 つまり、maxLifetime > 0の場合、0以上でなければならず、2秒未満であってはならず、maxLifetimeを超えることはできません。
初期化失敗タイムアウト11-自動コミット
isAutoCommit初期化失敗タイムアウト自動コミット-読み取り専用
読み取り専用true - isReadOnlyファスル-isAllowPoolSuspension
isAllowPoolSuspensionfasle - isAllowPoolSuspensionfalsefasle - isAllowPoolSuspension false false
isIsolateInternalQueriesfalse - isIsolateInternalQueries -内部クエリを隔離するfalse-isRegisterMbeans
isRegisterMbeansfalsefalse-false
密封falsetrueこのフラグは、実行が開始され、それ以上の修正が実行されないときにtrueになります。
プール名null光プール-1光プール-1
カタログnullヌルHikariPool-1 - catalog null null
コネクションInitSqlnullnull-null
connectionTestQuerynullヌルconnectionTestQuery null null -
データ・ソース・クラス名nullnull-null
スキーマnullヌル-null
トランザクション隔離名nullヌル-トランザクション分離名 null
トランザクション隔離名null -データソースnull-データソース null null
データソースプロパティ{}{}null - dataSourceProperties {} {}です。
スレッドファクトリーnullnullスレッドファクトリー null null
スケジュールされた実行者nullnull-メトリクス・トラッカー・ファクトリー
メトリクス・トラッカー・ファクトリーnullnullnull - metricsTrackerFactory
メトリック・レジストリnullnullnull - メトリックレジストリ
ヘルスチェックレジストリnullnull-ヘルスチェックレジストリ null
ヘルスチェックプロパティヘルスチェックレジストリ null null - healthCheckProperties} {}ヘルスチェックプロパティ。{}null - healthCheckProperties {}} {}} です。

プレッシャー・テスト中に、アプリケーションが以下のエラーを報告することがあります:

原因: org.springframework.jdbc.CannotGetJdbcConnectionException: JDBC 接続の取得に失敗しました。SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30000ms.
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82)
at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80)
at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67)
at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:337)
at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:86)
at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:62)
at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)
at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java.81)
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)
at com.sun.proxy.$Proxy224.query(Unknown Source)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)
... 114 more
原因: java.sql.SQLTransientConnectionException: HikariPool-1 - 接続が利用できません、リクエストは30000ms後にタイムアウトしました。
at com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:695)
at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:197)
at com.zaxxer.hikari.pool.HikariPool.getConnection(HikariPool.java:162)
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:128)
at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:158)
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:116)
でorg.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)
... 126 more


エラー:JDBC接続の取得に失敗しました。ネストされた例外はjava.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30000msです。リクエストは30000ms後にタイムアウトしました。

ControllerはHikariDataSourceの設定インターフェイスコードを以下のように出力します:

ソリューションを最適化するために、スレッドの最大数を増やし、アイドル状態の接続数を増やすには、application.ymlの設定を以下のように変更します:

(終了)




前の記事:POIのgetLastRowNum()とgetLastCellNum()の違い
次の記事:【レポート】テストツールLoadRunnerとJmeterの比較
コードファーマーは、唯一の練習の過程で公開され、技術的な困難に遭遇し、他の人を誤解させないでください。
ソファ
发表于2022-12-14 21:46:53只看该作者
I'm not sure if I'm going to be able to do that.
コード農家ネットワーク、唯一の練習の過程で公開、技術的な困難に遭遇した、他の人を誤解させないでください。
投稿するにはログインが必要です ログイン会員登録

このバージョンのインテグラルルール


免責事項:Code Farmerによって公開されたすべてのソフトウェア、プログラミング教材や記事は、学習と研究の目的のみに使用するために制限されています。上記のコンテンツは、商業的または違法な目的のために使用してはならない、そうでなければ、すべての結果は、ユーザー自身が負担するものとします。本サイトはネットワークからの情報であり、著作権紛争は本サイトとは関係ありません。上記のコンテンツはダウンロード後24時間以内にコンピュータから完全に削除する必要があります。もしあなたがこのプログラムを気に入ったなら、正規のソフトウェアをサポートし、登録を購入し、より良い正規のサービスを受けてください。もし著作権侵害があれば、メールでご連絡ください。

メール To:help@itsvse.com

QQ|( 鲁ICP备14021824 号-2)|サイトマップ

GMT+8, 2024-9-19 03:36

クイック返信トップに戻る一覧に戻る