Модераторы: Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ускорение Update 11 млн. записей, firebird 2.5.1 
:(
    Опции темы
dershokus
Дата 6.12.2012, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 7.8.2011

Репутация: нет
Всего: 1



Здравствуйте. Я не очень знаю firebird, но подскажите:
11 миллионов записей в таблице (может быть больше) + запрос
Код

update big_table set "bigint_column"=0;

выполняется 15 минут! Иногда вообще все записает :(
Есть какие-нибудь методы ускорить это?
P.S.: Возможно это связано как-то с мусором. Но как это удалять. %)

Это сообщение отредактировал(а) dershokus - 6.12.2012, 18:29
PM MAIL   Вверх
Akina
Дата 6.12.2012, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 3
Всего: 454



Мало данных...
Можно заменить апдейт на удаление и пересоздание поля с нулевым дефолтным значением.
Можно (если есть) убить и после апдейта пересоздать индексы с этим полем.
Можно... ну, в общем, мало данных.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Akella
Дата 7.12.2012, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Цитата(dershokus @  6.12.2012,  18:04 Найти цитируемый пост)
выполняется 15 минут! Иногда вообще все записает :(
Есть какие-нибудь методы ускорить это?


Усилить железо. Испорльзовать FB x64.
Установить FB, как суперклассик, или как классик, чтобы нормально работал с многоядерными процессорами. Я надеюсь, что проц-то хоть 2х ядерный? 
Посмотри на загрузку процессора и винчестера.

Добавлено через 57 секунд
Мало того. Ты транзакцию подтверждаешь после каждой записи или как?

Добавлено через 3 минуты и 53 секунды
Если это всё запускается на стороне клиентского приложения, то можно выделить отдельный поток и тогда приложение не будет виснуть.

Добавлено через 5 минут и 55 секунд
И ещё. Индекс есть по этому полю (bigint_column)? Отключай (деактивируй) перед обновлением, а потом активируй (пересоздавай).
Убедись 100 раз, что при обновлении этого поля не выполняется ничего лишнейго. А то вдруг у тебя там триггер на обновление другой таблицы. В итоге обновляется реально в баще не 11 мульёнов, а 100500 мульёнов.
PM MAIL   Вверх
dershokus
Дата 7.12.2012, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 7.8.2011

Репутация: нет
Всего: 1



На железо не грешу. У меня i7 3.4GHz 16Gb ОЗУ. Нечему тормозить.
В этой таблице одно ключевое поле, индексов вообще нет.
Когда произвожу вышеуказанный запрос - система толком не грузится... Хотя грузится толоько одно ядро в районе 30-70%
Цитата

Мало того. Ты транзакцию подтверждаешь после каждой записи или как?

Всмысле? Я комичу после каждого запроса.
Цитата

Если это всё запускается на стороне клиентского приложения, то можно выделить отдельный поток и тогда приложение не будет виснуть.

Это я конечно сделал. Это болше по програмной части, а не по базе.
Цитата

Установить FB, как суперклассик, или как классик, чтобы нормально работал с многоядерными процессорами.

Установлен суперсервер.
PM MAIL   Вверх
tzirechnoy
Дата 8.12.2012, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: нет
Всего: 16



Можно попробовать включить write-back cache в системе и/или отключить fsync() в firebird. Это рискованно -- при отключении питания цэлостность данных становится заметно менее гарантированной. К тому жэ, я не знаю, как это делать в windows и firebird.
Ещё можно попробовать SELECT * ... перед этим запросом.

Но вообще, 15 минут -- это примерно 10000 секунд. По 100 ms на запись -- не так чтобы совсем плохая скорость, особенно если в таблицэ не совсем маленькие поля и есть индэксы.

Добавлено через 1 минуту и 17 секунд
Да, 15 минут -- это, разумеетя, 1000 секунд. и 100 мкс на запись.
PM MAIL   Вверх
Akella
Дата 8.12.2012, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



tzirechnoy, подучи русский.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.2431 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.