MySQL DB Deadlock
От: Crystalizer Украина  
Дата: 06.11.12 10:19
Оценка:
Всем привет,

столкнулся с такой ситуацией:
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


что посоветуете?
Re: MySQL DB Deadlock
От: Jakop Россия https://wmspanel.com
Дата: 06.11.12 10:22
Оценка: 1 (1)
ваша проблема в "Deadlock found when trying to get lock; try restarting transaction"
Это не имеет особого отношения к java. Почитайте про то как избавиться от deadlock-ов
https://wmspanel.com/nimble — Nimble Streamer media server for live and VOD HLS, RTMP, HTTP streaming

https://wmspanel.com/ — Control and reporting panel for Wowza and Nimble Streamer
Re: MySQL DB Deadlock
От: hrensgory Россия  
Дата: 06.11.12 10:38
Оценка: 2 (1)
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" или как-то так.
Дальше думать откуда взялся конкурирующий запрос.

--
WBR,
Serge.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: MySQL DB Deadlock
От: Crystalizer Украина  
Дата: 06.11.12 10:40
Оценка:
Здравствуйте, hrensgory, Вы писали:

H>show engine innodb status\G


H>секция "latest detected deadlock" или как-то так.

H>Дальше думать откуда взялся конкурирующий запрос.

есть разные потоки, делающие одно и тоже но для своих строк в таблице... но в чём проблема по сути?
слишком много потоков?
Re[2]: MySQL DB Deadlock
От: Crystalizer Украина  
Дата: 06.11.12 10:44
Оценка:
Здравствуйте, hrensgory, Вы писали:

H>show engine innodb status\G


H>секция "latest detected deadlock" или как-то так.

H>Дальше думать откуда взялся конкурирующий запрос.

или проблема в том, что слишком долго lock на таблицу был?
Re: MySQL DB Deadlock
От: Blazkowicz Россия  
Дата: 06.11.12 10:44
Оценка: 2 (1)
Здравствуйте, Crystalizer, Вы писали:

Рекомендую:
https://www.google.com/search?q=MySQLTransactionRollbackException%3A+Deadlock+found+when+trying+to+get+lock

C>что посоветуете?

Deadlock-и уровня базы лучше анализировать со стороны базы.
Если никто больше с таблицей не общается, то можно и со стороны Java дампы потоков делать. Но велик шанс промахнуться, второй поток уже будет завершать транзакцию.
Просто посмотрите кто вообще паралельно пишет в ту же таблицу в текущую или соседние записи. Почитайте вообще как блокировки в MySQL организованы. В старых версиях с этим мрачно было. Там целые регионы блокировались, так что при больших загрузках всегда бока вылезали.
Re[3]: MySQL DB Deadlock
От: Blazkowicz Россия  
Дата: 06.11.12 10:47
Оценка:
Здравствуйте, Crystalizer, Вы писали:

C>есть разные потоки, делающие одно и тоже но для своих строк в таблице... но в чём проблема по сути?

C>слишком много потоков?
MySQL может заблокировать целый регион, а не одну запись. Когда регионы пересекаются, даже не обязательно они это делают фактически, может возникнуть блокировка. Зависит от SQL запросов и настроек.
Re[2]: MySQL DB Deadlock
От: Crystalizer Украина  
Дата: 06.11.12 10:51
Оценка:
Здравствуйте, 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 организованы. В старых версиях с этим мрачно было. Там целые регионы блокировались, так что при больших загрузках всегда бока вылезали.

уже анализирую.
много потоков делают примерно одно и тоже.
не очень понимаю — ну и что, а в чём проблема? долго запросы выполняются и поэтому таймаут для лока выходит?
Re[4]: MySQL DB Deadlock
От: Crystalizer Украина  
Дата: 06.11.12 10:53
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, Crystalizer, Вы писали:


C>>есть разные потоки, делающие одно и тоже но для своих строк в таблице... но в чём проблема по сути?

C>>слишком много потоков?
B>MySQL может заблокировать целый регион, а не одну запись. Когда регионы пересекаются, даже не обязательно они это делают фактически, может возникнуть блокировка. Зависит от SQL запросов и настроек.

но проблема потому что долго выполняются запросы, а не потому, что просто пересекаются? так?
Re[3]: MySQL DB Deadlock
От: Blazkowicz Россия  
Дата: 06.11.12 11:13
Оценка:
Здравствуйте, Crystalizer, Вы писали:

C>не очень понимаю — ну и что, а в чём проблема? долго запросы выполняются и поэтому таймаут для лока выходит?

Сервер, вроде как, говорит о Deadlock-е, а не о таймауте.
Re[3]: MySQL DB Deadlock
От: hrensgory Россия  
Дата: 06.11.12 11:16
Оценка:
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 почитайте, там
написано всё должно быть. Причин может быть много — ошибки в коде (когда
разные потоки пытаются изменять одну и ту же запись), неправильно
выставленный уровень изоляции транзакций, триггера какие-нибудь и т.п.

--
WBR,
Serge.
Posted via RSDN NNTP Server 2.1 beta
Re[5]: MySQL DB Deadlock
От: Blazkowicz Россия  
Дата: 06.11.12 11:28
Оценка:
Здравствуйте, Crystalizer, Вы писали:

C>но проблема потому что долго выполняются запросы, а не потому, что просто пересекаются? так?

Сложно так сходу сказать. Просто Hibernate делает в одной транзакции апдейт сразу кучи таблиц. Они все блокируются. Другая транзакция пишет в те же таблицы, но захватила локи в другом порядке. Вот и deadlock.
Re[6]: MySQL DB Deadlock
От: Crystalizer Украина  
Дата: 06.11.12 11:41
Оценка:
Здравствуйте, Blazkowicz, Вы писали:

B>Здравствуйте, Crystalizer, Вы писали:


C>>но проблема потому что долго выполняются запросы, а не потому, что просто пересекаются? так?

B>Сложно так сходу сказать. Просто Hibernate делает в одной транзакции апдейт сразу кучи таблиц. Они все блокируются. Другая транзакция пишет в те же таблицы, но захватила локи в другом порядке. Вот и deadlock.

мм! вот оно чо!
Re[7]: MySQL DB Deadlock
От: Crystalizer Украина  
Дата: 06.11.12 14:54
Оценка:
Здравствуйте, Crystalizer, Вы писали:

C>Здравствуйте, Blazkowicz, Вы писали:


B>>Здравствуйте, Crystalizer, Вы писали:


C>>>но проблема потому что долго выполняются запросы, а не потому, что просто пересекаются? так?

B>>Сложно так сходу сказать. Просто Hibernate делает в одной транзакции апдейт сразу кучи таблиц. Они все блокируются. Другая транзакция пишет в те же таблицы, но захватила локи в другом порядке. Вот и deadlock.

C>мм! вот оно чо!


поможет ли если изменить алгоритм ключа?
Re[3]: MySQL DB Deadlock
От: Sergey Astakhov Россия  
Дата: 06.11.12 19:20
Оценка:
Здравствуйте, Crystalizer, Вы писали:

C>не очень понимаю — ну и что, а в чём проблема? долго запросы выполняются и поэтому таймаут для лока выходит?


Нет, deadlock может возникнуть при любой длительности, таймауты тут не причём. Просто длительные запросы сильно повышают вероятность на него наткнуться. На коротких они будут встречаться реже, но всё равно встречаться будут.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.