org.springframework.dao.CannotAcquireLockException: could not insert: [a.b.c.db.entity.Entry]; SQL [insert into Entry (is_active, ... , user) values (?, ..., ?)]; nested exception is org.hibernate.exception.LockAcquisitionException: could not insert: [a.b.c.db.entity.Entry]
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:633) ~[spring-orm-3.0.1.RELEASE.jar:3.0.1.RELEASE]
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:101) ~[spring-orm-3.0.1.RELEASE.jar:3.0.1.RELEASE]
at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213) ~[spring-tx-3.0.1.RELEASE.jar:3.0.1.RELEASE]
at org.springframework.orm.jpa.JpaAccessor.translateIfNecessary(JpaAccessor.java:152) ~[spring-orm-3.0.1.RELEASE.jar:3.0.1.RELEASE]
at org.springframework.orm.jpa.JpaTemplate.execute(JpaTemplate.java:188) ~[spring-orm-3.0.1.RELEASE.jar:3.0.1.RELEASE]
at org.springframework.orm.jpa.JpaTemplate.persist(JpaTemplate.java:262) ~[spring-orm-3.0.1.RELEASE.jar:3.0.1.RELEASE]
at a.b.c.db.DaoImpl.create(DaoImpl.java:65) ~[cos-server.jar:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.6.0_24]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.6.0_24]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.6.0_24]
at java.lang.reflect.Method.invoke(Method.java:616) ~[na:1.6.0_24]
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307) ~[spring-aop-3.0.1.RELEASE.jar:3.0.1.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) ~[spring-aop-3.0.1.RELEASE.jar:3.0.1.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) ~[spring-aop-3.0.1.RELEASE.jar:3.0.1.RELEASE]
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:108) ~[spring-tx-3.0.1.RELEASE.jar:3.0.1.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) ~[spring-aop-3.0.1.RELEASE.jar:3.0.1.RELEASE]
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) ~[spring-aop-3.0.1.RELEASE.jar:3.0.1.RELEASE]
at $Proxy29.create(Unknown Source) ~[na:na]
at a.b.c.store.WebStoreImpl.createResource(WebStoreImpl.java:199) ~[cos-server.jar:na]
at a.b.c.store.WebStoreImpl.createResource(WebStoreImpl.java:173) ~[cos-server.jar:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.6.0_24]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.6.0_24]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.6.0_24]
at java.lang.reflect.Method.invoke(Method.java:616) ~[na:1.6.0_24]
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307) ~[spring-aop-3.0.1.RELEASE.jar:3.0.1.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) ~[spring-aop-3.0.1.RELEASE.jar:3.0.1.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) ~[spring-aop-3.0.1.RELEASE.jar:3.0.1.RELEASE]
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:108) ~[spring-tx-3.0.1.RELEASE.jar:3.0.1.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) ~[spring-aop-3.0.1.RELEASE.jar:3.0.1.RELEASE]
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) ~[spring-aop-3.0.1.RELEASE.jar:3.0.1.RELEASE]
at $Proxy38.createResource(Unknown Source) ~[na:na]
at a.b.c.store.WebStoreImplDecorator.createResource(WebStoreImplDecorator.java:87) ~[cos-server.jar:na]
at a.b.c.server.UploadServlet.saveStreamToStore(UploadServlet.java:379) ~[cos-server.jar:na]
at a.b.c.server.UploadServlet.processUpload(UploadServlet.java:189) ~[cos-server.jar:na]
at a.b.c.server.UploadServlet.service(UploadServlet.java:99) ~[cos-server.jar:na]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) ~[javax.servlet-3.0.0.v201112011016.jar:na]
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:598) ~[jetty-servlet-8.1.3.v20120416.jar:8.1.3.v20120416]
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1367) ~[jetty-servlet-8.1.3.v20120416.jar:8.1.3.v20120416]
at a.b.c.server.CrossOriginFilter.doFilter(CrossOriginFilter.java:113) ~[cos-server.jar:na]
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1338) ~[jetty-servlet-8.1.3.v20120416.jar:8.1.3.v20120416]
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:484) [jetty-servlet-8.1.3.v20120416.jar:8.1.3.v20120416]
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) [jetty-server-8.1.3.v20120416.jar:8.1.3.v20120416]
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1065) [jetty-server-8.1.3.v20120416.jar:8.1.3.v20120416]
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:413) [jetty-servlet-8.1.3.v20120416.jar:8.1.3.v20120416]
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:192) [jetty-server-8.1.3.v20120416.jar:8.1.3.v20120416]
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:999) [jetty-server-8.1.3.v20120416.jar:8.1.3.v20120416]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) [jetty-server-8.1.3.v20120416.jar:8.1.3.v20120416]
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:149) [jetty-server-8.1.3.v20120416.jar:8.1.3.v20120416]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111) [jetty-server-8.1.3.v20120416.jar:8.1.3.v20120416]
at org.eclipse.jetty.server.Server.handle(Server.java:350) [jetty-server-8.1.3.v20120416.jar:8.1.3.v20120416]
at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:454) [jetty-server-8.1.3.v20120416.jar:8.1.3.v20120416]
at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:900) [jetty-server-8.1.3.v20120416.jar:8.1.3.v20120416]
at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:954) [jetty-server-8.1.3.v20120416.jar:8.1.3.v20120416]
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:851) [jetty-http-8.1.3.v20120416.jar:8.1.3.v20120416]
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) [jetty-http-8.1.3.v20120416.jar:8.1.3.v20120416]
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:77) [jetty-server-8.1.3.v20120416.jar:8.1.3.v20120416]
at org.eclipse.jetty.io.nio.SslConnection.handle(SslConnection.java:191) [jetty-io-8.1.3.v20120416.jar:8.1.3.v20120416]
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:606) [jetty-io-8.1.3.v20120416.jar:8.1.3.v20120416]
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:46) [jetty-io-8.1.3.v20120416.jar:8.1.3.v20120416]
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:603) [jetty-util-8.1.3.v20120416.jar:8.1.3.v20120416]
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:538) [jetty-util-8.1.3.v20120416.jar:8.1.3.v20120416]
at java.lang.Thread.run(Thread.java:679) [na:1.6.0_24]
Caused by: org.hibernate.exception.LockAcquisitionException: could not insert: [a.b.c.db.entity.Entry]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:107) ~[hibernate-core-3.6.10.Final.jar:3.6.10.Final]
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) ~[hibernate-core-3.6.10.Final.jar:3.6.10.Final]
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:63) ~[hibernate-core-3.6.10.Final.jar:3.6.10.Final]
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2346) ~[hibernate-core-3.6.10.Final.jar:3.6.10.Final]
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2853) ~[hibernate-core-3.6.10.Final.jar:3.6.10.Final]
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71) ~[hibernate-core-3.6.10.Final.jar:3.6.10.Final]
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273) ~[hibernate-core-3.6.10.Final.jar:3.6.10.Final]
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:320) ~[hibernate-core-3.6.10.Final.jar:3.6.10.Final]
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:203) ~[hibernate-core-3.6.10.Final.jar:3.6.10.Final]
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:129) ~[hibernate-core-3.6.10.Final.jar:3.6.10.Final]
at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:69) ~[hibernate-entitymanager-3.6.10.Final.jar:3.6.10.Final]
at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:201) ~[hibernate-core-3.6.10.Final.jar:3.6.10.Final]
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:147) ~[hibernate-core-3.6.10.Final.jar:3.6.10.Final]
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:71) ~[hibernate-core-3.6.10.Final.jar:3.6.10.Final]
at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:808) ~[hibernate-core-3.6.10.Final.jar:3.6.10.Final]
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:782) ~[hibernate-core-3.6.10.Final.jar:3.6.10.Final]
at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:786) ~[hibernate-core-3.6.10.Final.jar:3.6.10.Final]
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:839) ~[hibernate-entitymanager-3.6.10.Final.jar:3.6.10.Final]
at org.springframework.orm.jpa.JpaTemplate$5.doInJpa(JpaTemplate.java:264) ~[spring-orm-3.0.1.RELEASE.jar:3.0.1.RELEASE]
at org.springframework.orm.jpa.JpaTemplate.execute(JpaTemplate.java:183) ~[spring-orm-3.0.1.RELEASE.jar:3.0.1.RELEASE]
... 57 common frames omitted
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.6.0_24]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) ~[na:1.6.0_24]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.6.0_24]
at java.lang.reflect.Constructor.newInstance(Constructor.java:532) ~[na:1.6.0_24]
at com.mysql.jdbc.Util.handleNewInstance(Util.java:409) ~[mysql-connector-java-5.1.13.jar:na]
at com.mysql.jdbc.Util.getInstance(Util.java:384) ~[mysql-connector-java-5.1.13.jar:na]
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1066) ~[mysql-connector-java-5.1.13.jar:na]
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3566) ~[mysql-connector-java-5.1.13.jar:na]
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3498) ~[mysql-connector-java-5.1.13.jar:na]
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959) ~[mysql-connector-java-5.1.13.jar:na]
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113) ~[mysql-connector-java-5.1.13.jar:na]
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2568) ~[mysql-connector-java-5.1.13.jar:na]
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2113) ~[mysql-connector-java-5.1.13.jar:na]
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2409) ~[mysql-connector-java-5.1.13.jar:na]
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2327) ~[mysql-connector-java-5.1.13.jar:na]
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2312) ~[mysql-connector-java-5.1.13.jar:na]
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105) ~[c3p0-0.9.1.jar:0.9.1]
at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:93) ~[hibernate-core-3.6.10.Final.jar:3.6.10.Final]
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:56) ~[hibernate-core-3.6.10.Final.jar:3.6.10.Final]
... 74 common frames omitted
ваша проблема в "Deadlock found when trying to get lock; try restarting transaction"
Это не имеет особого отношения к java. Почитайте про то как избавиться от deadlock-ов
On 06.11.2012 14:19, Crystalizer wrote:
> Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock;try restarting transaction
> > что посоветуете?
show engine innodb status\G
секция "latest detected deadlock" или как-то так.
Дальше думать откуда взялся конкурирующий запрос.
Рекомендую: https://www.google.com/search?q=MySQLTransactionRollbackException%3A+Deadlock+found+when+trying+to+get+lock
C>что посоветуете?
Deadlock-и уровня базы лучше анализировать со стороны базы.
Если никто больше с таблицей не общается, то можно и со стороны Java дампы потоков делать. Но велик шанс промахнуться, второй поток уже будет завершать транзакцию.
Просто посмотрите кто вообще паралельно пишет в ту же таблицу в текущую или соседние записи. Почитайте вообще как блокировки в MySQL организованы. В старых версиях с этим мрачно было. Там целые регионы блокировались, так что при больших загрузках всегда бока вылезали.
Здравствуйте, Crystalizer, Вы писали:
C>есть разные потоки, делающие одно и тоже но для своих строк в таблице... но в чём проблема по сути? C>слишком много потоков?
MySQL может заблокировать целый регион, а не одну запись. Когда регионы пересекаются, даже не обязательно они это делают фактически, может возникнуть блокировка. Зависит от SQL запросов и настроек.
Здравствуйте, Blazkowicz, Вы писали:
B>Здравствуйте, Crystalizer, Вы писали:
B>Рекомендую: B>https://www.google.com/search?q=MySQLTransactionRollbackException%3A+Deadlock+found+when+trying+to+get+lock
C>>что посоветуете? B>Deadlock-и уровня базы лучше анализировать со стороны базы. B>Если никто больше с таблицей не общается, то можно и со стороны Java дампы потоков делать. Но велик шанс промахнуться, второй поток уже будет завершать транзакцию. B>Просто посмотрите кто вообще паралельно пишет в ту же таблицу в текущую или соседние записи. Почитайте вообще как блокировки в MySQL организованы. В старых версиях с этим мрачно было. Там целые регионы блокировались, так что при больших загрузках всегда бока вылезали.
уже анализирую.
много потоков делают примерно одно и тоже.
не очень понимаю — ну и что, а в чём проблема? долго запросы выполняются и поэтому таймаут для лока выходит?
Здравствуйте, Blazkowicz, Вы писали:
B>Здравствуйте, Crystalizer, Вы писали:
C>>есть разные потоки, делающие одно и тоже но для своих строк в таблице... но в чём проблема по сути? C>>слишком много потоков? B>MySQL может заблокировать целый регион, а не одну запись. Когда регионы пересекаются, даже не обязательно они это делают фактически, может возникнуть блокировка. Зависит от SQL запросов и настроек.
но проблема потому что долго выполняются запросы, а не потому, что просто пересекаются? так?
Здравствуйте, Crystalizer, Вы писали:
C>не очень понимаю — ну и что, а в чём проблема? долго запросы выполняются и поэтому таймаут для лока выходит?
Сервер, вроде как, говорит о Deadlock-е, а не о таймауте.
On 06.11.2012 14:40, Crystalizer wrote:
> H>show engine innodb status\G > > H>секция "latest detected deadlock" или как-то так. > H>Дальше думать откуда взялся конкурирующий запрос. > > есть разные потоки, делающие одно и тоже но для своих строк в таблице... > но в чём проблема по сути? > слишком много потоков?
Если у вас innodb — вывод show engine innodb status\G почитайте, там
написано всё должно быть. Причин может быть много — ошибки в коде (когда
разные потоки пытаются изменять одну и ту же запись), неправильно
выставленный уровень изоляции транзакций, триггера какие-нибудь и т.п.
Здравствуйте, Crystalizer, Вы писали:
C>но проблема потому что долго выполняются запросы, а не потому, что просто пересекаются? так?
Сложно так сходу сказать. Просто Hibernate делает в одной транзакции апдейт сразу кучи таблиц. Они все блокируются. Другая транзакция пишет в те же таблицы, но захватила локи в другом порядке. Вот и deadlock.
Здравствуйте, Blazkowicz, Вы писали:
B>Здравствуйте, Crystalizer, Вы писали:
C>>но проблема потому что долго выполняются запросы, а не потому, что просто пересекаются? так? B>Сложно так сходу сказать. Просто Hibernate делает в одной транзакции апдейт сразу кучи таблиц. Они все блокируются. Другая транзакция пишет в те же таблицы, но захватила локи в другом порядке. Вот и deadlock.
Здравствуйте, Crystalizer, Вы писали:
C>Здравствуйте, Blazkowicz, Вы писали:
B>>Здравствуйте, Crystalizer, Вы писали:
C>>>но проблема потому что долго выполняются запросы, а не потому, что просто пересекаются? так? B>>Сложно так сходу сказать. Просто Hibernate делает в одной транзакции апдейт сразу кучи таблиц. Они все блокируются. Другая транзакция пишет в те же таблицы, но захватила локи в другом порядке. Вот и deadlock.
C>мм! вот оно чо!
Здравствуйте, Crystalizer, Вы писали:
C>не очень понимаю — ну и что, а в чём проблема? долго запросы выполняются и поэтому таймаут для лока выходит?
Нет, deadlock может возникнуть при любой длительности, таймауты тут не причём. Просто длительные запросы сильно повышают вероятность на него наткнуться. На коротких они будут встречаться реже, но всё равно встречаться будут.