![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| unkis |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 802 Регистрация: 8.9.2004 Репутация: нет Всего: 1 |
Ребята, задача заключается в следующем:
Надо в БД сохранить 800000 объектов. Интересное начинается после 200000 объектов, жёсткий диск крутится без перерыву, нагрузка на процессор нулевая. до этого(до 200000) нагрузка на процессор была 100%. После некоторого времени, жёсткий диск останавливается(почти останавливается), и нагрузка на процессор опять 100% и потом опять падает и так продолжается и продолжается. Производительность падает в разы. вопрос что же это за хрень такая? Может кто-то с подобным сталкивался? -------------------- www.unkis.com |
|||
|
||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Сохранение выполняется одной транзакцией или операция на несколько разбита?
|
|||
|
||||
| unkis |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 802 Регистрация: 8.9.2004 Репутация: нет Всего: 1 |
одной
-------------------- www.unkis.com |
|||
|
||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
||||
|
||||
| unkis |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 802 Регистрация: 8.9.2004 Репутация: нет Всего: 1 |
Спасибо но проблема ещё вот в чём
у меня перед каждой вставкой идйт обращение к базе с выборкой, вот так выглядит код
то есть перед каждой вставкой, он проверяет существует ли такая запись или нет.
и я так понимаю что база просто не знает что делать сохранять или выбирать, и поэтому происходит такой конфликт. Что посоветуете по этому поводу? Это сообщение отредактировал(а) unkis - 3.5.2007, 13:02 -------------------- www.unkis.com |
||||
|
|||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Это, извиняюсь, как? Ты попросил MySQL вернуть запись с нужным первичным ключом, а она не поняла и решила что-то там сохранить? Это что за искусственный интеллект? Чего это MySQL тебя не слушается? Выбрось такую СУБД. Каждый из 800000 объектов ты пытаешься получить из базы. Видимо таких объектов в базе довольно много. Каждый из них хранится в кэше сессии. Вот тебе еще одна причина расходования памяти. Возможны следующие пути решения:
|
|||
|
||||
| unkis |
|
||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 802 Регистрация: 8.9.2004 Репутация: нет Всего: 1 |
Да нет она слушается, просто для неё наверно выборка длится слишком долго, так как если отключить проверку и ещё кое где поменять то процесс идёт очень быстро, но мне нужна такая проверка. в этом была проблема, я отключил кэш, и каждые 5000 делаю
пробывал, писал каждые 5000
эффекта никакого, тоже после 20000 тысяч начинется, жёсткий диск крутится без перерыву, нагрузка на процессор нулевая.
1) а как я могу при помощи count(*) проверить существует ли объект, если он только считает. 2) и второе даже если он существует, то мне его надо вытащить и присвоить промежуточной таблицы и сохранить. 3) и почему entityManager.find(Location.class,location1.getLocation().getLocation_id()); не подходит?
да уже в роди в зад и вперёд прочитал, неужели что-то пропустил, если сохранять просто обекты без выборки, то проблем нет(проверял) он сохраняет и очень даже быстро, но вот когда делаешь проверку то и происходит выше описанная проблема. -------------------- www.unkis.com |
||||||||||
|
|||||||||||
| tux |
|
||||||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Если до одного посчитает, значит существует. Хайтек такой.
Как я вижу из кода, тебе нужно только одно поле изменить, зачем тебе весь объект?
Потому и не подходит, что грузит весь объект в память. Зачем это нужно если можно только обновить поле, не тратя память совсем. |
||||||
|
|||||||
| unkis |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 802 Регистрация: 8.9.2004 Репутация: нет Всего: 1 |
да только мне не нужно, не обновлять поле, а нужно вставить новый объект, ссылающийся не на новый объект, а на уже имеющийся в БД -------------------- www.unkis.com |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 8 Всего: 118 |
Если у тебя связь между объектами lazy, то тогда можно давать в качестве аргумента не полный объект location, а пустой, у которого установлен тольео первичный ключ - можно создать конструктор для Location с одним аргументом. И тогда установка location можно прописать вот так location1.setLocation(new Location(location1.getLocation().getLocation_id()); Это конечно просто набросок - посмотри сам внимательнее. |
|||
|
||||
| unkis |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 802 Регистрация: 8.9.2004 Репутация: нет Всего: 1 |
Сейчас не могу попробывать, попробую вечером.
А вы бы не могли мне объяснить за что отвечает атрибут lazy? -------------------- www.unkis.com |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |