JDBC データソース

JDBC データソースを作成するには、CREATE DATASOURCE JDBC ステートメントを使用します。

CREATE DATASOURCE JDBC ステートメントの構文
CREATE [ OR REPLACE ] DATASOURCE JDBC <name:identifier>
    [ FOLDER = <literal> ]
    [ DRIVERCLASSNAME = <literal> ]
    [ DATABASEURI = <literal> ]
    [
        <credentials>
      | USE_KERBEROS ( <kerberos_credentials> )
      | <credentials> USE_KERBEROS_AT_RUNTIME ( <kerberos_credentials> )
      | <credentials> USE_KERBEROS_AT_INTROSPECTION ( <kerberos_credentials> )
      | WITH PASS-THROUGH SESSION CREDENTIALS ( <pass_through_options> )
      | WITH PASS-THROUGH SESSION CREDENTIALS ( )
        [   USE_KERBEROS_AT_INTROSPECTION ( <kerberos_credentials> )
          | USE_AWS_IAM_CREDENTIALS_AT_INTROSPECTION ( <aws_iam_credentials> ) ]
      | USE_AWS_IAM_CREDENTIALS ( <aws_iam_credentials> )
      | <credentials> USE_AWS_IAM_CREDENTIALS_AT_RUNTIME ( <aws_iam_credentials> )
      | <credentials> USE_AWS_IAM_CREDENTIALS_AT_INTROSPECTION ( <aws_iam_credentials> )
    ]
    [ WITH PROXY_CONNECTIONS ]
    [ CLASSPATH = <literal> ]
    [ DATABASENAME = <literal> DATABASEVERSION = <literal>]
    [ ISOLATIONLEVEL =
        {   TRANSACTION_NONE
          | TRANSACTION_READ_COMMITTED
          | TRANSACTION_READ_UNCOMMITTED
          | TRANSACTION_REPEATABLE_READ
          | TRANSACTION_SERIALIZABLE
        }
    ]
    [ IGNORETRAILINGSPACES = { TRUE | FALSE } ]
    [ FETCHSIZE = <integer> ]
    [ BATCHINSERTSIZE = <integer> ]
    [
        <pool configuration 1>
      | <pool configuration 2>
      | <pool configuration 3>
    ]
    [ PROPERTIES ( <literal> = <literal> [, <literal> = <literal> ]* ) ]
    [ KERBEROSPROPERTIES ( <literal> = <literal>
        [, <literal> = <literal> ]* ) ]
    [ USEEXTERNALTABLES (
          ONMOVEREAD = <boolean>,
          ONMOVEWRITE = <boolean>
      )
    ]
    [ DATAMOVEMENT_TARGET = { true | false } ]
    [ TARGET_CATALOG = <literal> [ ESCAPE ] ]
    [ TARGET_SCHEMA = <literal> [ ESCAPE ] ]
    [ TRANSFER_RATE_FACTOR = <double> ]
    [ PROCESSING_UNITS = <integer> ]
    [ CPUS_PER_PROCESSING_UNIT = <integer> ]
    [ INTERNAL_TRANSFER_RATE = <double> ]
    [ DESCRIPTION = <literal> ]
    [ SOURCECONFIGURATION ( [ <source configuration property>
                            [, <source configuration property> ]* ] ) ]

<pass_through_options> ::=
    [ <credentials> ]
    [ USE_KERBEROS ]
    [ PASSTHROUGH_KERBEROS_TARGET_PRINCIPAL = <literal> ]
    [ CONSTRAINED_DELEGATION_PROPERTY_NAME = <literal> ]

<credentials> ::=
  USERNAME = <literal> USERPASSWORD = <literal> [ ENCRYPTED ]

<kerberos_credentials> ::=
    KRB_USERNAME = <literal> KRB_USERPASSWORD = <literal> [ ENCRYPTED ]
  | KRB_USERNAME = <literal> KRB_KEYTAB = <literal>

<aws_iam_credentials> ::=
    AWS_ACCESS_KEY_ID = <literal> AWS_SECRET_ACCESS_KEY = <literal> [ ENCRYPTED ] [ AWS_DATABASE_USER = <literal> ]
  | AWS_ACCESS_KEY_ID = <literal> AWS_SECRET_ACCESS_KEY = <literal> [ ENCRYPTED ] AWS_IAM_ROLE_ARN = <literal> [ AWS_DATABASE_USER = <literal> ]
  | AWS_IAM_ROLE_ARN = <literal> [ AWS_DATABASE_USER = <literal> ]
  | [ AWS_DATABASE_USER = <literal> ]

<pool configuration 1> ::=
  VALIDATIONQUERY = <literal>
  INITIALSIZE = <integer>
  MAXACTIVE = <integer>

<pool configuration 2> ::=
  VALIDATIONQUERY = <literal>
  INITIALSIZE = <integer>
  MAXACTIVE = <integer>
  EXHAUSTEDACTION = <integer>

<pool configuration 3> ::=
  VALIDATIONQUERY = <literal>
  INITIALSIZE = <integer>
  MAXIDLE = <integer>
  MINIDLE = <integer>
  MAXACTIVE = <integer>
  EXHAUSTEDACTION = <integer>
  TESTONBORROW = <boolean>
  TESTONRETURN = <boolean>
  TESTWHILEIDLE = <boolean>
  [ <pool sub-configuration 1> ]

<pool sub-configuration 1> ::=
  TIMEBETWEENEVICTION = <integer>
  NUMTESTPEREVICTION = <integer>
  MINEVICTABLETIME = <integer>
  [ <pool sub-configuration 2>]

<pool sub-configuration 2> ::=
  POOLPREPAREDSTATEMENTS = <boolean>
  MAXSLEEPINGPS = <integer>
  INITIALCAPACITYPS = <integer>

<source configuration property> ::=
    ALLOWLITERALASPARAMETER = <property value>
  | DELEGATE_BINARY_ORDERBY_COLLATION = <property value>
  | DELEGATE_ORDERBY_COLLATION_MODIFIER = <property value>
  | DELEGATEAGGREGATEFUNCTIONS = {
        DEFAULT
      | ( <function:identifier> [, <function:identifier> ]* ] )
      }
  | DELEGATEALLOPERATORS = <property value>
  | DELEGATEARRAYLITERAL = <property value>
  | DELEGATECOMPOUNDFIELDPROJECTION = <property value>
  | DELEGATEGROUPBY = <property value>
  | DELEGATEHAVING = <property value>
  | DELEGATEINNERJOIN = <property value>
  | DELEGATEINTERSECTION = <property value>
  | DELEGATEINVALIDNUMBERLITERALSASNULL = <property value>
  | DELEGATEJOIN = <property value>
  | DELEGATELEFTFUNCTION = <property value>
  | DELEGATELEFTLITERAL = <property value>
  | DELEGATELITERALEXPRESSION = <property value>
  | DELEGATEMIXEDAGGREGATEEXPRESSION = <property value>
  | DELEGATENATURALOUTERJOIN = <property value>
  | DELEGATENOTCONDITION = <property value>
  | DELEGATE_OFFSET_RESTRICTION = <delegate offset restriction value>
  | DELEGATEOPERATORSLIST = {
        DEFAULT
      | ( <operator:identifier> [, <operator:identifier> ]* ] )
      }
  | DELEGATEORCONDITION = <property value>
  | DELEGATEORDERBY = <property value>
  | DELEGATEPROJECTION = <property value>
  | DELEGATEREGISTERLITERAL = <property value>
  | DELEGATERIGHTFIELD = <property value>
  | DELEGATERIGHTFUNCTION = <property value>
  | DELEGATERIGHTLITERAL = <property value>
  | DELEGATESCALARFUNCTIONS = {
        DEFAULT
      | ( <function:identifier> [, <function:identifier> ]* ] )
      }
  | DELEGATESELECTDISTINCT = <property value>
  | DELEGATESELECTION = <property value>
  | DELEGATEUNION = <property value>
  | SUPPORTSAGGREGATEFUNCTIONSOPTIONS = <property value>
  | SUPPORTSBRANCHOUTERJOIN = <property value>
  | SUPPORTSEQOUTERJOINOPERATOR = <property value>
  | SUPPORTSEXPLICITCROSSJOIN = <property value>
  | SUPPORTSFULLEQOUTERJOIN = <property value>
  | SUPPORTSFULLNOTEQOUTERJOIN = <property value>
  | SUPPORTSFUSINGINUSINGANDNATURALJOIN = <property value>
  | SUPPORTSJOINONCONDITION = <property value>
  | SUPPORTSNATURALJOIN = <property value>
  | SUPPORTSPREPAREDSTATEMENT = <property value>
  | SUPPORTSUSINGJOIN = <property value>

<property value> ::=
    true
  | false
  | DEFAULT

<delegate offset restriction value> ::=
    DEFAULT
  | 'NONE'
  | 'FETCH'
  | 'ORDER_BY'
  | 'FETCH_ORDER_BY'
  | 'NO_ORDER_BY'
  | 'FETCH_NO_ORDER_BY'

JDBC データソースを変更するには、ALTER DATASOURCE JDBC ステートメントを使用します。

ALTER DATASOURCE JDBC ステートメントの構文
ALTER DATASOURCE JDBC <name:identifier>
    [ DRIVERCLASSNAME = <literal> ]
    [ DATABASEURI = <literal> ]
    [
        <credentials>
      | USE_KERBEROS ( <kerberos_credentials> )
      | <credentials> USE_KERBEROS_AT_RUNTIME ( <kerberos_credentials> )
      | <credentials> USE_KERBEROS_AT_INTROSPECTION ( <kerberos_credentials> )
      | WITH PASS-THROUGH SESSION CREDENTIALS ( <pass_through_options> )
      | WITH PASS-THROUGH SESSION CREDENTIALS ( )
          [   USE_KERBEROS_AT_INTROSPECTION ( <kerberos_credentials> )
            | USE_AWS_IAM_CREDENTIALS_AT_INTROSPECTION ( <aws_iam_credentials> ) ]
      | USE_AWS_IAM_CREDENTIALS ( <aws_iam_credentials> )
      | <credentials> USE_AWS_IAM_CREDENTIALS_AT_RUNTIME ( <aws_iam_credentials> )
      | <credentials> USE_AWS_IAM_CREDENTIALS_AT_INTROSPECTION ( <aws_iam_credentials> )
      [ WITH PROXY_CONNECTIONS ]
    ]
    [ CLASSPATH = <literal> ]
    [
      DATABASENAME = <literal>
      DATABASEVERSION = <literal>
    ]
    [ ISOLATIONLEVEL =
        TRANSACTION_NONE
      | TRANSACTION_READ_COMMITTED
      | TRANSACTION_READ_UNCOMMITTED
      | TRANSACTION_REPEATABLE_READ
      | TRANSACTION_SERIALIZABLE
    ]
    [ IGNORETRAILINGSPACES = { true | false } ]
    [ FETCHSIZE = <integer> ]
    [ BATCHINSERTSIZE = <integer> ]
    [
        <pool configuration 1>
      | <pool configuration 2>
      | <pool configuration 3>
    ]
    [ PROPERTIES ( <literal> = <literal> [, <literal> = <literal> ]* ) ]
    [ KERBEROSPROPERTIES ( <literal> = <literal> [, <literal> = <literal> ]* ) ]
    [ USEEXTERNALTABLES (
          ONMOVEREAD = <boolean>,
          ONMOVEWRITE = <boolean>
      )
    ]
    [ DATAMOVEMENT_TARGET = { true | false } ]
    [ TARGET_CATALOG = <literal> [ ESCAPE ] ]
    [ TARGET_SCHEMA = <literal> [ ESCAPE ] ]
    [ TRANSFER_RATE_FACTOR = <double> ]
    [ PROCESSING_UNITS = <integer> ]
    [ CPUS_PER_PROCESSING_UNIT = <integer> ]
    [ INTERNAL_TRANSFER_RATE = <double> ]
    [ DESCRIPTION = <literal> ]
    [ SOURCECONFIGURATION ( [ <source configuration property>
                            [, <source configuration property> ]* ] ) ]

<pool configuration 1> ::= (「 CREATE DATASOURCE JDBC 」を参照)

<pool configuration 2> ::= (「 CREATE DATASOURCE JDBC 」を参照)

<pool configuration 3> ::= (「 CREATE DATASOURCE JDBC 」を参照)

<pool sub-configuration 1> ::= (「 CREATE DATASOURCE JDBC 」を参照)

<pool sub-configuration 2> ::= (「 CREATE DATASOURCE JDBC 」を参照)

<source configuration property> ::= (「 CREATE DATASOURCE JDBC 」を参照)

<credentials> ::= (「 CREATE DATASOURCE JDBC 」を参照)

これらのステートメントで利用する一部のパラメーターの説明 :

  • OR REPLACE: 指定されている場合、同じ名前のデータソースが存在すれば、現在の定義が新しい定義で置き換えられます。

  • FOLDER: データソースが保存されるフォルダーの名前。

  • DRIVERCLASSNAME: データソースへのコネクションに使用されるドライバークラス。

  • DATABASEURI: データベースへのコネクション URL。

  • データベースに接続するために使用できる認証方法は以下のとおりです。

    1. <credentials>: クエリの実行およびイントロスペクションプロセス (データソースの [Create base view] ダイアログでデータベースのテーブルやビューを表示するプロセス) 用に、データベースに接続する際に USERNAMEPASSWORD を使用します。

    2. USE_KERBEROS ( <kerberos_credentials> ): クエリの実行およびイントロスペクションプロセス (データソースの [Create base view] ダイアログでデータベースのテーブルやビューを表示するプロセス) 用に、データベースに接続する際に Kerberos を使用します。

    3. <credentials> USE_KERBEROS_AT_RUNTIME ( <kerberos_credentials> ): クエリを実行するために、データベースに接続する際に Kerberos を使用しますが、イントロスペクションプロセスにはログインとパスワードを使用します。

    4. <credentials> USE_KERBEROS_AT_INTROSPECTION ( <kerberos_credentials> ): クエリを実行するために、データベースに接続する際にログインとパスワードを使用しますが、イントロスペクションプロセスには Kerberos を使用します。

    5. WITH PASS-THROUGH SESSION CREDENTIALS ( <pass_through_options> ): イントロスペクションプロセスにはログインとパスワードまたは AWS IAM 資格情報を使用し、クエリを実行するためには Virtual DataPort サーバーに接続されたクライアントの資格情報を使用します。クエリを実行するための資格情報は、Virtual DataPort サーバーに接続するために使用されるクライアントの認証方法に応じて Kerberos またはログイン/パスワードを使用できます。 <pass_through_options>USE_KERBEROS を指定している場合、サーバーはログイン/パスワードを使用して Kerberos チケットを作成します。

    6. USE_AWS_IAM_CREDENTIALS ( <aws_iam_credentials> ): クエリの実行およびイントロスペクションプロセス (データソースの [Create base view] ダイアログでデータベースのテーブルやビューを表示するプロセス) 用に、データベースに接続する際に AWS IAM 資格情報を使用します。

    7. <credentials> USE_AWS_IAM_CREDENTIALS_AT_RUNTIME ( <aws_iam_credentials> ): クエリを実行するために、データベースに接続する際に AWS IAM 資格情報を使用しますが、イントロスペクションプロセスにはログインとパスワードを使用します。

    8. <credentials> USE_AWS_IAM_CREDENTIALS_AT_INTROSPECTION ( <aws_iam_credentials> ): クエリを実行するために、データベースに接続する際にログインとパスワードを使用しますが、イントロスペクションプロセスには AWS IAM 資格情報を使用します。

      このオプションを使用するデータソースを作成し、Virtual DataPort サーバーへの接続に使用した資格情報とは別の資格情報でそのデータソースのビューにクエリを実行する場合は、 USERNAMEPASSWORD の各パラメーターを CONTEXT に追加します。この 2 つのパラメーターは、 WITH PASS-THROUGH SESSION CREDENTIALS オプションを使用して作成したデータソースの場合のみ考慮されます。

      たとえば、WITH PASS-THROUGH SESSION CREDENTIALS オプションを使用して view1 を作成し、以下を実行するとします。

      SELECT *
      FROM view1
      CONTEXT(
          USERNAME = 'admin'
        , PASSWORD = 'd4GvpKA5BiwoGUFrnH92DNq5TTNKWw58I86PVH2tQIs/q1RH9CkCoJj57NnQUlmvgvvVnBvlaH8NFSDM0x5fWCJiAvyia70oxiUWbToKkHl3ztgH1hZLcQiqkpXT/oYd' ENCRYPTED
        , DOMAIN = 'ACME_DOMAIN')
      

      Virtual DataPort サーバーは、ユーザーが Virtual DataPort サーバーへの接続に使用した資格情報を無効にし、ユーザー名 admin 、パスワード password 、ドメイン acme_domain を使用して Web サービスに接続します。

      トークン ENCRYPTED を追加して、必ず暗号化したパスワードを入力する必要があります。パスワードを暗号化するには、 ENCRYPT_PASSWORD ステートメントを実行します。以下に例を示します。

      ENCRYPT_PASSWORD 'my_secret_password';
      
    1. WITH PASS-THROUGH SESSION CREDENTIALS () USE_KERBEROS_AT_INTROSPECTION ( <kerberos_credentials> ): イントロスペクションプロセスには Kerberos 認証を使用し、クエリを実行するためには Virtual DataPort サーバーに接続されたクライアントの資格情報を使用します。クエリを実行するための資格情報は、Virtual DataPort サーバーに接続するために使用されるクライアントの認証方法に応じて Kerberos またはログイン/パスワードを使用できます。

    重要

    「パススルーセッション資格情報」の使用には重要な意味があります。説明を読むには、管理ガイドの「 JDBC ソースのインポート 」で「パススルーセッション資格情報」を検索してください。

  • WITH PROXY_CONNECTIONS: 指定されている場合、データソースは Oracle の「プロキシ認証」機能を使用します。この機能の仕組みについては、管理ガイドの「 Oracle プロキシ認証の仕組み 」を参照してください。

  • CLASSPATH: 指定されたソース用の JDBC ドライバーを含む JAR ファイルへのパス (オプション)。

  • DATABASENAMEDATABASEVERSION: アクセスするデータベースの名前とバージョン。

  • ISOLATIONLEVEL: データベース内で実行されるクエリとトランザクションに必要な分離レベルを設定します。このパラメーターが指定されていない場合、データソースはデータベースのデフォルトの分離レベルを使用します。

  • IGNORETRAILINGSPACES: true の場合、データソースのビューから返される結果のうち、 text 型の値の末尾にある空白文字が Virtual DataPort サーバーによって削除されます。

  • FETCHSIZE: 多くの行をデータベースからフェッチする必要がある場合に、その行数に関するヒントを JDBC ドライバーに示します。

  • BATCHINSERTSIZE: データソースが、このデータソースのデータベースに複数行を挿入する必要がある場合に、それらをバッチ単位で挿入できます。この数値によって、バッチごとのクエリ数を設定します。

    この値は、他のデータソースからデータソースにデータを移動した結果として、このデータソースのデータベースに行を挿入する場合にのみ使用されます。詳細については、管理ガイドの「 データ移動 」を参照してください。

  • 「<pool configuration 1>」、「<pool configuration 2>」および「<pool configuration 3>」の各パラメーターについては、後述の「 JDBC データソースのコネクションプール 」を参照してください。

  • ストアドプロシージャのプールのパラメーター :

    • POOLPREPAREDSTATEMENTS: true の場合、準備済みステートメントのプールが有効になります。

    • INITIALCAPACITYPS: 準備済みステートメントのプールの初期サイズ。 POOLPREPAREDSTATEMENTStrue に設定されている場合のみ有用です。

    • MAXSLEEPINGPS: 準備済みステートメントのプール内でアイドル状態の準備済みステートメントの最大数。 POOLPREPAREDSTATEMENTStrue に設定されている場合のみ有用です。

  • USEEXTERNALTABLES: データベースとの間でデータの読み取りと書き込みを行うための、このデータベース独自の API の使用に関するオプション。

    この独自 API を使用したデータベースへのデータの書き込みは、「一括読み込み」と呼ばれています。

    Virtual DataPort サーバーがデータベースの一括読み込み API を使用してデータを書き込むのには、2 つの理由があります。

    1. データの移動を実行する場合。詳細については、管理ガイドの「 データ移動 」を参照してください。

    2. テーブルのキャッシュをロードする場合。

    このプロセスの仕組みの詳細については、管理ガイドの「 データ一括読み込み 」を参照してください。

    • ONMOVEREAD (データベースが Netezza の場合のみ考慮): true の場合、実行エンジンはデータの移動を実行するために、Netezza データベースからデータを読み取る際、「外部テーブル」機能を使用します。これを true に設定するのは、データソースの [Read & Write] タブで [Read settings] の [Use external tables for data movement] チェックボックスをチェックするのと同じことです。

    • ONMOVEWRITE: true の場合、実行エンジンはデータの移動を実行するために、目的のデータベースにデータを書き込む際、データベース独自の API を使用します。これを yes に設定するのは、データソースの [Read & Write] タブで [Write settings] の [Use Bulk Data Load APIs] チェックボックスをチェックするのと同じことです。

  • DATAMOVEMENT_TARGET: true の場合、データソースをデータの移動先にすることができます。これを true に設定するのは、データソースの [Read & Write] タブで [Write settings] の [Can be data movement target] チェックボックスをチェックするのと同じことです。

  • BULK_LOAD_CONFIGURATION: データベースの一括読み込み API の設定。指定できる設定はデータベースアダプターによって異なります。そのため、管理ツールから設定を変更することをお勧めします。

  • データソース構成パラメーター (SOURCECONFIGURATION): Virtual DataPort では、基盤となるデータソースに固有の特性を指定できます。これらは、データソースに対してステートメントを実行する際に考慮されます。詳細については、「 データソース構成プロパティ 」を参照してください。

  • PROPERTIES: データベースとのコネクションを作成するときに JDBC ドライバーに渡される名前/値ペアのリスト。

  • KERBEROSPROPERTIES: データベースとのコネクションを作成するときに JDBC ドライバーに渡される名前/値ペアのリスト。このリストのプロパティは、Virtual DataPort サーバーとデータベースの間で Kerberos 認証メカニズムを構成することを意図しています。JDBC データソースにおける Kerberos 認証の詳細については、管理ガイドの「 Kerberos 認証による JDBC ソースへの接続 」を参照してください。

  • 以下のオプションパラメーターは、データソースに関する情報を指定します。コストオプティマイザーは、実行計画のコストを評価するときにこれらの値を使用します。通常はデフォルト値が適正に設定されているため、コストオプティマイザーに精通していないかぎり、これらのパラメーターは指定しないでください。

    • TRANSFER_RATE_FACTOR: Denodo サーバーとデータソース間のネットワーク接続速度の相対的な測定値。従来の 100 Mbps LAN を介してデータソースにアクセス可能な場合は、デフォルト値 (1) を使用します。より高速なネットワークの場合はより大きな値を、WAN 経由でアクセス可能なデータソースの場合はより小さな値を使用します。

    • PROCESSING_UNITS: 並列データベースにおける SPU の数。

    • CPUS_PER_PROCESSING_UNIT: 並列データベースにおける SPU あたりの CPU の数。

    • INTERNAL_TRANSFER_RATE: ミリ秒あたりの KB 単位の転送速度。

JDBC データソースのコネクションプール

Denodo の JDBC データソースはコネクションプールと一緒に作成されます。コネクションプールは、データベースへのコネクションのキャッシュです。実行時に、アプリケーションによるクエリの送信に伴ってこのデータソースにクエリを送信する場合、実行エンジンはデータソースのプールにコネクションをリクエストします。プール内にアイドル状態のコネクションがある場合は、それが返されます。アイドル状態のコネクションがない場合は、プールがコネクションを作成します。その後、実行エンジンはこのコネクションを使用してクエリを実行し、クエリが終了すると、コネクションはプールに戻されます。この時点で、このコネクションは次のクエリで使用可能になります。

コネクションプールを使用すると、データベースを扱うクエリのパフォーマンスが大幅に向上します。その理由は、新しいコネクションの作成は時間とリソースの点でコストがかかるからです。新しいコネクションごとに、Denodo はデータベースとのネットワーク接続を確立する必要があり、データベースはクライアントを認証し、新しいコネクションに新しいメモリを割り当てる必要があります。コネクションがすでに作成されていれば、このプロセスは回避されます。

コネクションプールは以下の利点をもたらします。

  • 新しいコネクションを作成する回数の削減。

  • クエリを実行するためにコネクションを取得する時間の短縮。

  • データベースに対して開かれているコネクション数を制限する方法の提供。

以上が、新しい JDBC データソースがコネクションプールを備えている理由です。一般に、コネクションプールは無効にするべきではありません。

コネクションプールの正確な動作は、設定によって異なります。

JDBC データソースのコネクションプールのパラメーター

JDBC データソースのコネクションプールは、以下のパラメーターを用いて構成されます。それらの大半は管理ツールからは変更できず、 ALTER DATA SOURCE JDBC ステートメントによってのみ変更できます。

  • MAXACTIVE (デフォルト値 : 20): 一度に開くことができる最大コネクション数。これらは、クエリを実行するために現在使用されているコネクションと、プール内のアイドル状態のコネクションの合計です。

    このパラメーターは、[Connection Pool Configuration] ダイアログの Maximum number of active connections フィールドで、 GUI を使用して変更できます。

    • 負の値 (-1 など) の場合、ある時点でのプール内のコネクション数に制限はありません。

    • データソースのコネクションプールを無効にするには 0 を入力します。この場合、コネクションプールのその他のパラメーターは無効になります。

      この場合、データソースは、クエリごとにデータベースへのコネクションを新たに開き、クエリが終了すると、コネクションを閉じます。クエリがトランザクションの一部である (クライアントがすでに BEGIN を実行したが、 COMMIT または ROLLBACK をまだ実行していない) 場合、実行エンジンはトランザクションが終了するまでコネクションを開いたまま保持します。Denodo のトランザクションは分散されるため、クエリで扱うすべてのデータベースでトランザクションの確定またはロールバックを行う必要があるからです。トランザクションの詳細については、「 Virtual DataPort のトランザクション 」を参照してください。

    EXHAUSTEDACTION が 2 に設定されると MAXACTIVE は無効になります (後述の説明を参照)。

  • MAXIDLE (デフォルト値 : -1): 一度にプール内でアイドル状態にできる最大コネクション数。

    • -1 以下の場合、ある時点でアイドル状態にできるコネクション数に制限はありません。

    • この値が 0 以上で、 TIMEBETWEENEVICTION パラメーターと MINEVICTABLETIME パラメーターが 0 より大きい場合、一定時間を経過したアイドル状態のコネクションは閉じられます。

  • MINIDLE (デフォルト値 : 0): コネクションプール内でアイドル状態の最小コネクション数。プールが新しいコネクションを開くまでクエリが待機する必要がないように、プール内に常にアイドル状態のコネクションを確保するために役立ちます。 MINIDLE を満たすために、プールは MAXACTIVE を超えるコネクションを作成しません。

  • EXHAUSTEDACTION (デフォルト値 : 1): プールが空 (すべてのコネクションがクエリを実行中) の場合のプールの動作を指定します。指定可能な値は以下のとおりです。

    • 0: データソースはエラーを返し、クエリは失敗します。

    • 1: プールはコネクションが使用可能になるか、最大待機時間に達するまで待機します。最大待機時間に達すると、クエリは失敗します。

      デフォルトの最大待機時間は 30 秒ですが、変更は可能です。最大待機時間が -1 の場合、データソースはコネクションが使用可能になるまで無期限に待機します。このプロパティを変更するには、VQL シェルから以下のコマンドを実行して、Virtual DataPort サーバーを再起動します。

      -- This represents 20 seconds because the value of this property is in milliseconds.
      
      SET 'com.denodo.vdb.misc.datasource.JDBCDataSource.pool.maxWait' = '20000';
      

      最大待機時間を変更して再起動した後、既存の JDBC データソースは引き続き同じ最大待機時間を保持しますが、最大待機時間が変更されたデータソースの場合はそれぞれの最大待機時間が新しい値に変更されます。

    • 2: アイドル状態のコネクションがない場合、データソースは新しいコネクションを作成します。これによって MAXACTIVE は無効になります。

  • INITIALSIZE (デフォルト値 : 4): プールが初期化されたときのコネクション数。

    認証オプションの「パススルーセッション資格情報」を使用してデータソースが作成されている場合、この値は無効になります。このオプションでは、Virtual DataPort サーバーは、このデータベースに接続するユーザーアカウントごとにコネクションプールを 1 つずつ作成します。プールに最初に用意されるコネクションは、 INITIALSIZE の値に関係なく 1 つのみです。これは、不要なコネクションが過剰に作成されるのを防ぐためです。

  • VALIDATIONQUERY (デフォルト値 : アダプターによって異なる): コネクションが引き続き有効であるかどうかをチェックするためにコネクションプールによって実行される SQL クエリ。「ping クエリ」とも呼ばれています。 TESTONBORROWTESTONRETURNTESTWHILEIDLE の少なくとも 1 つが true の場合にのみ使用されます。

    このパラメーターは、[Connection Pool Configuration] ダイアログの Ping query フィールドで GUI を使用して変更できます。

    管理ツールを使用して JDBC データソースを作成し、 Generic 以外のデータベースアダプターを選択した場合、そのデータベースに適した検証クエリによってデータソースが自動的に作成されます。ただし、 Generic を選択した場合は、有効な ping クエリを提供する必要があります。このクエリは、リソースの使用量を可能なかぎり小さくするために頻繁に実行されます。さらに、プールによってクエリされるテーブルが存在している必要があり、ユーザーはそれを実行する権限を持っている必要があります。

    ping クエリの例 :

    SELECT 1
    SELECT 1 FROM dual
    SELECT 1 FROM view LIMIT 0
    

    ping クエリには、補間変数 USER_NAME を含めることができます。実行時に、この変数はクエリを実行する Virtual DataPort ユーザーのユーザー名で置き換えられます。

    たとえば、JDBC データソースの ping クエリが CALL DBMS_SESSION.SET_IDENTIFIER('@{USER_NAME}') であるとします。

    ユーザー scott がこのデータソースを扱うクエリを実行した場合、Virtual DataPort はクエリ CALL DBMS_SESSION.SET_IDENTIFIER('scott') をプールから返されたコネクションに対して実行し、このコネクションが引き続き有効で期限切れになっていないことを確認します。

    TESTONBORROW が true の場合、ping クエリは実際のクエリがデータベースに送信される前に毎回実行されます。このクエリには、現在クエリを実行しているユーザー名を挿入できるため、データベースでのステートメントの実行や監査目的に役立てることができます。

  • TESTONBORROW (デフォルト値 : true): 値が true で、 VALIDATIONQUERY パラメーターが空でない場合、プールは選択したコネクションで VALIDATIONQUERY を実行してから、そのコネクションを実行エンジンに返します。 VALIDATIONQUERY が失敗した場合、プールはコネクションを破棄し、別のコネクションを選択します。それ以上アイドル状態のコネクションがない場合は、コネクションを作成します。

  • TESTONRETURN (デフォルト値 : false): 値が true で、 VALIDATIONQUERY パラメーターが空でない場合、プールはプールに返されたコネクションに対して VALIDATIONQUERY を実行します。 VALIDATIONQUERY が失敗した場合、プールはコネクションを破棄します。


プールは、プール内のコネクションが引き続き有効であるかを定期的に確認したり、一定期間を経過した後もプール内でアイドル状態のままのコネクションを閉じたりするように構成できます。コネクションが引き続き有効かどうかを確認するため、プールは VALIDATIONQUERY を実行します。これに失敗した場合、プールはコネクションを破棄します。検証クエリが失敗する主な理由は、以下のとおりです。

  1. データベースには、アクティビティがないまま一定期間が経過したコネクションを閉じるメカニズムがあります。

  2. Denodo サーバーとデータベース間のファイアウォールは、アクティビティがないまま一定期間が経過したコネクションを自動的に閉じます。


このオプションを有効にする主な目的は、以下のとおりです。

  1. プールのコネクションを常に有効にします。このようにすれば、コネクションが必要なときに、プールのコネクションは常に有効です。

  2. しばらく使用されていないコネクションを閉じて、データベース内のリソースを解放します。

コネクションを検証してアイドル状態のコネクションを閉じるタスクは、コネクションプールごとに 1 つずつある「コネクションエビクションスレッド」 によって実行されます。このスレッドは定期的に起動し、これらのチェックを実行します。

コネクションエビクションスレッドを制御するパラメーターは、以下のとおりです。

  • TIMEBETWEENEVICTION (デフォルト値 : -1): エビクションスレッドがアイドル状態のコネクションの調査を「実行」する前にスリープしている期間 (ミリ秒単位)。負の値の場合、エビクションスレッドは起動しません。

    プールへのアクセスのために、エビクションの実行と実行エンジンは競合します。そのため、このスレッドを過剰に実行すると、パフォーマンスの問題が生じることがあります。

  • MINEVICTABLETIME (デフォルト値 : 1800000 - 30 分): コネクションがエビクションの対象となる前にプール内でアイドル状態のままでいる最小時間 (ミリ秒単位)。

    1 未満の場合、アイドル時間が原因でコネクションがプールからエビクションされることはありません。この場合、エビクションスレッドは検証クエリの実行時にエラーを返すコネクションのみを破棄します。

    コネクションが MINEVICTABLETIME を超えてアイドル状態のままであっても、そのコネクションを閉じた後にアイドル状態のコネクション数が MINIDLE 未満の場合、コネクションは閉じられません。

    TIMEBETWEENEVICTION が 1 未満の場合、このパラメーターは有効ではありません。

  • TESTWHILEIDLE (デフォルト値 : false): 値が true で、 VALIDATIONQUERY パラメーターが空でない場合、コネクションエビクションスレッドによってコネクションが検証されます。コネクションを検証するため、スレッドはコネクションに対して検証クエリを実行します。失敗すると、プールはそのコネクションをプールから削除します。

    TIMEBETWEENEVICTION が 1 未満の場合、このパラメーターは有効ではありません。

  • NUMTESTPEREVICTION (デフォルト値 : 3): コネクションエビクションスレッドの実行ごとに調査されるコネクション数。スレッドを実行する都度、プール内のすべてのコネクションを調査しない理由は、クエリが調査中のコネクションを使用できなくなるからです。

    TIMEBETWEENEVICTION が 1 未満の場合、このパラメーターは有効ではありません。