Проблема ожидания блокировки Hibernate - PullRequest
2 голосов
/ 30 мая 2011

У нас есть Java-приложение, которое прослушивает сокеты и записывает проанализированную информацию в базу данных MySql. Мы используем hibernate в качестве слоя ORM. Весь процесс персистентности обрабатывается специальным потоком. Объекты вставляются и обновляются группами по 20, максимальная скорость вставки составляет 30 вставок / с, а максимальная частота обновления составляет 30 обновлений / с на 6-ядерном Linux-устройстве с 24 ГБ ОЗУ. Размер БД на данный момент составляет около 16 ГБ. Приложение зависает после бесперебойной работы в течение 40 минут, за исключением следующего: org.hibernate.util.JDBCExceptionReporter - SQL Error: 1205, SQLState: 41000 Lock wait timeout exceeded; try restarting transaction javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not execute update query

Даже если существует блокировка строки, этот поток никогда не должен останавливаться и, если возможно, принудительно снять блокировку строки, как я могу гарантировать такое поведение? Любая помощь будет оценена. Ниже вы можете найти нашу конфигурацию гибернации:

<properties>
  <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
  <property name="hibernate.connection.url" value="jdbc:mysql://**************:3306/*********?useUnicode=yes;characterEncoding=UTF-8;rewriteBatchedStatements=true;includeThreadNamesAsStatementComment=true"/>
  <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
  <property name="hibernate.connection.autocommit" value="false"/>
  <property name="hibernate.connection.useUnicode" value="true"/>
  <property name="hibernate.connection.characterEncoding" value="UTF-8"/>
  <property name="hibernate.connection.show_sql" value="true"/>
  <property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider"/>
  <property name="hibernate.connection.zeroDateTimeBehavior" value="convertToNull"/>
  <property name="hibernate.c3p0.max_size" value="100"/>
  <property name="hibernate.c3p0.min_size" value="0"/>
  <property name="hibernate.c3p0.acquire_increment" value="1"/>
  <property name="hibernate.c3p0.idle_test_period" value="300"/>
  <property name="hibernate.c3p0.max_statements" value="0"/>
  <property name="hibernate.c3p0.timeout" value="100"/>
  <property name="hibernate.c3p0.autoCommitOnClose" value="false"/>
  <!-- JDBC connection pool (use the built-in) -->
  <!--Hibernate Batch Process Best Practices -->
  <property name="hibernate.order_updates" value="true"/>
  <property name="hibernate.order_inserts" value="true"/>
  <property name="hibernate.jdbc.batch_size" value="15" />
</properties>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...