概要
本資料は、Spotfire Serverからリポジトリデータベースへの接続、およびインフォメーションリンク機能動作時にSpotfire Serverから参照先データベース(以降、「データソース」)への接続において、DB接続に関する設定項目(ログインタイムアウト、最小接続数、最大接続数など)について情報を整理いたします。
Spotfire Serverにはコネクションプール機能が実装されており、リポジトリデータベースまたはデータソースへ接続する際にデフォルトではコネクションプールが利用されます。本資料記載の設定は主にSpotfire Serverのコネクションプール機能に適用されるものであり、一部データベース接続ドライバへ渡される設定も記載しております。
動作確認環境
本記事は以下の環境で動作確認したうえで作成しています。
- Spotfire Analyst 14.0 LTS
- Spotfire Web Player 14.0 LTS
- Spotfire Automation Services 14.0 LTS
本記事の内容はSpotfire 12.0 LTS 以降に適用できます。
リポジトリデータベースへの接続
リポジトリデータベースへの接続は、Configuration Tool(uiconfig.bat)の「Database」タブ内の設定項目によって制御されます。ここにある設定項目はリポジトリデータベースへの接続にのみ適用されます。
Configuration Tool(uiconfig.bat)はSpotfire Server端末内にスタートメニュー:「Spotfire Server 14.0.X LTS」⇒「Configure Spotfire Server 14.0.X LTS」を押して起動、または以下のバッチファイルを実行して起動します。
- C:\spotfire\spotfireserver\14.0.X\tomcat\spotfire-bin\uiconfig.bat
「Database」タブの設定例は下記の通りです。設定を変更した場合は「Save configuration」ボタンを押して「Database」へ保存してから、Spotfire Serverサービスを再起動して反映させる必要があります。
設定項目の一覧は下表の通りです(参考資料)。
| 設定項目 | 説明 | 設定値 |
|---|---|---|
| Pooling Scheme | デフォルトではリポジトリデータベースへ接続する際にコネクションプールを利用する。この項目はコネクションプールの動きを制御する。 |
コネクションプールが有効の場合にのみ動作する
|
| Login timeout (seconds) | コネクションプールからDB接続を取得する際の最大待ち時間。この時間を超えるとエラーが発生する。 |
秒数 デフォルト:10 |
| Connection timeout (seconds) | 使用済みの接続が待機状態(DBへ接続したままで再利用可能な状態)にいられる時間の最大値。この時間が過ぎると待機状態のDB接続が破棄される(リソースが解放される)。 |
秒数 デフォルト:600 |
| Minimum connections |
コネクションプール内に常に保持するDB接続の数の最小値。 DB接続を初期化する際に最初からこの数分の待機状態の接続が作成される。使用済みのDB接続は待機状態として保持される。 |
デフォルト:5 データベース側のリソース消費量を抑えるため必要最小限の数値にしてください。
|
| Maximum connections | コネクションプール内に保持できるDB接続の数(使用中の接続数+待機状態の接続数)の最大値。すなわち同時接続数の上限。 |
デフォルト:40 0に設定した場合はコネクションプールが無効となり、制限なくDB接続を確立できる ログインタイムアウトエラーを避けるため実際の同時接続数以上の数値にしてください。 |
| Initialization query | DB接続を確立する際の初期化クエリ。 |
SQL文 デフォルト:空白(未設定) |
| Connection properties |
DB接続を確立する際にデータベース接続ドライバへ渡される接続パラメータ(複数指定可能)。 これらのパラメータは接続ドライバの動きを制御する。 |
デフォルト:
|
補足:
- 「Connection properties」内の設定項目の値には以下の2つの変数を指定できます。変数の値は「Login timeout (seconds)」の設定値から算出されます。
- $m{loginTimeoutSeconds}:「Login timeout (seconds)」の設定値
- $m{loginTimeoutMilliseconds}:「Login timeout (seconds)」の設定値 × 1000
「Connection properties」部分に指定されている接続パラメータはDB接続を確立する際にデータベース接続ドライバへ渡されます。これらのパラメータは接続ドライバの動きを制御します。また、利用できる接続パラメータは接続先データベースの仕様に従います。
| 接続パラメータ | デフォルト値 | 説明 |
|---|---|---|
| MaxPooledStatements | 20 | DataDirectドライバー(すでに廃止済み)の場合のみ使用され、ほかのドライバーの場合は無視(削除してもよい) |
| LoginTimeout | $m{loginTimeoutSeconds} | MS SQL Serverの場合(大文字小文字を区別しないため)のみ動作する。ほかのドライバーの場合は「データソーステンプレート」の部分を参考に項目名を変更する必要がある |
| sendStringParametersAsUnicode | false | MS SQL Serverの場合のみ使用され、ほかのドライバーの場合は無視(削除してもよい) |
| StringInputParameterType | varchar | DataDirectドライバー(すでに廃止済み)の場合のみ使用され、ほかのドライバーの場合は無視(削除してもよい) |
リポジトリデータベースへの接続設定や接続状況はWeb管理画面「Monitoring & Diagnostics」⇒「Server diagnostics」ページより「View data sources」を押して確認できます。
接続設定や接続状況を示している各項目の詳細は下表の通りです。
| 項目 | 説明 |
|---|---|
| Current active count | 現在アクティブなDB接続(使用中)の数 |
| Current idle count | 現在待機状態のDB接続の数 |
| Max active connections |
これまでに、同時にアクティブなDB接続の数の最大値 ※Spotfire Serverサービスを再起動するとリセットされる ※Max active connectionsがMax connectionsに達した場合はMax connectionsを増やすことを検討してください。 |
| Max connections |
同時接続数の上限 Current active count + Current idle count ≦ Max connections Max active connections ≦ Max connections |
| Min connections |
常に保持するDB接続の数の最小値 Current active count + Current idle count ≧ Min connections ※リポジトリデータベースへの接続において特別な処理があり、必要最小限にDB接続を確立しているため、「Current active count + Current idle count」が「Min connections」よりも小さい場合があります。 |
| Total error count | エラーの件数 |
| Total timeout count |
タイムアウトエラーの件数 Max connectionsを超えて接続しようとすると本エラーが発生 |
リポジトリデータベースへの接続情報はログ(DEBUG)から確認できます。
- C:\spotfire\spotfireserver\14.0.X\tomcat\logs\server.log
DEBUG 2025-06-10T16:21:57,857+0900 [*Initialization*] util.sql.PoolingDataSource: Initializing data source server.default[driverClass=org.postgresql.Driver, url='jdbc:postgresql://<DBサーバー>:<ポート番号>/<リポジトリDB名>', username='<DBユーザー>', password=[NOT SHOWN], kerberosLoginContextName=null, refreshTGT=false, initialized=false, destroyed=false, active=false, minConnections=5, maxConnections=40, connectionTimeout=600, poolingScheme=WAIT, loginTimeout=10, autoCommit=true, readOnly=false, mBeanEnabled=true, connectionCreationOnSeparateThread=false, properties={LoginTimeout=$m{loginTimeoutSeconds}, StringInputParameterType=varchar, MaxPooledStatements=20, sendStringParametersAsUnicode=false}]上記のログから以下の情報を確認できます。
- 「Initializing data source server.default」は、リポジトリデータベースへの接続を示しています。
- DB接続設定
- minConnections=5, maxConnections=40, connectionTimeout=600, poolingScheme=WAIT, loginTimeout=10
- DBへ渡される接続パラメータ
- properties={LoginTimeout=$m{loginTimeoutSeconds}, StringInputParameterType=varchar, MaxPooledStatements=20, sendStringParametersAsUnicode=false}
「Database」タブにあるリポジトリデータベースへの接続設定は以下のコマンドを利用して設定、変更することも可能です。設定手順について「Spotfire Server設定変更手順」の「コマンドライン使用」部分をご参照ください。
-
set-db-config
- 引数で指定されている設定で既存設定をすべて上書きします。未指定の設定項目はデフォルト値に戻られます(「connection-properties」部分は空白になる)。
-
modify-db-config
- 引数で指定されている設定のみを変更します。未指定の設定項目は既存のままとなります。
インフォメーションリンクによるDB接続
インフォメーションリンク動作時に、参照先データベースへの接続設定はデータソーステンプレート、またはインフォメーションが参照しているデータソースに対して設定します。
設定項目の一覧は下表の通りです。
| 設定項目 | 設定箇所 | デフォルト値 |
|---|---|---|
| Pooling Scheme |
|
WAIT |
| Login timeout (seconds) |
|
10秒 |
| Connection timeout (seconds) |
|
600秒 |
| Minimum connections |
|
1 |
| Maximum connections |
|
1 |
| Initialization query |
|
なし |
| Connection properties |
|
データソーステンプレートによって異なる |
デフォルト設定
デフォルト設定は既定値としてすべてのデータソースに適用されますが、「Login timeout (seconds)」のみが指定できます。また、デフォルト設定の優先度が最も低いため、該当項目は下記のデータソーステンプレート内にも設定されている場合はその設定が優先されます。
「Login timeout (seconds)」は「Spotfire Server設定変更手順」(「Spotfire Server設定変更手順(コマンドライン使用)」部分)に従って変更できます。
変更手順のステップ2.でエクスポートされた設定ファイル(configuration.xml)内に、該当設定項目が表示されます。
上記の設定ファイルを直接編集して新しい値を指定するか、ステップ3.で以下のコマンドを実行して設定値を変更してください。
config.bat set-config-prop -n information-services.jdbc.connection-login-timeout -v <新しい値>
さらに、上記の設定値はデータソーステンプレート内に指定できる「$m{loginTimeoutSeconds}」や「$m{loginTimeoutMilliseconds}」の値として使用されます。
- $m{loginTimeoutSeconds}:上記の設定値
- $m{loginTimeoutMilliseconds}:上記の設定値 × 1000
データソーステンプレート
各種データソーステンプレートに対して下記の設定項目を変更できます(参考資料)。指定されている設定値は該当テンプレートを参照しているすべてのデータソースに適用されます。
また、これらの設定項目は「<connection-properties>」内で定義されていますが、実際にはSpotfire Serverのコネクションプール機能が利用するものであり、データベース接続ドライバへは渡されません。「<connection-properties>」内で定義されているほかの設定項目、例えば「loginTimeout」など下記以外のものは接続ドライバへ渡されます。
| 設定項目 | 設定名 |
|---|---|
| Pooling Scheme | spotfire.pooling.data.source.scheme |
| Login timeout (seconds) |
spotfire.pooling.data.source.login.timeout ※「デフォルト設定」の「Login timeout (seconds)」よりも優先されます。 |
| Connection timeout (seconds) | spotfire.pooling.data.source.connection.timeout |
例:
設定を変更した場合は「Save configuration」ボタンを押して「Database」へ保存してから、Spotfire Serverサービスを再起動して反映させる必要があります。また、データソーステンプレートへの変更は既存のデータソースには反映されません。データソーステンプレートの変更やSpotfire Serverサービスの再起動を実施した後に、既存のデータソースを個別に上書き保存することでその変更がデータソースに反映されます。
「<connection-properties>」内に接続パラメータ「loginTimeout」などを設定することも可能ですが、これらの設定はデータベース接続ドライバへ渡されます。一部のデータソーステンプレートには「loginTimeout」がデフォルトで指定されている場合もあります。また、「loginTimeout」やその他の設定項目の名前がデータベース接続ドライバによって異なりますので、接続ドライバの仕様に従ってください。
例:
コード例:
<connection-properties>
<connection-property>
<key>loginTimeout</key>
<value>$m{loginTimeoutSeconds}</value>
</connection-property>
<connection-property>
<key>spotfire.pooling.data.source.scheme</key>
<value>DYNAMIC</value>
</connection-property>
<connection-property>
<key>spotfire.pooling.data.source.login.timeout</key>
<value>15</value>
</connection-property>
<connection-property>
<key>spotfire.pooling.data.source.connection.timeout</key>
<value>630</value>
</connection-property>
</connection-properties>
一部データベース接続ドライバに使用されている「loginTimeout」設定項目の名前は下表の通りです。また、ドライバによって項目名は大文字小文字を区別する場合があります。
| データベース | 接続ドライバ | 設定項目名 | 設定値 |
|---|---|---|---|
| PostgreSQL | org.postgresql.Driver | loginTimeout | 秒 |
| MS SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver | loginTimeout | 秒 |
| Oracle | oracle.jdbc.OracleDriver | oracle.jdbc.loginTimeout | 秒 |
| MySQL | com.mysql.cj.jdbc.Driver | connectTimeout | ミリ秒 |
| Redshift | com.amazon.redshift.jdbc.Driver | loginTimeout | 秒 |
データソース
Analystの「インフォメーションデザイナー」画面にてデータソースを作成・編集する際に以下の設定項目を指定できます。設定を変更した場合は即座に反映されます。また、下記の設定以外に上記のデフォルト設定や参照先データソーステンプレート内の設定も該当データソースに適用されます。
| 設定項目 | 設定名 |
|---|---|
| Minimum connections | 接続数:最小 |
| Maximum connections | 接続数:最大 |
| Initialization query | 接続の初期化 |
例:
「loginTimeout」設定項目はデータソーステンプレートの「<connection-properties>」配下の以外に、「接続URL」の後ろにも指定できます。データベース接続ドライバの仕様によって異なることがありますが、通常、ここで指定されているものはデータソーステンプレート内の設定値よりも優先されます。
また、ここで指定されている値は、Spotfire Serverのコネクションプール機能の「Login timeout (seconds)」には反映されません。
例:
jdbc:postgresql://winx:5432/dms?loginTimeout=15
インフォメーションリンク動作時にデータベースへの接続情報はログ(DEBUG)から確認できます。
- C:\spotfire\spotfireserver\14.0.X\tomcat\logs\informationservices\server.log
DEBUG 2025-06-12T17:05:42,317+0900 [admin, #null, #14] util.sql.PoolingDataSource: Initializing data source pg1 (99840368-df9e-435a-9443-00bc8c312821)[driverClass=org.postgresql.Driver, url='jdbc:postgresql://winx/dms', username='postgres', password=[NOT SHOWN], kerberosLoginContextName=null, refreshTGT=false, initialized=false, destroyed=false, active=false, minConnections=1, maxConnections=4, connectionTimeout=600, poolingScheme=WAIT, loginTimeout=10, autoCommit=false, readOnly=false, mBeanEnabled=true, connectionCreationOnSeparateThread=false, properties={loginTimeout=$m{loginTimeoutSeconds}}]上記のログから以下の情報を確認できます。
- 「Initializing data source <データソース名>」は、インフォメーションリンク動作時のデータベース接続であることを示しています。
- DB接続設定
- minConnections=1, maxConnections=4, connectionTimeout=600, poolingScheme=WAIT, loginTimeout=10
- DBへ渡される接続パラメータ
- properties={loginTimeout=$m{loginTimeoutSeconds}}]
補足情報として、「Login timeout (seconds)」(コネクションプール内に空いているDB接続がなかった場合、つまり「Maximum connections」を超えてDBへ接続しようとする際)によるエラーが発生した場合は以下のようなログが出力されます。
エラー発生後には5回ほどリトライしますが、いずれも失敗した場合はエラーで中止します。
DEBUG 2025-06-11T18:16:56,988+0900 [admin, #null, #301] util.sql.PoolingDataSource: Timeout while waiting for database connection. Data source: pg1 (99840368-df9e-435a-9443-00bc8c312821), min connections: 1, max connections: 1
DEBUG 2025-06-11T18:16:56,995+0900 [admin, #null, #301] api.common.InformationModelServiceCommon: Data source connection timed out.
com.spotfire.ws.api.common.InformationModelWebServiceException: Data source busy.
・・・
Caused by: java.sql.SQLException: Timeout while waiting for database connection after 10 seconds
参考資料
- Database connectivity
- Information Services settings
- Advanced connection pool configuration
- "Timeout while waiting for database connection after 10 seconds." in TIBCO Spotfire