Очень медленный UPDATE

Статус
В этой теме нельзя размещать новые ответы.

gres_18

Pythonобандерівець®
Регистрация
26 Апр 2009
Сообщения
408
Реакции
206
В общем, коллеги, вопрос в следующем. Вдруг заметил, что один скрипт начал значительно тормозить. Если другие гораздо более объемные и грузящие БД скрипты выполняются примерно 0,1 секунды, то этот формирует страницу ~3сек.
Выяснил, что если закомментировать следующую строку:
PHP:
mysql_query("UPDATE LOW_PRIORITY $tbl_name SET peremennaya=peremennaya+1 WHERE id='$idt'");
то время выполнения скрипта резко сокращается до нормального.
Пробовал выполнить запрос на апдейт в PHPMyAdmin:
Затронуто строк: 1. ( запрос занял 0.0014 сек. )

Двиг БД MyISAM, тестирую на домашней тачке ОС Debian5, записей в таблице ~9500, размер таблицы метров 50. Если еще что-то важно - добавлю :)
 
попробуй на поле id натянуть индекс
 
По идее id - это ключ, а значит по-любому на нем уже индекс есть, и плюс оно уникальное, т.е. по б-дереву должно мгновенно находиться. Имхо тут проблема именно в этом
SET peremennaya=peremennaya+1

попробуй заменить на SET peremennaya='что-то' и сравнить время. Может у него индекс или какая-то stored procedure сидит на этой peremennaya, и долго пересчитывается. Или оно как внешний ключ в другой таблице, и поэтому не работает.

Ну и первым делом конечно же проверь, что id- это действительно primary key или хотя бы index.
 
ИМХО все дело в LOW_PRIORITY
в PHPMyAdmin он не играет никакой роли так как выполняется лишь 1 запрос ...

а если его делать через веб-скрипт, то скорее всего что параллельно с ним выполняются и другие запросы с более "высоким" приоритетом ... ну и они соответственно его тормозят
 
Поле id это действительно primary key.
попробуй заменить на SET peremennaya='что-то'
Пробовал - в результате те же 3 секунды.
ИМХО все дело в LOW_PRIORITY
Пробовал с нормальным приоритетом(не HIGH), тот же результат.
параллельно с ним выполняются и другие запросы с более "высоким" приоритетом ... ну и они соответственно его тормозят
На той же странице выполнялось еще 2-3 сотни запросов на выборку :ah: Заменил их на статику, все встало на свои места.
Остался только один вопрос. Те же самые 2-3 сотни запросов выполнялись и на остальных страницах, они входят в шаблон. На других страницах кроме шаблонных сотен запросов выполнялись и другие запросы, но тормозит только этот один update.
Значит, пусть пока пусть будет статика, когда перееду на дедик буду разбираться. Спасибо всем откликнувшимся.
 
сделать id и peremennaya уникальными
 
а ничего что peremennaya вычисляется?
PHP:
peremennaya=peremennaya+1
да и если идет поиск по айдишнику WHERE id='$idt' то он явно уникальный
если peremennaya всегда увеличиваецо на +1 то почему бы не сделать auto_increment данного поля?
 
если peremennaya всегда увеличиваецо на +1 то почему бы не сделать auto_increment данного поля?
может потому что peremennaya является каким-то счетчиком, и то увеличивать ее или нет зависит от какого-то внешнего события


да и автоинкремент используется для генерации уникального идентификатора ( ну можно й для "счетчика" )
но он увеличивается лишь при вставке нового значения командой INSERT, а здесь как видно происходит UPDATE
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху