legacy-knowledge-base
公開されました Sep. 10, 2025

DLFileRankでデッドロックやSQL Updateのバッチエラーが発生する。

written-by

Liferay Support

How To articles are not official guidelines or officially supported documentation. They are community-contributed content and may not always reflect the latest updates to Liferay DXP. We welcome your feedback to improve How To articles!

While we make every effort to ensure this Knowledge Base is accurate, it may not always reflect the most recent updates or official guidelines.We appreciate your understanding and encourage you to reach out with any feedback or concerns.

legacy-article

learn-legacy-article-disclaimer-text

DLFileRankを有効にした場合、DLFileRankの更新によりDeadlockやSQL Update Batch Errorが発生することがある。

DLFileRankを使用する場合、データベースへの書き込みが多いため、ユニークな制約が見つかることがあります。 多くの場合、一括更新の問題を引き起こしている制約を調べてみることが有効です。 これらのエラーは、コンテンツが閲覧されるたびに、データベースを更新して、あるサイトに対して最近ダウンロードされたドキュメントを書き込むために発生します。 DLFileRankでは、いくつかの小さな読み込み、一括読み込み、そしてエントリーを1つずつ急速に削除しようとする書き込みがあります。 そのため、クラスタリングが加わると、この問題は確実に大きくなります。

以下は、デッドロックが発生していた時のスタックトレーススニペットの例です:

2019-06-10 15:32:54.498 ERROR [ajp-nio-8009-exec-678][JDBCExceptionReporter:234] 
Transaction (Process ID 487) was deadlocked on lock | thread resources with another
process and has been chosen as the deadlock victim. Rerun the transaction.

2019-06-10 15:32:54.498 ERROR
[ajp-nio-8009-exec-678][TransactionCommitCallbackUtil:46] Unable to execute transaction
commit callback

com.liferay.portal.kernel.exception.SystemException:
com.liferay.portal.kernel.dao.orm.ORMException:
org.hibernate.exception.LockAcquisitionException: could not execute query

at
com.liferay.portal.kernel.service.persistence.impl.BasePersistenceImpl.processException(BasePersistenceImpl.java:269)

at
com.liferay.document.library.file.rank.service.persistence.impl.DLFileRankPersistenceImpl.fetchByC_U_F(DLFileRankPersistenceImpl.java:2280)

at
com.liferay.document.library.file.rank.service.persistence.impl.DLFileRankPersistenceImpl.fetchByC_U_F(DLFileRankPersistenceImpl.java:2190)

at
com.liferay.document.library.file.rank.service.impl.DLFileRankLocalServiceImpl.updateFileRank(DLFileRankLocalServiceImpl.java:200)

at sun.reflect.GeneratedMethodAccessor880.invoke(Unknown Source)
...
at
com.liferay.document.library.internal.service.DLFileRankDLAppHelperLocalServiceWrapper.lambda$getFileAsStream$0(DLFileRankDLAppHelperLocalServiceWrapper.java:74)

...
Caused by: com.liferay.portal.kernel.dao.orm.ORMException:
org.hibernate.exception.LockAcquisitionException: could not execute query

...
at
com.liferay.document.library.file.rank.service.persistence.impl.DLFileRankPersistenceImpl.f
etchByC_U_F(DLFileRankPersistenceImpl.java:2252)

... 106 more
Caused by: org.hibernate.exception.LockAcquisitionException: could not execute query
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:107)
…..
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Transaction (Process ID 487)
was deadlocked on lock | thread resources with another process and has been chosen as
the deadlock victim. Rerun the transaction.

...

解像度

この場合、提案としては、DLFileRankがプロジェクトに必要ない場合は、OFFにすることでデータベースのパフォーマンスを向上させることができます。

バージョン 6.0.x, 6.1.x, 6.2.x, DXP 7.0 では、DLFileRank はこのプロパティでオフにすることができます: dl.file.rank.enabled=false

DXP 7.1.xでは、DLFileRankのサービスやモデルが独立したモジュールでOSGiサービスに抽出されました(LPS-74888)。 ファイルランクを無効にするためには、モジュール document-library-file-rank-service を無効化する必要があります:

DLFileRank を一時的に無効にする場合 (osgi/state を削除してサーバーを再起動すると、モジュールは再び起動します).

  1. Gogoshell(コントロールパネル -> 設定 -> Gogoshell)へアクセスします。
  2. ss| grep "com.liferay.document.library.file.rank.service" を実行すると、以下のような出力になるはずです:
    g! ss| grep "com.liferay.document.library.file.rank.service"
    304    ACTIVE        com.liferay.document.library.file.rank.service_1.0.12
  3. 実行する 停止する 304.
  4. ss| grep "com.liferay.document.library.file.rank.service" を実行すると、以下のような出力になるはずです:(ステータスは解決済み)
    g! ss| grep "com.liferay.document.library.file.rank.service"
    304    RESOLVED      com.liferay.document.library.file.rank.service_1.0.12
    

DLFileRankを永久に無効にする方法: (モジュールをブラックリストに登録することで)。

  1. コントロールパネルから「設定」→「システム設定」→「モジュールコンテナ」に移動します。
  2. バンドルブラックリスト画面で、バンドルシンボル名「com.liferay.document.library.file.rank.service」を追加します。 -> 更新しました。
  3. ログに以下のメッセージが表示されます:
2019-06-11 02:56:54.476 INFO  [CM Event Dispatcher (Fire 
ConfigurationEvent:
pid=com.liferay.portal.bundle.blacklist.internal.BundleBlacklistConfigur
ation)][BundleBlacklist:188] Stopping blacklisted bundle
com.liferay.document.library.file.rank.service_1.0.12 [304]
2019-06-11 02:56:54.571 INFO [CM Event Dispatcher (Fire
ConfigurationEvent:
pid=com.liferay.portal.bundle.blacklist.internal.BundleBlacklistConfigur
ation)][BundleStartStopLogger:42] STOPPED
com.liferay.document.library.file.rank.service_1.0.12 [304]

追加情報

文書にアクセスする人が多ければ多いほど、データベースへの書き込みの数が多くなるため、このエラーが発生する可能性が高くなります。 そのため、サイトの潜在的な帯域幅を考慮する必要があります。

did-this-article-resolve-your-issue

legacy-knowledge-base