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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> UPDATE ... WHERE id = 56567675, Насколько ресурсоемка операция? 
:(
    Опции темы
Wowa
Дата 28.12.2005, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Насколько ресурсоемка эта операция?

Если в таблице около миллиона записиь и нужно по несколько раз в минуту делать UPDATE примерно 50-ти строк

Код

UPDATE table SET last_ process_id=43 WHERE id = 56;
UPDATE table SET last_ process_id=40 WHERE id = 37;
UPDATE table SET last_ process_id=45 WHERE id = 7968987;
...
итак 50 раз UPDATE разных строк


Столбец id является PRIMARY KEY и на него есть INDEX.


Что происходит с блокировкой?
Добавлено @ 16:37
На таблице из 500 000 записей, запрос:
Код

UPDATE `ibf_posts` SET `ip_address` = '24.35.65.46' WHERE pid =57482

занял 0.0406 сек. Что же. Не так и мало времени...
Добавлено @ 16:41
0.05*50=2,5сек. на обработку 50 простых UPDATE.
Добавлено @ 16:41
Есть идеи, как оптимизировать можно? smile
PM WWW   Вверх
Illuminaty
Дата 28.12.2005, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


/*Антон Захаров*/
***


Профиль
Группа: Комодератор
Сообщений: 1238
Регистрация: 19.3.2005
Где: Россия, Казань

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



Сделать еще на last_ process_id индекс
...и еще подумать... smile
PM MAIL ICQ   Вверх
Bikutoru
Дата 28.12.2005, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

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



Можно попробовать счиатать обновляемые записи в отдельную временную таблицу, обновить их там и заменить записи в исходной таблице записями из временной таблицы. Т.е. примерно так:
Код

CREATE TEMORARY TABLE tmp_data (...);
INSERT INTO tmp_data SELECT * FROM master_data WHERE id IN(...);
UPDATE tmp_data ...;
REPLACE master_data SELECT * FROM tmp_data;



--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Illuminaty
Дата 28.12.2005, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


/*Антон Захаров*/
***


Профиль
Группа: Комодератор
Сообщений: 1238
Регистрация: 19.3.2005
Где: Россия, Казань

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



Bikutoru, а разве это по времени не больше получится?
PM MAIL ICQ   Вверх
Guest
Дата 28.12.2005, 17:20 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Wowa @ 28.12.2005, 16:32)
Есть идеи, как оптимизировать можно? smile

Какой размер у тебя key_buffer? (посмотреть можно в show variables)
  Вверх
Бонифаций
Дата 28.12.2005, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



это был я


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
Bikutoru
Дата 28.12.2005, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

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



Цитата(Illuminaty @ 28.12.2005, 18:15)
разве это по времени не больше получится?

Не знаю, но я бы попробовал smile


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
Wowa
Дата 28.12.2005, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Цитата(Illuminaty @ 28.12.2005, 15:15)
Bikutoru, а разве это по времени не больше получится?

я думаю, что однозначно это будет дольше.
Добавлено @ 17:31
Цитата(Guest @ 28.12.2005, 15:20)
Какой размер у тебя key_buffer? (посмотреть можно в show variables)

На сервере 2Гб оперативки. key_buffer - могу поставить такой, какой нужно. Как это повлияет?
PM WWW   Вверх
Бонифаций
Дата 28.12.2005, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Wowa @ 28.12.2005, 17:30)
Цитата(Illuminaty @ 28.12.2005, 15:15)
Bikutoru, а разве это по времени не больше получится?

я думаю, что однозначно это будет дольше.
Добавлено @ 17:31
Цитата(Guest @ 28.12.2005, 15:20)
Какой размер у тебя key_buffer? (посмотреть можно в show variables)

На сервере 2Гб оперативки. key_buffer - могу поставить такой, какой нужно. Как это повлияет?

Поставьте скажем для начала 800М. Посмотрим что получится.

Также посмотрите возможно ли использование update dealyed
Добавлено @ 17:37
update delayed я имел в виду. Или то же самое update low priority


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
Wowa
Дата 28.12.2005, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



У меня есть идея разбить таблицу на блоки. Каждый блок из 50 записей состоять будет.
Добавить колонку block_id.
И создать новую таблицу, в которой хранить уже block_id и last_ process.

Обрабатывать придется все 50 записей(т.е. один блок) одновременно, поэтому у них будет last_ process естественно одинаковый.

Соответственно нам нужно будет провести не 50 апдейтов, а только 1 и в таблице которая в 50 раз меньше.



Может еще идеи есть?
Добавлено @ 17:39
Минус в этой идеи в том, что выдавать блоки на обработку - мне нужно также по много раз в минуту. И делать тогда select придется не с одной таблицы, а сначала с выбирать блок, который нужно обработать с первой таблицы, а затем со второй таблицы SELECT * WHERE block_id=НОМЕР_БЛОКА.
PM WWW   Вверх
Darhazer
Дата 28.12.2005, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 28.9.2005
Где: HellCity (Sofia, Bulgaria)

Репутация: 4
Всего: 29



Цитата(Illuminaty @ 28.12.2005, 16:54)
Сделать еще на last_ process_id индекс
...и еще подумать... smile

индекс ускоряеть поиск ( т.е. where ... ) но делаеть insert/update медленее. Так что думаю эта не хорошая идея

если у тебя id уникальний в запросе можно добавить Limit 1, чтоб не искал других записев с id=56


--------------------
I'm a wheel, I'm a wheel, I can roll, I can feel
But you can't stop me turning
'Cause I'm the sun, I'm the sun, I can move, I can run
But you'll never stom me burning
PM MAIL WWW ICQ YIM   Вверх
Бонифаций
Дата 28.12.2005, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Знаете что, попробуйте на одной большой таблице сделать все 50 update, а потом покажите какие значения будут у
key_reads и key_read_requests

(я предполагаю вы используете myisam)


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
sergejzr
Дата 28.12.2005, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Вообще быстрее не получится. другие индексы - всё равно лишние.
Тормозит только из за большого количества записей.



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Wowa
Дата 28.12.2005, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Цитата(Darhazer @ 28.12.2005, 15:41)
если у тебя id уникальний в запросе можно добавить Limit 1, чтоб не искал других записев с id=56

это ведь PRIMARY KEY. Вряд ли поиск идет дальше..
PM WWW   Вверх
Illuminaty
Дата 28.12.2005, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


/*Антон Захаров*/
***


Профиль
Группа: Комодератор
Сообщений: 1238
Регистрация: 19.3.2005
Где: Россия, Казань

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



На счет создания индекса - сглупил (даже проверил это, чтобы убедитьсяsmile)
Wowa, мне кажется, что нужно оптимизировать задачу. Изходя из этого можно и структуру таблиц и запросов изменить
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




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


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

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