ロードバランサーが Data Catalog と Design Studio のコネクションを閉じないようにする¶
一部のプロキシとロードバランサーは、しばらく非アクティブだった (通過するデータの流れがなかった) コネクションを閉じます。時間がかかるオペレーションは、この影響を受けます。たとえば、Design Studio で "obtain the top 10 customers grouped by country" のようなクエリを実行する場合、クエリが返す行数はわずかですが、結果を返すまでに数分かかる可能性があります。サーバーがクエリを実行している間、ユーザーがまだクエリの完了を待っているにもかかわらず、ロードバランサーがユーザーのブラウザーと Design Studio の間のコネクションは非アクティブであると見なして、コネクションを閉じる可能性があります。
Data Catalog と Design Studio は、ユーザーのブラウザーとアプリケーション (すなわち Denodo Platform の Web コンテナー) の間のこのようなコネクションを保持する機能を備えています。
この機能が有効な場合、ユーザーがデータを返すのに数分かかる可能性があるオペレーションを実行すると、アプリケーションはこのコネクション経由でデータを返さないまま数分間が経過したときに "no-op" メッセージを返してコネクションを保持します。
Data Catalog でこの機能が有効な場合にメリットを得られるオペレーションを以下に示します。
メタデータの同期。
クエリの実行。
クエリのエクスポート。
VQL Shell: クエリの実行、クエリのエクスポート、および実行トレースのダウンロード。
Design Studio でこの機能が有効な場合にメリットを得られるオペレーションを以下に示します。
ビューおよびストアドプロシージャの [Query panel] から実行されるクエリ ([Execute and download] を含む)。
VQL Shell: 任意のステートメントおよび [Execute and Download] の実行。
注釈
ping コネクションを使用する [Execute and Download] 機能は、クエリが大量の行を返す場合、実行速度が多少低下する可能性があります。
この機能の有効化¶
Data Catalog と Design Studio では、この機能はデフォルトで無効になっています。有効にするには、以下の手順に従います。
Data Catalog でこれを有効にするには、ファイル
<DENODO_HOME>/conf/data-catalog/DataCatalogBackend.properties
を編集し、以下のプロパティを追加します。
# This property
connection-ping.enabled=true
# Every time this interval passes (in milliseconds) without sending data,
# the application sends a "noop" message to keep the connection alive.
#
# In this example, the value is two minutes
connection-ping.polling-interval=120000
connection-ping.core-pool-size=20
connection-ping.max-pool-size=40
connection-ping.queue-capacity=50
Design Studio でこれを有効にするには、ファイル
<SOLUTION_MANAGER_HOME>/conf/design-studio/DesignStudioBackend.properties
を編集し、上記のプロパティを追加します。Solution Manager の Design Studio を再起動します。
Denodo Platform のインストール環境の Design Studio を使用する場合、その Design Studio でこの機能を有効にすることを考慮してください。
この機能はスレッドプールを使用します。上記のプロパティはこのプールを制御します。上記で推奨しているデフォルト値は、どのユースケースでも有効なはずです。
スレッド数が
connection-ping.core-pool-size
未満の場合、アプリケーションは新しいスレッドを作成して新しいタスクを実行します。スレッド数が
connection-ping.core-pool-size
と同じ (またはそれ以上の) 場合、アプリケーションはタスクをキューに入れます。キューがいっぱいで、スレッド数が
connection-ping.max-pool-size
未満の場合、アプリケーションは新しいスレッドを作成して、そのスレッド内でタスクを実行します。キューがいっぱいで、スレッド数が
connection-ping.max-pool-size
以上の場合、アプリケーションはタスクを拒否します。