From 98a027bee10e97e724e77bd57490e758a228d232 Mon Sep 17 00:00:00 2001 From: Gus Brodman Date: Thu, 20 Feb 2025 17:39:56 -0500 Subject: [PATCH] Log transaction durations There can be delays in releasing predicate locks when we have transactions that are long-lived -- even delays in releasing predicate locks acquired by shorter-lived transactions. Logging the transaction duration will allow us to get a sense as to transaction durations during busy times. --- .../persistence/transaction/JpaTransactionManagerImpl.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/src/main/java/google/registry/persistence/transaction/JpaTransactionManagerImpl.java b/core/src/main/java/google/registry/persistence/transaction/JpaTransactionManagerImpl.java index 726159a85a1..b1e921ea712 100644 --- a/core/src/main/java/google/registry/persistence/transaction/JpaTransactionManagerImpl.java +++ b/core/src/main/java/google/registry/persistence/transaction/JpaTransactionManagerImpl.java @@ -276,6 +276,10 @@ public T transactNoRetry( } T result = work.call(); txn.commit(); + long duration = clock.nowUtc().getMillis() - txnInfo.transactionTime.getMillis(); + if (duration >= 100) { + logger.atInfo().log("Transaction duration: %d milliseconds", duration); + } return result; } catch (Throwable e) { // Catch a Throwable here so even Errors would lead to a rollback.