Red Hat Training

A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform

第6章 データソースおよびリソースアダプターの調整

接続プールは、リレーショナルデータベースやリソースアダプターなどのデータソースを使用する環境のパフォーマンスを最適化するために JBoss EAP が使用するツールです。

データソースおよびリソースアダプター接続のリソースを割り当てまたは割り当て解除することは、時間やシステムリソースのコストが大変高くなります。接続プールは、アプリケーションが使用できる接続の「プール」を作成して、接続のコストを削減します。

パフォーマンスを最適化するために接続プールを設定する前に、負荷がかかった状態で データソースプール統計 または リソースアダプターの統計 を監視し、ご使用の環境に適した設定を判断する必要があります。

6.1. プール統計の監視

6.1.1. データソースの統計

データソースの統計収集が 有効化 されている場合、データソースの ランタイム統計を表示 できます。

6.1.1.1. データソース統計の有効化

データソース統計は、デフォルトでは有効になっていません。データソース統計の収集は、 管理 CLI または 管理コンソール を使用して有効にできます。

管理 CLI を使用したデータソース統計の有効化

以下の管理 CLI コマンドは、ExampleDS データソースの統計の収集を有効にします。

注記

管理対象ドメインでは、このコマンドの前に /profile=PROFILE_NAME を追加する必要があります。

/subsystem=datasources/data-source=ExampleDS:write-attribute(name=statistics-enabled,value=true)

変更を反映するためにサーバーをリロードします。

管理コンソール使用したデータソース統計の有効化

以下の手順にしたがって管理コンソールを使用し、統計の収集を有効にします。

  1. ConfigurationSubsystemsDatasources と選択します。
  2. データソースの種類に応じて Non-XA または XA を選択します。
  3. データソースを選択し、View をクリックします。
  4. Attributes タブ下の Edit をクリックします。
  5. Statistics enabled? チェックボックスにチェックマークを入力し、Statistics enabled? をクリックします。変更を反映するにはリロードが必要であることを伝えるダイアログが表示されます。
  6. サーバーをリロードします。

    • スタンドアロンサーバーでは、Reload Server Now ボタンをクリックしてサーバーをリロードします。
    • 管理対象ドメインでは、 Go to Runtime ボタンをクリックします。Runtime タブから適切なサーバーを選択し、ドロップダウンメニューで Reload をクリックしてサーバーをリロードします。

6.1.1.2. データソース統計の表示

管理 CLI または 管理コンソール を使用してデータソースのランタイム統計を表示できます。

管理 CLI を使用したデータソース統計の表示

以下の管理 CLI コマンドは、ExampleDS データソースのコアプールの統計を取得します。

注記

管理対象ドメインでは、コマンドの前に /host=HOST_NAME/server=SERVER_NAME を追加します。

/subsystem=datasources/data-source=ExampleDS/statistics=pool:read-resource(include-runtime=true)
{
    "outcome" => "success",
    "result" => {
        "ActiveCount" => 1,
        "AvailableCount" => 20,
        "AverageBlockingTime" => 0L,
        "AverageCreationTime" => 122L,
        "AverageGetTime" => 128L,
        "AveragePoolTime" => 0L,
        "AverageUsageTime" => 0L,
        "BlockingFailureCount" => 0,
        "CreatedCount" => 1,
        "DestroyedCount" => 0,
        "IdleCount" => 1,
        ...
}

以下の管理 CLI コマンドは、ExampleDS データソースの JDBC の統計を取得します。

/subsystem=datasources/data-source=ExampleDS/statistics=jdbc:read-resource(include-runtime=true)
{
    "outcome" => "success",
    "result" => {
        "PreparedStatementCacheAccessCount" => 0L,
        "PreparedStatementCacheAddCount" => 0L,
        "PreparedStatementCacheCurrentSize" => 0,
        "PreparedStatementCacheDeleteCount" => 0L,
        "PreparedStatementCacheHitCount" => 0L,
        "PreparedStatementCacheMissCount" => 0L,
        "statistics-enabled" => true
    }
}
注記

統計はラインタイム情報であるため、必ず include-runtime=true 引数を指定してください。

利用可能な統計の詳細リストは、「データソースの統計」を参照してください。

管理コンソールを使用したデータソース統計の表示

管理コンソールからデータソースの統計を表示するには、Runtime タブで Datasources サブシステムを選択します。Datasources タブを使用して非 XA データソースの統計を表示し、XA Datasources タブを使用して XA データソースの統計を表示します。

利用可能な統計の詳細リストは、「データソースの統計」を参照してください。

6.1.2. リソースアダプターの統計

デプロイされたリソースアダプターのコアランタイム統計を表示できます。利用可能な統計の詳細リストは、リソースアダプターの統計の付録 を参照してください。

リソースアダプター統計の有効化

リソースアダプター統計は、デフォルトでは有効になっていません。以下の管理 CLI コマンドは、接続ファクトリーが java:/eis/AcmeConnectionFactory として JNDI にバインドされた簡単なリソースアダプター myRA.rar の統計収集を有効にします。

注記

管理対象ドメインでは、このコマンドの前に /host=HOST_NAME/server=SERVER_NAME/ を追加する必要があります。

/deployment=myRA.rar/subsystem=resource-adapters/statistics=statistics/connection-definitions=java\:\/eis\/AcmeConnectionFactory:write-attribute(name=statistics-enabled,value=true)
リソースアダプター統計の表示

リソースアダプター統計は管理 CLI から取得できます。以下の管理 CLI コマンドは、接続ファクトリーが JNDI で java:/eis/AcmeConnectionFactory としてバインドされた、リソースアダプター myRA.rar の統計を返します。

注記

管理対象ドメインでは、このコマンドの前に /host=HOST_NAME/server=SERVER_NAME/ を追加する必要があります。

deployment=myRA.rar/subsystem=resource-adapters/statistics=statistics/connection-definitions=java\:\/eis\/AcmeConnectionFactory:read-resource(include-runtime=true)
{
    "outcome" => "success",
    "result" => {
        "ActiveCount" => "1",
        "AvailableCount" => "20",
        "AverageBlockingTime" => "0",
        "AverageCreationTime" => "0",
        "CreatedCount" => "1",
        "DestroyedCount" => "0",
        "InUseCount" => "0",
        "MaxCreationTime" => "0",
        "MaxUsedCount" => "1",
        "MaxWaitCount" => "0",
        "MaxWaitTime" => "0",
        "TimedOut" => "0",
        "TotalBlockingTime" => "0",
        "TotalCreationTime" => "0"
    }
}
注記

統計はラインタイム情報であるため、必ず include-runtime=true 引数を指定してください。

6.2. プールの属性

ここでは、データソースまたはリソースアダプターのパフォーマンスを最適化するために設定できる一部のプール属性の推奨設定について説明します。各属性の設定方法は以下を参照してください。

  • データソースプール属性の設定
  • リソースアダプタープール属性の設定

    最小プールサイズ

    min-pool-size 属性は、接続プールの最小サイズを定義します。デフォルトではゼロ個の接続が最小です。min-pool-size がゼロの場合、最初のトランザクションの発生時に接続が作成され、プールに置かれます。

    min-pool-size が小さすぎると、新しい接続の確立が必要となる可能性があるため、最初のデータベースコマンドの実行中に待ち時間が長くなります。min-pool-size が大きすぎると、データソースまたはリソースアダプターへ無駄な接続が発生します。

    アクティビティーのない期間が続くと、接続プールは縮小され、min-pool-size の値まで縮小される可能性があります。

    Red Hat は、min-pool-size をアプリケーションに適したオンデマンドスループットを可能にする接続数に設定することを推奨します。

    最大プールサイズ

    max-pool-size 属性は、接続プールの最大サイズを定義します。これは、アクティブな接続の数を制限し、同時アクティビティーの量も制限するため、重要なパフォーマンスパラメーターとなります。

    max-pool-size が小さすぎると、リクエストが不必要にブロックされます。 max-pool-size が大きすぎると、JBoss EAP の環境、データソース、またはリソースアダプターによって、処理能力を超えた量のリソースが使用されます。

    Red Hat は、負荷のかかった状態で パフォーマンスを監視した後に測定された許容範囲の MaxUsedCount よりも 15% 以上高い max-pool-size を設定することを推奨します。これにより、想定以上の条件でも多少のバッファーを確保できるようにします。

    プレフィル

    pool-prefill 属性は、JBoss EAP の起動時に JBoss EAP が 最低接続数で接続プールをプレフィルするかどうかを指定します。デフォルト値は false です。

    pool-prefilltrue に設定すると、JBoss EAP は起動時により多くのリソースを使用しますが、初期トランザクションの待ち時間が短縮されます。

    min-pool-size を最適化した場合、Red Hat は pool-prefilltrue に設定することを推奨します。

    厳密な最小値

    pool-use-strict-min 属性は、プールの接続数が指定の最小値を下回ることが可能であるかどうかを指定します。

    pool-use-strict-mintrue に設定すると、接続数は一時的に指定の最小値を下回ることができません。デフォルト値は false です。

    プール接続の最小数が指定されていても、JBoss EAP が接続を閉じるときなどに接続がアイドル状態になり、タイムアウトすると、新しい接続が作成されプールに追加される前に、合計接続数が一時的に最小数を下回ることがあります。

    タイムアウト

    接続プールに設定可能なタイムアプトオプションは複数ありますが、パフォーマンスのチューニングには idle-timeout-minutes が重要です。

    idle-timeout-minutes 属性は、接続が閉じられるまでにアイドル状態でいられる最大期間を分単位で指定します。アイドル接続が閉じられると、プールの接続数が指定の最小値まで減少します。

    タイムアウトが長いほどより多くのリソースが使用されますが、リクエストはより迅速に対応されます。タイムアウトが短いほどより少ないリソースが使用されますが、リクエストは新しい接続が作成されるまで待機する必要があることがあります。

6.3. プール属性の設定

6.3.1. データソースプール属性の設定

前提条件

  • JDBC ドライバーをインストールします。JBoss EAP『設定ガイド』の「JDBC ドライバー」を参照してください。
  • データソースを作成します。JBoss EAP『設定ガイド』の「データソースの作成」を参照してください。

管理 CLI または管理コンソールのいずれかを使用してデータソースプール属性を設定できます。

  • 管理コンソールを使用する場合は、ConfigurationSubsystemsDatasourcesNon-XA | XA と選択し、データソースを選択したら 表示 をクリックします。プールのオプションはデータソースの Pool タブで設定可能です。タイムアウトのオプションは Timeouts タブで設定可能です。
  • 管理 CLI を使用する場合は、以下のコマンドを実行します。

    /subsystem=datasources/data-source=DATASOURCE_NAME/:write-attribute(name=ATTRIBUTE_NAME,value=ATTRIBUTE_VALUE)

    たとえば、ExampleDS データソースの min-pool-size 属性の値を5 (5 つの接続) に設定するには、以下のコマンドを実行します。

    /subsystem=datasources/data-source=ExampleDS/:write-attribute(name=min-pool-size,value=5)

6.3.2. リソースアダプタープール属性

前提条件

  • リソースアダプターをデプロイし、接続定義を追加します。JBoss EAP『設定ガイド』の「リソースアダプターの設定」を参照してください。

管理 CLI または管理コンソールのいずれかを使用してリソースアダプタープール属性を設定できます。

  • 管理コンソールを使用する場合は、ConfigurationSubsystemsResource Adapters と選択し、データソースを選択したら 表示 をクリックして、左側のメニューで Connection Definitions を選択します。プールのオプションは Pool タブで設定可能です。タイムアウトのオプションは Attributes タブで設定可能です。
  • 管理 CLI を使用する場合は、以下のコマンドを実行します。

    /subsystem=resource-adapters/resource-adapter=RESOURCE_ADAPTER_NAME/connection-definitions=CONNECTION_DEFINITION_NAME:write-attribute(name=ATTRIBUTE_NAME,value=ATTRIBUTE_VALUE)

    たとえば、my_RA リソースアダプター my_CD 接続定義の min-pool-size 属性の値を 5 (5 つの接続) に設定するには、以下のコマンドを使用します。

    /subsystem=resource-adapters/resource-adapter=my_RA/connection-definitions=my_CD:write-attribute(name=min-pool-size,value=5)