「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Spring Boot アプリケーションのパフォーマンスの向上 - パート II

Spring Boot アプリケーションのパフォーマンスの向上 - パート II

2024 年 11 月 8 日に公開
ブラウズ:981

Melhorando o desempenho de aplicações Spring Boot - Parte II

この記事の最初の部分では、TomcatUndertow に置き換えて、アプリケーションのパフォーマンスを向上させる方法を学びました。データ圧縮を有効にして構成することに加えて、ネットワーク上を移動する HTTP 応答のサイズを削減するための高性能 Web サーバー。

ここで、永続化部分で Spring Boot アプリケーションのパフォーマンスを向上させる方法について説明しますが、その前に、JPAHibernate、および Hikari が何であるかを理解する必要があります。 ].

JPA

JPA または Java Persistence API は、後に Jakarta Persistence に名前変更されましたが、共通のデータ永続性フレームワークのインターフェース

JPA仕様は、ベンダー固有のマッピング実装に依存するのではなく、内部的にオブジェクト リレーショナル マッピングを定義します。

休止状態

Hibernate は、JPA 仕様の具体的な実装を行う ORM フレームワークの 1 つです。つまり、この仕様で、persistremoveupdate、および fetch data にメソッドが必要であると記述されている場合、誰が行うのでしょう。これらの動作を実際に構築するのは、HibernateEclipseLink であり、これは別の ORM &&&]. ヒカリ

Hikari接続プーリング フレームワークで、データベースへの接続を管理し、再利用できるように接続を開いた状態に保ちます。これは将来のリクエストに備えた接続の キャッシュ であり、データベースへのアクセスが高速になり、作成される新しい接続の数が減ります。 ヒカリ、JPA、および休止状態の構成

パフォーマンスを向上させるために実行できる構成は次のとおりです:

application.yml の使用:


春: ヒカリ: 自動コミット: false 接続タイムアウト: 250 最大寿命: 600000 最大プールサイズ: 20 最小アイドル: 10 プール名: マスター jpa: オープンインビュー: false show-sql: true 冬眠状態: ddl-auto: なし プロパティ: hibernate.connection.provider_disables_autocommit: true hibernate.generate_statistics: true

spring:
  hikari:
    auto-commit: false
    connection-timeout: 250
    max-lifetime: 600000
    maximum-pool-size: 20
    minimum-idle: 10
    pool-name: master

  jpa:
    open-in-view: false
    show-sql: true
    hibernate:
      ddl-auto: none
    properties:
      hibernate.connection.provider_disables_autocommit: true
      hibernate.generate_statistics: true


spring.datasource.hikari.auto-commit=false spring.datasource.hikari.connection-timeout=50 spring.datasource.hikari.max-lifetime=600000 spring.datasource.hikari.最大プールサイズ=20 spring.datasource.hikari.minimum-idle=10 spring.datasource.hikari.プール名=マスター spring.datasource.jpa.open-in-view=false spring.datasource.jpa.show-sql=true spring.datasource.jpa.hibernate.ddl-auto=none spring.jpa.properties.hibernate.generate_statistics=true spring.jpa.properties.hibernate.connection.provider_disables_autocommit=true

spring.datasource.hikari.auto-commit=false
spring.datasource.hikari.connection-timeout=50
spring.datasource.hikari.max-lifetime=600000
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.pool-name=master

spring.datasource.jpa.open-in-view=false
spring.datasource.jpa.show-sql=true

spring.datasource.jpa.hibernate.ddl-auto=none
spring.jpa.properties.hibernate.generate_statistics=true
spring.jpa.properties.hibernate.connection.provider_disables_autocommit=true

ヒカリ

    spring.datasource.hikari.auto-commit: false の場合、
  • 接続プール

    によって返されるすべての接続は、auto-commit が無効になります。 ]

  • spring.datasource.hikari.connection-timeout: クライアントが
  • pool

    からの接続を待機する時間 (ミリ秒)。クライアントを無期限に待機させるよりも、すぐに失敗してエラー メッセージを返すために短いタイムアウトを設定することをお勧めします。

  • spring.datasource.hikari.max-lifetime: 接続がアクティブな状態を維持できる最大時間。長時間アクティブな接続は攻撃に対してより脆弱であるため、問題のある接続による障害を回避し、セキュリティを強化するには、このパラメータの構成が非常に重要です。
  • spring.datasource.hikari.maximum-pool-size:
  • プール

    の最大サイズ。アイドル状態と使用中の接続を含み、データベースへのアクティブな接続の最大数を決定します。プールがこの制限に達し、アイドル状態の接続がない場合、getConnection() の呼び出しは失敗するまで最大 connectionTimeout ミリ秒間ブロックされます。

    多くの人は、50、70、さらには 100 に設定すると優れたパフォーマンスが得られると考えているため、適切な値を見つけることが重要です。理想は、
      スレッド[の数である最大 20 にすることです。 &&&] 接続を使用して並列接続。
    • 値が大きいほど、データベースによるこれらの接続の管理が難しくなり、これらすべての接続を使用するのに十分なスループット
    • が得られなくなる可能性が高くなります。
    • RDBMS
    • (
    • リレーショナル データベース管理システム) の観点からは、それ自体とのオープン接続を維持するのは困難であることを理解することが重要です。n 個の接続を想像してください。 .
    spring.datasource.hikari.minimum-idle: 需要が低いときにプールが維持する接続の最小数。プールは接続を最大 10 まで削減し、必要に応じて再作成できます。ただし、パフォーマンスを最大化し、需要のスパイクへの対応を向上させるには、この値を設定しないことをお勧めします。これにより、Hikari は固定サイズのプールとして機能します。デフォルト: spring.datasource.hikari.maximum-pool-size.
  • と同じ

    spring.datasource.hikari.pool-name: 接続
  • pool
  • のユーザー定義名。主に

    を識別するためにレジストリ管理コンソールと JMX に表示されます。プール とその構成。

    JPA

spring.datasource.jpa.open-in-view:
    OSIV
  • (

    Open Session In View) が有効な場合、リクエスト全体にわたってセッションが維持されます。 @Transactional アノテーションなし。セッションはリクエストが終了するまでデータベースへの接続を維持するため、アプリケーションの応答がなくなるなど、パフォーマンスの問題が発生する可能性があります。

    spring.datasource.jpa.show-sql: アプリケーションで実行されている SQL ログを表示します。通常、開発時は有効のままにしておきますが、本番環境では無効にします。
  • spring.datasource.jpa.hibernate.ddl-auto: データベースの
  • スキーマ
  • に関連して

    Hibernate の動作を構成します。次の値を指定できます: none: 何もしません。私たちは銀行のスキーマを手動で管理します。

      validate: データベースの
    • スキーマ
    • を検証しますが、変更は行いません。これは、現在の
    • スキーマ がマッピングしたエンティティと確実に一致するようにするのに役立ちます。 update: データベースの スキーマ
    • を更新して、エンティティへの変更を反映します。
    • create: データベースのスキーマ
    • を作成します。
    • スキーマがすでに存在する場合は、削除して再度作成します。 create-drop: データベースから スキーマ
    • を作成し、アプリケーションの終了時に
    • スキーマ を削除します。テストごとにクリーンなデータベースが必要なテストに役立ちます。
    spring.jpa.properties.hibernate.generate_statistics: クエリの実行時間、実行されたクエリの数、その他のメトリクスなど、Hibernate に関する詳細情報を収集するために使用されます。
  • spring.jpa.properties.hibernate.connection.provider_disables_autocommit:
  • Hibernate

    プロバイダーの 自動コミット を無効にしたことを に通知します。 (PostgreSQLMySQLなど)。 Hibernateauto-commit が有効かどうかを知るために pool から接続を取得する必要があるため、これはパフォーマンスに影響します。 、彼が行うすべての取引に対して。

    これで記事の後編を終わります。存在するすべての設定がパフォーマンスに関するものではありませんが、実際に影響を与えるのは、
  • 自動コミット

プール サイズなどのHikari設定です。 、JPA および Hibernate のもの (OSIV など) (ビューでセッションを開く) プロバイダ自動コミットを無効にしたことをお知らせします。 次のパートでは、例外と、JVM

(

Java 仮想マシン) からリソースを節約するための例外の設定方法について説明します。 参考文献:

https://en.wikipedia.org/wiki/Jakarta_Persistence

    https://www.ibm.com/docs/pt-br/was/8.5.5?topic=SSEQTP_8.5.5/com.ibm.websphere.nd.multiplatform.doc/ae/cejb_persistence.htm
  • https://github.com/brettwooldridge/HikariCP
  • https://github.com/corona-warn-app/cwa-server/issues/556
  • https://medium.com/@rafaelralf90/open-session-in-view-is-evil-fd9a21645f8e
リリースステートメント この記事は次の場所に転載されています: https://dev.to/mathstylish/melhorando-o-desempenho-de-aplicacoes-spring-boot-parte-ii-nbi?1 権利侵害がある場合は、[email protected] までご連絡ください。それを削除するには
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3