SQL Transaction Errors

  • 7019214
  • 20-Jul-2016
  • 07-Aug-2017

Environment


Retain all versions.

Situation


There are SQL Transaction deadlock errors in my logs.  What is causing this and how do I resolve it?

[http-bio-48080-exec-100] [ERROR] SqlExceptionHelper: Transaction (Process ID 81) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
[http-bio-48080-exec-100] [ERROR] ServerErrorHandlerStrategy: reportError: SendJobs.setDefaultPOConnectionParams :: com.gwava.jobs.worker.SendJobs.setDefaultPOConnectionParams:358 :: EXCEPTION : com.gwava.cfg.dao.RetainConfigDataAccessException: org.springframework.dao.CannotAcquireLockException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.LockAcquisitionException: could not extract ResultSet com.gwava.cfg.dao.RetainConfigDataAccessException: org.springframework.dao.CannotAcquireLockException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.LockAcquisitionException: could not extract ResultSet

Resolution

These errors are typically caused when there are multiple Workers trying to access the Retain Server at the same time.  In general this isn't a major problem and won't significantly slow anything down.  This is more of a problem with servers with multiple workers on them.  If they're all on different servers, or you just have one worker, then it's less likely that you'll end up with a deadlock.

If you find the errors obnoxious, however, stagger the polling rate of each of your workers.  See the Admin guide (Retain4, Retain 3) under Modules and Jobs + Workers on how to change the polling rate of a Worker.

It's typically recommended to keep the polling rate relatively close to 10 minutes, so if you have 5 worker set them to 10, 11, 12,13, 14 minutes respectively.  That way you will never have a job start more than 14 minutes after your scheduled time for a job to run.  If you set the polling rate to be a large amount of time then your jobs could start far later than you intend them to run.

*Note: The actual meaning of a "Deadlock" is that there are two threads or processes trying to access the same data on an SQL server in a way that they permenantly block each other.  Rendering your SQL server completely stopped for those fields, or possibly tables.  Currently GWAVA support has not found any instances of this actually happening.

Additional Information

This article was originally published in the GWAVA knowledgebase as article ID 2833.