サーバーログにCannotAcquireLockExceptionが表示される

問題

  • サーバーログに 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.propertiestable.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に変更され、デフォルトでは逆の動作、つまりすべてのテーブルがキャッシュされ、このプロパティで指定したテーブルのみがデータベースに対して実行されるようになりました。
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています