接続プールの操作
このトピックでは、データベースの接続プールを作成および変更する方法について説明します。
接続プールとは
セマンティック・モデルの物理レイヤーには、データベースごとに1つ以上の接続プールが格納されています。これらの接続プールは、Oracle Analytics問合せエンジンとセマンティック・モデルのデータベース・データ・ソースの間のコマンドの実行を強化するように構成されています。
接続プールは、物理レイヤーのデータベース・オブジェクトに表をインポートしたときに自動的に作成されます。データベースごとに複数の接続プールを追加および構成できます。接続プールを使用すると、複数の同時データ・ソース・リクエスト(問合せ)で単一のデータベース接続の共有が可能になり、データベースへの接続のオーバーヘッドを軽減できます。初期化ブロックには専用接続プールを作成することをお薦めします。「初期化ブロックの接続プールについて」を参照してください。
接続プールのそれぞれに、許容される最大同時接続数を指定する必要があります。この制限値に達すると、接続リクエストは、接続に空きができるまで待機します。
許容される同時接続数が増えると、接続プールからのアクセス先になる基礎データベースの負荷が増加する可能性があります。テストを実行しデータベース管理者に問い合せて、接続プールで指定した接続数をデータ・ソースで処理できることを確認してください。また、データ・ソースに接続数に基づくチャージバック・システムがある場合、同時接続数を制限してチャージバック・コストを低く保持することが必要な場合もあります。
データベース・リソースに関連して見込まれる負荷およびコストに加えて、Oracle Analytics問合せエンジンではサーバーの起動時に接続のそれぞれに共有メモリーが割り当てられます。これによって接続数が上昇し、Oracle Analytics問合せエンジンのメモリー使用量が増加します。
初期化ブロックの接続プールについて
初期化ブロックに専用の接続プールを作成する必要があります。データ問合せの初期化ブロック用に作成した接続プールは使用しないでください。
初期化ブロックのタイプごとに接続プールを分離することをお薦めします。接続プールを分離することで、認証およびログイン固有の初期化ブロックによってログイン・プロセスの速度が低下しないことが確実になります。次のタイプの初期化ブロックには、独立した接続プールを設定する必要があります。
-
セッション変数を設定するすべての初期化ブロック。
-
セマンティック・モデル変数を設定するすべての初期化ブロック。変数を設定する初期化ブロックは、管理者権限を持つ資格証明を使用して実行します。
これらの初期化ブロックの数、スケジュールされたリフレッシュ率、およびその実行のスケジュール時点は把握しておく必要があります。このシナリオでリソースに対する影響の極端な状況を考えてみましょう。たとえば、リフレッシュ率を分単位で設定し、同時にリフレッシュされる初期化ブロックが15を超えており、これらのシナリオのいずれかが最もユーザー・アクセスが多い時間フレームに発生するとします。
初期化ブロックでできるだけ多くの変数を設定すると、効率が向上し、リソース負荷が少なくなります。たとえば、5つの変数を含む初期化ブロックが1つあるとします。この場合、初期化文字列はバックエンド表を1回コールします。それぞれ1つの変数を含む初期化ブロックを5つ作成すると、バックエンド表が5回コールされます。
初期化ブロックが特定の接続プールに対して失敗した場合、その接続プールを使用する初期化ブロックはそれ以上処理されません。かわりに、接続プールは拒否され、その接続プールの後続の初期化ブロックはスキップされます。この動作により、Oracle Analyticsは、接続プールに多数の関連付けられた初期化ブロックまたは変数がある場合でも引き続き動作します。
この問題が発生した場合、サーバー・ログに次のようなメッセージが表示されます:
[OracleBIServerComponent] [ERROR:1] [43143] Blacklisted connection pool name_of_connection_pool
このエラーが表示された場合は、特定の接続プールの初期化ブロックを確認し、それらのブロックが正しいことを確認します。
接続プールの一般プロパティ
このトピックでは、接続プールのタブの「一般」ペインにある接続プールのプロパティについて説明します。これらのプロパティは、ほとんどの接続タイプで共通です。
このトピックの情報を使用すると、接続プールの作成または変更に役立ちます。「接続プールの一般プロパティの設定」を参照してください。
プロパティ | 説明 |
---|---|
永続化された接続プール |
すべてのデータ・ソースに対して表示されます。 ストアド・プロシージャの移入または汎用化された副問合せの実行に使用する接続プールを指定します。「永続接続プールの設定」を参照してください。 |
接続 |
すべてのデータ・ソースに対して表示されます。 セマンティック・モデルで使用可能な接続を表示します。このリストに接続を表示するには、接続の「システム接続」プロパティを選択する必要があります。「データ・ソースへの接続の管理」を参照してください。 Oracle Analyticsでは、接続プールの接続が常に自動的に割り当てられるわけではないため、手動での割当てが必要になる場合があります。物理表のデータは、データベースの接続プール接続が割り当てられるまでプレビューできません。 |
リモート接続 |
リレーショナル・データ・ソースおよびEssbaseデータ・ソースに対して表示されます。 データベース接続でリモート・データ接続を使用するかどうかを識別します。 データベースでリモート・データ接続を使用する場合、このフィールドは自動的には選択されません。このフィールドは手動で設定する必要があります。 データベースでリモート・データ接続が使用され、このフィールドが選択されていない場合は、整合性チェックの実行時にエラーが表示されます。 |
最大接続数 |
すべてのデータ・ソースに対して表示されます。 この接続プールで許容される接続の最大数を指定します。デフォルトは10です。この値は、データベースの種類とモデル、データベースを実行するコンピュータのハードウェア構成、およびアクセスを要求する同時使用ユーザー数から決定できます。 「Oracle BIインタラクティブ・ダッシュボード」ページを使用するデプロイメントでは、この値を同時ユーザー数にダッシュボード上のリクエスト数を乗じた数の10-20%と見積もることを検討してください。この数値は、使用率に応じて調整できます。セマンティック・モデルのすべての接続の合計数は800未満に定義します。初期化ブロック専用の接続プールに必要な最大接続数を見積もるには、初期化ブロック処理時に同時ログオンするユーザー数を使用することをお薦めします。 |
タイムアウト |
すべてのデータ・ソースに対して表示されます。 リクエストの完了後に、接続を開いたままにする時間の量および増分を指定します。この時間内は、最大接続数で指定した数を上限として、新たなリクエストで新たな接続が開かれるのではなく、この接続が使用されます。この時間は接続リクエストの完了ごとにリセットされます。 |
分離レベル |
リレーショナル・データ・ソースに対して表示されます。 バックエンド・データベースに対する各接続のトランザクション分離レベルを設定する値を指定します。ODBCゲートウェイ専用。接続から発行されるすべての文に対するデフォルトのトランザクション・ロック動作を制御します。一度に1つのみ設定できます。この設定は、明示的に変更されるまで、その接続について維持されます。 オプションは: ダーティ読取り - 内容を保証しない読取りを実装します(分離レベル0のロック)。これは、最も制限の少ない分離レベルです。このオプションを設定すると、未コミットのデータや内容を保証しないデータを読み取り、データの値を変更して、トランザクションの終了前にデータ・セットで行を表示したり非表示にできます。 内容を保証しないデータとは、問合せを実行して正しい結果を取得する前にクリーンアップすべきデータです。たとえば、重複レコード、命名規則に一貫性のないレコード、またはデータ型に互換性のないレコードです。 コミットされた読取り - 内容を保証しない読取りを回避するために、データの読取り中に共有ロックを保持することを指定します。トランザクションの終了前にデータを変更できるため、反復不可能な読取りや仮データが発生します。 反復可能読取り - 問合せに使用されるすべてのデータをロックして、他のユーザーがデータを更新しないようにします。別のユーザーが設定したデータに新規の仮行を挿入できます。その行は現行トランザクションの後続の読取りに含まれます。 シリアライズ可能 - データ・セットの範囲をロックし、トランザクションが完了するまでデータ・セットに対して他のユーザーが行を更新または挿入しないようにします。これは4種の分離レベルのうち、最も制限が厳しいレベルです。同時実行性が低下するため、このオプションは必要な場合のみ使用してください。 |
完全修飾表名が必要 |
リレーショナル・データ・ソースに対して表示されます。 選択した場合、接続プールから送信されるすべてのリクエストで、基礎となるデータベースへの問合せに完全修飾名を使用することが指定されます。このオプションは、データベースまたはデータベース構成で完全修飾表名が要求される場合に選択します。一部の接続タイプではこのオプションは使用できません。 完全修飾名は、セマンティック・モデルの物理オブジェクト名に基づきます。物理レイヤー・メタデータのインポート元の表と同じ表を問い合せる場合は、このオプションを安全に選択できます。ある物理データベースから、データベース名とスキーマ名が異なる別の物理データベースにセマンティック・モデルを移行した場合は、移行後の新しいデータベースで完全修飾名が無効になります。このような状況では、このオプションの選択を解除しておくと、新しいデータベース・オブジェクトに対する問合せを正常に実行できます。 一部の接続では、必要なデータベース内の必要な表に問合せが送られることが保証されるため、完全修飾名によって安全性が向上します。たとえば、RDBMSで元のデータベースの概念がサポートされる場合、Customerという名前の表に対する問合せは、最初に元のデータベース内で、次に指定されたデータベース内でその表を検索します。元のデータベースにCustomerという名の表が存在する場合はその表で問合せが実行され、指定されたデータベースのCustomerという名前の表では実行されません。 Oracle Databaseを使用し、表を格納するスキーマの所有者でないユーザーを使用してデータベースにアクセスしている場合は、このオプションの選択が必要になる場合があります。問合せ内で表名が完全修飾されていないと、Oracle DatabaseがSQLで表名を解釈する際に問合せの実行者が所有者であると想定されます。これによって不適切な修飾名が発生する場合があります。 たとえば、ユーザーSAMPLEがCUSTOMERという名の表を作成した場合、完全修飾表名はSAMPLE.CUSTOMERになります。ユーザーSAMPLEが問合せで表CUSTOMERを参照すると、Oracle Databaseでは、完全修飾表名がSAMPLE.CUSTOMERであると見なされ、このアクセスは正常に実行されます。しかし、ユーザーJANEDOEが問合せで表CUSTOMERを参照した場合は、Oracle Databaseによって完全修飾表名がJANEDOE.CUSTOMERであると見なされ「表またはビューが見つかりません」というエラーが発生する可能性があります。JANEDOEからのアクセスを有効にするには、接続プールで「完全修飾表名が必要」を選択して、Oracle Analytics問合せエンジンがすべての問合せでSAMPLE.CUSTOMERを指定できるようにする必要があります。 |
マルチスレッド接続の使用 |
すべてのデータ・ソースに対して表示されます。 選択した場合、Oracle Analytics問合せエンジンがアイドル状態の物理問合せ(スレッド)を終了することが指定されます。選択を解除すると、1つのスレッドが1つのデータベース接続に結合されます(スレッド数=最大接続数)。スレッドは、アイドルであってもメモリーを消費します。 |
サポートされているパラメータ |
すべてのデータ・ソースに対して表示されます。 選択した場合、データベース機能表でパラメータがサポートされ、特別なコードが実行されることを示します。これにより、Oracle Analytics問合せエンジンで、パラメータを使用したフィルタ(または計算)をデータベースにプッシュできるようになります。Oracle Analytics問合せエンジンは、追加のSQLPrepareコールをデータベースに送信することによってゲートウェイ/アダプタ・レイヤー内のパラメータ・サポートをシミュレートして、これを実行します。 |
接続プーリングの有効化 |
リレーショナル・データ・ソースに対して表示されます。 単一のデータベース接続を指定した時間開いたままにしておき、後続の問合せリクエストで使用できるようにします。接続プールでは、問合せごとに新規の接続を開始/終了するオーバーヘッドを省くことができます。このオプションを選択しない場合は、データベースに送信される問合せごとに新しい接続が開かれます。 |
接続プールの一般プロパティの設定
一般プロパティには、「最大接続数」、「タイムアウト」、「分離レベル」などがあります。
一般プロパティの説明および設定方法については、「接続プールの一般プロパティ」を参照してください。
「一般」タブにリストされるプロパティは、データ・ソース・タイプによって異なります。
- ホーム・ページで、「ナビゲータ」、「セマンティック・モデル」の順にクリックします。
- 「セマンティック・モデル」ページで、セマンティック・モデルをクリックして開きます。
- 「物理レイヤー」
をクリックし、データベースを見つけてダブルクリックします。
- データベースのタブで、「接続プール」をクリックします。
- 接続プール・リスト表で接続プールをクリックして選択し、「詳細ビュー」をクリックして「プロパティ」ペインを開きます。
- 「プロパティ」ペインの「一般」セクションに移動し、接続プールのプロパティを変更します。
- 「保存」をクリックします。
接続プールの接続プロパティの設定
物理表のデータをプレビューするには、接続プールの接続を正しく割り当てる必要があります。
- ホーム・ページで、「ナビゲータ」、「セマンティック・モデル」の順にクリックします。
- 「セマンティック・モデル」ページで、セマンティック・モデルをクリックして開きます。
- 「物理レイヤー」
をクリックし、データベースを見つけてダブルクリックします。
- データベースで、「接続プール」をクリックし、「詳細ビュー」をクリックします。
- 接続プールのリストに移動し、接続プールをクリックしてその詳細を表示します。
- 接続プールの詳細で、「接続」フィールドにスクロールし、それをクリックして接続を選択します。
- 「保存」をクリックします。
接続プールでのライトバックの設定
接続プールのライトバック要件には、一時表および一括挿入プロパティが含まれます。
「一括挿入バッファ・サイズの設定とトランザクション境界設定について」を参照してください。
この表は、「接続プール」ダイアログの「ライトバック」タブのプロパティを説明しています。
プロパティ | 説明 |
---|---|
データベースはunicodeをサポートしています |
列がUnicodeデータベースの明示的なUnicodeデータ型( このオプションを設定する状況の判定には、次のガイドラインを使用します:
単一の非UnicodeデータベースにUnicodeと非Unicodeのデータ型を共存させることはできません。たとえば、単一の非Unicodeデータベース環境で |
一時表 - 接頭辞 |
Oracle Analytics問合せエンジンによって作成される一時表名の最初の2文字を入力します。 |
一時表 - 所有者 |
SQL文で一時表名の修飾に使用する表の所有者名を入力します。たとえば、 |
一括挿入 - バッファ・サイズ(KB) |
データベース表に挿入される最大バイト数を入力します。最適なパフォーマンスを得るには、このパラメータを10240に設定します。 |
一括挿入 - トランザクション境界 |
データベース表への挿入1回当たりのバッチ・サイズを入力します。最適なパフォーマンスを得るには、このパラメータを1000に設定します。 |
データベースのライトバック・プロパティを指定するには、次のステップを使用します。
- ホーム・ページで、「ナビゲータ」、「セマンティック・モデル」の順にクリックします。
- 「セマンティック・モデル」ページで、セマンティック・モデルをクリックして開きます。
- 「物理レイヤー」
をクリックし、データベースを見つけてダブルクリックします。
- データベースのタブで、「接続プール」をクリックします。
- 接続プール・リスト表で接続プールをクリックして選択し、「詳細ビュー」をクリックして「プロパティ」ペインを開きます。
- スクロールして「ライトバック」に戻り、ライトバック・プロパティを指定します。
- 「保存」をクリックします。
接続プールへの接続スクリプトの追加
1つ以上の接続スクリプトを追加して、接続の確立前、問合せの実行前、問合せの実行後、または接続の切断後に実行するように設定できます。
たとえば、接続時にユーザー名と接続時間を表に挿入する接続スクリプトを作成することなどができます。
接続スクリプトには、たとえば引用識別子をオンにするコマンドなど、データベースで受け入れられる任意のコマンドを組み込むことができます。これによって、メインフレーム環境のセキュリティの一元的な管理が可能になります。
接続スクリプトはデータ・ソースに直接送信されるため、ネイティブSQLでスクリプトを記述する必要があります。データ・ソースで認識されないため、Oracle Analytics論理SQLでスクリプトを記述しないでください。
永続接続プールの設定
サポートされていない問合せ関数があるトランザクション・データベースに対して、論理問合せをすべて送信できないことがあります。この問題を解決するには、ライトバック表を作成し、永続接続プールを設定して、新しいライトバック表を参照するようにOracle Analytics問合せエンジンに指示します。
永続接続プールは次の状況で設定します:
-
ストアド・プロシージャの移入 - 論理SQLの結果セットを管理対象表にリライトします。
-
汎用化されたサブ問合せの実行 - 機能しないサブ問合せを一時表に格納してから、この表に対して元のサブ問合せの結果をリライトします。Oracle Analytics問合せエンジンとデータベース間のデータの移動が削減され、無制限のINリスト値がサポートされます。パフォーマンスが向上することもあります。
これらの状況では、論理SQL問合せを発行するユーザーにターゲット・データベースに対する移入権限が付与されている必要があります。
永続接続プール機能では、ライトバック機能を持つ接続プールを指定して、このタイプの問合せを処理します。単一データベース内の1つの接続プールを永続接続プールとして割り当てます。この機能を有効にする場合は、接続プールで指定されたユーザー名に、データベースでDDL(データ定義言語)およびDML(データ操作言語)を作成する権限が付与されている必要があります。
「接続プールでのライトバックの設定」を参照してください。
- ホーム・ページで、「ナビゲータ」、「セマンティック・モデル」の順にクリックします。
- 「セマンティック・モデル」ページで、セマンティック・モデルをクリックして開きます。
- 「物理レイヤー」
をクリックし、データベースを見つけてダブルクリックします。
- データベースのタブで、「接続プール」をクリックします。
- 接続プール・リスト表で接続プールをクリックして選択し、「詳細ビュー」をクリックして「プロパティ」ペインを開きます。
- 「永続化接続プール」をクリックし、接続プールを選択します。
- 接続プールのプロパティ・ペインで、「ライトバック」までスクロールしてライトバック表を設定します。
- 「保存」をクリックします。
一括挿入バッファ・サイズの設定とトランザクション境界設定について
ライトバックでは、結果セットの各行のサイズが1KBで、バッファ・サイズが20KBの場合、最大配列サイズは20KBです。
120行存在する場合は、それぞれバッチ・サイズが20行に制限された6つのバッチが存在します。
「トランザクション境界」を3に設定した場合、サーバーは2回コミットします。1度目は行60の後(3 * 20)にサーバーがコミットします。2度目は行120の後にサーバーがコミットします。サーバーのコミット時に障害が発生した場合は、現在トランザクションのみがロールバックされます。たとえば、2回のコミットがあり、最初のコミットは正常に実行され、2回目のコミットが失敗した場合、サーバーでは2回目のコミットのみがロールバックされます。
最適なパフォーマンスを得るには、バッファ・サイズを128に、トランザクション境界を1000に設定することを検討してください。
接続プールの権限の設定
接続プールの権限では、どのアプリケーション・ロールが接続プールを使用するための読取り/書込み権限を持つか、読取り専用権限を持つか、およびアクセス権限を持たないかを指定します。たとえば、DVコンテンツ作成者アプリケーション・ロールのユーザーが独自の接続プールを持つように設定できます。
デフォルトでは、すべてのロールが接続プールへの読取り専用アクセス権を持ちます。アプリケーション・ロールを追加し、権限を割り当てて、接続プールを使用できるユーザーを制限します。
データ・アクセス・セキュリティの決定に接続プール権限は使用しないでください。たとえば、接続プール権限では、キャッシュ・エントリの保護は行われません。
- ホーム・ページで、「ナビゲータ」、「セマンティック・モデル」の順にクリックします。
- 「セマンティック・モデル」ページで、セマンティック・モデルをクリックして開きます。
- 「物理レイヤー」
をクリックし、データベースを見つけてダブルクリックします。
- データベースのタブで、「接続プール」をクリックします。
- 接続プール・リスト表で接続プールをクリックして選択し、「詳細ビュー」をクリックして「プロパティ」ペインを開きます。
- 「権限」にスクロールします。
- 検索フィールドをクリックしてロール名を入力するか、* (アスタリスク)を入力してロールの完全なリストを表示します。結果リストから、権限表に追加するロールをクリックします。
- ロールの権限を指定します。
- 「保存」をクリックします。