|
|
|
Странная ошибка при работе с БД
|
|||
|---|---|---|---|
|
#18+
Всем привет. Столкнулась со следующей проблемой. Перевела все таблицы с MyIsam на InnoDB. При поднятии проекта в логах пишет следующую ошибку: Код: java 1. 2. Более того, теперь при выполнении запроса: Код: java 1. 2. 3. 4. 5. 6. 7. для вывода списка клиентов по параметрам, все зависает и начинает сжирается место на диске, минут через 5 все очухивается и информация все же выдается. При переводе базы обратно в MyIsam этот же код при тех же условиях отрабатывает мгновенно. Что может быть, помогите плиз. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2015, 09:37 |
|
||
|
Странная ошибка при работе с БД
|
|||
|---|---|---|---|
|
#18+
я так понимаю что в hibernate стоит drop - create ? вручную прогнать пробовали? у инно DB вроде и диалект другой(здесь об этом говорил http://stackoverflow.com/questions/1459265/hibernate-create-mysql-innodb-tables-instead-of-myisam) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2015, 09:41 |
|
||
|
Странная ошибка при работе с БД
|
|||
|---|---|---|---|
|
#18+
llemingя так понимаю что в hibernate стоит drop - create ? вручную прогнать пробовали? у инно DB вроде и диалект другой(здесь об этом говорил http://stackoverflow.com/questions/1459265/hibernate-create-mysql-innodb-tables-instead-of-myisam) в пропертис стоит: hibernate.hbm2ddl.auto=update hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2015, 09:44 |
|
||
|
Странная ошибка при работе с БД
|
|||
|---|---|---|---|
|
#18+
JulT, Ну, сколько можно повторять, не используйте никогда hbm2ddl и переходите на liquibase или flyway. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2015, 09:52 |
|
||
|
Странная ошибка при работе с БД
|
|||
|---|---|---|---|
|
#18+
BlazkowiczJulT, Ну, сколько можно повторять, не используйте никогда hbm2ddl и переходите на liquibase или flyway. я не использую в продакшене hbm2ddl, но теперь вовсе про него забуду). а что можете сказать по моей проблеме? как исправить этот долгий затык? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2015, 10:17 |
|
||
|
Странная ошибка при работе с БД
|
|||
|---|---|---|---|
|
#18+
JulTя не использую в продакшене hbm2ddl, но теперь вовсе про него забуду). а что можете сказать по моей проблеме? как исправить этот долгий затык? Судя по описанию, client (id) не объявлен первичным ключом почему-то. Can't create table 'mydb.#sql-25b8_17' (errno: 150), вроде как следствие того что FK не может ссылаться на колонку, которая не является PK. Ну, и соответственно тормозит выборка, так как без PK нет и индекса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2015, 10:26 |
|
||
|
Странная ошибка при работе с БД
|
|||
|---|---|---|---|
|
#18+
Можно подумать, замена hbm2ddl на liquibase или flyway тут что-то поменяет. Надо разбираться с внешним ключом в client_orders - неудача при его формировании говорит, скорее всего, о потере целостности данных. И даже правильно, что hibernate.hbm2ddl.auto=update в отладке используется, без него эта проблема вылезла бы потом на продакшене. А на MyIsam не было проблем просто потому, что там внешние ключи не поддерживаются ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2015, 11:10 |
|
||
|
Странная ошибка при работе с БД
|
|||
|---|---|---|---|
|
#18+
ivanraМожно подумать, замена hbm2ddl на liquibase или flyway тут что-то поменяет. Хера себе заява. Абы какая структура данных поменяется на ту что создал аккуратно руками. ivanraНадо разбираться с внешним ключом в client_orders - неудача при его формировании говорит, скорее всего, о потере целостности данных. Не с внешним, а с первичным. ivanraИ даже правильно, что hibernate.hbm2ddl.auto=update в отладке используется, без него эта проблема вылезла бы потом на продакшене. А на MyIsam не было проблем просто потому, что там внешние ключи не поддерживаются Фак мой мозг. Маппинг и БД две разные проблемы. Ничего правильного в hbm2ddl нет. Это исключительно инструмент быстрого прототипизирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2015, 11:41 |
|
||
|
Странная ошибка при работе с БД
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, в умелых руках hbm2ddl покрывает 99% потребностей для создания правильных структур. 1% - это уникальные для конкретного движка типы полей и индексы (но это больше относится не к структурам, а к аналитике и производительности). И если этот 1% не используется в проекте, зачем добавлять лишний слой с ddl? Не вижу аргументов. По ошибке - в логе же явно написано про внешний ключ. Первичный ключ 100% есть, hbm2ddl его бы не пропустил. Ошибка именно в ссылочной целостности - в client_orders есть записи с несуществующим client_id. Что касается тормозов при выборке из таблицы client - кроме внешнего ключа надо еще проверить меппинг связи client - client_orders. Возможные причины торомозов - двустороннесть и жадность связи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2015, 12:01 |
|
||
|
Странная ошибка при работе с БД
|
|||
|---|---|---|---|
|
#18+
Очередная магическая ситуация.... Как я уже писала выше, вот такой запрос выполняется от 5 до 10 минут (даже при выводе 1 строчки) Код: java 1. 2. 3. 4. 5. 6. 7. А если делаю так: Код: java 1. 2. 3. 4. то все выполняется мгновенно. НУ КАК ТАКОЕ МОЖЕТ БЫТЬ???? Индексы все перестроены, ошибок нет, перекрестных EAGER-ов нет, жесть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2015, 16:20 |
|
||
|
Странная ошибка при работе с БД
|
|||
|---|---|---|---|
|
#18+
JulT, есть Код: java 1. и есть загадочное многоточие, доступное только телепатам. Если внутри многоточия критерий, возвращающий большое множество (n строк), то результат закономерен (O(n 2 )), даже если возвращаемое множество ограничивается потом одной строкой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2015, 17:07 |
|
||
|
Странная ошибка при работе с БД
|
|||
|---|---|---|---|
|
#18+
http://stackoverflow.com/questions/25536868/criteria-distinct-root-entity-vs-projections-distinct Код: sql 1. 2. 3. 4. это вроде как отдать записей начиная с (numPage - 1) * pageSize, pageSize штук Код: sql 1. 2. 3. 4. 5. 6. 7. а это получить ВСЕ записи из DB и затем Hibernate уже выберет нужные. Если сортировку добавить наверняка еще веселей будет . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2015, 18:28 |
|
||
|
Странная ошибка при работе с БД
|
|||
|---|---|---|---|
|
#18+
если записей много то в первом случае тупо например с 10000 по 11111 Hibernate вытащит. во втором случае если в таблице 1000 000 то он долго будет по сети их получать и потом выковыривать нужные самостоятельно. distinct или order будет еще медлеее т.к. paging подразумевает сортировку по какому либо полю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2015, 18:31 |
|
||
|
Странная ошибка при работе с БД
|
|||
|---|---|---|---|
|
#18+
ivanraJulT, есть Код: java 1. и есть загадочное многоточие, доступное только телепатам. Если внутри многоточия критерий, возвращающий большое множество (n строк), то результат закономерен (O(n 2 )), даже если возвращаемое множество ограничивается потом одной строкой А вместо многоточия возможные фильтры запроса, например: Код: java 1. 2. 3. clientId=0 - значит вывести всех клиентов, их в базе 100 тысяч, я думала, что: Код: java 1. 2. выведет мне одного клиента, а получается хибернейт вытягивает все 100 тысяч и уже после обрезает? вот это новость а как же быть если фильтра нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2015, 20:00 |
|
||
|
Странная ошибка при работе с БД
|
|||
|---|---|---|---|
|
#18+
ну и до сих пор не понятно, почему если база в MyISAM все летает при тех же 100 тысячах данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2015, 10:54 |
|
||
|
Странная ошибка при работе с БД
|
|||
|---|---|---|---|
|
#18+
ivanra, в умелых руках hbm2ddl покрывает 99% потребностей для создания правильных структур. Это заблуждение. Такой подход работает только до тех пор когда можно всё грохнуть и создать с нуля. Когда же появляются production данные, которые нельзя терять, а миграцию продолжать нужно, то hbm2ddl и 50% не покроет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2015, 11:04 |
|
||
|
Странная ошибка при работе с БД
|
|||
|---|---|---|---|
|
#18+
JulTну и до сих пор не понятно, почему если база в MyISAM все летает при тех же 100 тысячах данных Это действительно загадка, хотя MyISAM и отдает данные быстрее. А от этого надо избавляться, если запрос может возвращать большие множества: Код: java 1. Даже из названия метода видно, что обрабатывается результат, а из вышенаписанного следует, что это может быть и 100000 записей. И всё это передается на клиент (и даже больше, в зависимости от fetch mode для связанных таблиц), чтобы потом выбрать одну страницу для показа. - переделать метод так, чтобы запрос выполнялся на сервере, используя Projections.distinct и субкритерии; - для связанных таблиц убедиться, что создались внешние ключи; - ну и включить на время SQL трассировку, убедиться, что в формируемых запросах есть слова LIMIT и OFFSET ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2015, 13:13 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38999146&tid=2125201]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
56ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
| others: | 214ms |
| total: | 367ms |

| 0 / 0 |
