この記事は、UserGroupメソッドを使用して大量のユーザーに対してLDAPインポートを実行する際に表面化する可能性のあるパフォーマンスの問題に関してです。 具体的には、輸入手続きに予想以上の時間がかかる可能性があるという問題です。
この問題の原因は、SQLクエリ("SELECT userId FROM Users_UserGroups WHERE userGroupId = ?" )にあります。
)は、インポートされる各ユーザーに対して実行されます。 このクエリの実行は、データベースに大量のユーザーが存在する場合、大きな結果セットを作成する可能性があります。 Oracle JDBC接続 defaultRowPrefetch
のサイズが10行でしかないため、 defaultRowPrefetch
のサイズがクエリ結果のフェッチという点でボトルネックとなる。
解決策
LDAP一括インポートのパフォーマンスを向上させるために、2つのオプションの使用を検討することが可能です。
オプション1
Oracle JDBC接続プールのサイズを調整し、defaultRowPrefetchの値を10からより適切な数値に設定します。
注:データベース関連のチューニングは、Liferay Supportではサポートしていません。 詳しくは、オラクルリソースをご参照ください。
オプション2
LPS-49427 最適化されたクエリ文によるCacheless Table Mapperの導入により、この問題に対処することが提起されました。 LPS-49427の修正を使用することに加えて、どのテーブルがこのオプションを採用するかを設定するために、portal-ext.propertytable.mapper.cacheless.mapping.table.name={テーブル名}
ファイルにpropertytable.mapper.cacheless.mapping.table.name={テーブル名}
を追加する必要があります。
例: table.mapper.cacheless.mapping.table.names=user_,users_user_group
注:このオプションでは、JDBC接続プールを変更する必要はありません。 プロパティのテーブル名は、大文字と小文字を区別します。