問題
- サーバーログに
CannotAcquireLockException
が何度か表示される:
ERROR [http--10.1.1.133-8080-281][JSONWebServiceServiceAction:97]
org.springframework.dao.CannotAcquireLockException: PreparedStatementCallback;
SQL [INSERT INTO Users_UserGroups (userGroupId, userId) VALUES (?, ?)];
Unknown error 1205; nested exception is java.sql.SQLException: Unknown error 1205
Environment
- ポータル6.2
解決策
-
このエラーがログに表示される場合は、
INSERT
クエリを実行するために、データベースがUsers_UserGroups
テーブルのロックを取得できないことを示します。
MySQL がデータベースとして使用され、Users_UserGroups テーブルで多くのSELECT
クエリが実行されている場合、データベースはSELECT
クエリを優先して実行してからINSERT
クエリを実行することができる。
このタイムアウトが MySQL のinnodb_lock_wait_timeout
プロパティで指定された時間を超えた場合、CannotAcquireLockException エラーが発生します。 portal-ext.properties
のtable.mapper.cache.mapping.table.names
プロパティに該当するテーブルを追加することにより、データベース上で実行されるSELECT
クエリの数を減らすことができます。この場合、このテーブルに対するクエリはポータルによってキャッシュされます:table.mapper.cache.mapping.table.names=Users_UserGroups
新しい値が適用されるには、ポータルを再起動する必要があります。
追加情報
- 6.2 Fix pack Portal 108で、このプロパティは
table.mapper.cacheless.mapping.table.names
に変更され、デフォルトでは逆の動作、つまりすべてのテーブルがキャッシュされ、このプロパティで指定したテーブルのみがデータベースに対して実行されるようになりました。
会員限定記事
Liferay エンタープライズ サブスクリプションをお持ちのお客様は1500件を超えるベストプラクティス、トラブルシューティング、その他のソリューション記事を閲覧できます。ログインすると、記事全体をお読みいただけます。
ログイン