SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#26 18.03.2008 14:51:24

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Торможение MyISAM при вставке/обновлении

По топорному пути оптимизации Вы уже почти прошли - настройки сервера, кэши, модификаторы к запросам, остался только один шаг - купить новое железо smile

Еще есть целый непройденный творческий путь оптимизации - переструктурировать базу и приложение

Неактивен

 

#27 18.03.2008 16:30:00

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Торможение MyISAM при вставке/обновлении

ыыыы, в том-то и дело, что начальство сказало "пока проект не будет приносить прибыль, мы не будем ни сервера добавлять, ни железо менять" lol

Вот базу и приложения уже решили пересмотреть smile

Но опять же, я так и не знаю прямой ответ на свой вопрос. Почему база затормаживается со временем? smile От чего это может зависеть? Кеши не заполняются, значит должно быть всё ок.


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#28 18.03.2008 16:34:14

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Торможение MyISAM при вставке/обновлении

Ответ на Ваш вопрос я тоже не знаю. Возможно его удастся найти если узнать какие именно запросы работают медленнее и свести к минимальному затормаживающемуся запросу. По идее такого быть не должно, но слишком много свободных параметров.

Неактивен

 

#29 18.03.2008 17:17:25

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Торможение MyISAM при вставке/обновлении

Но что ещё интересно, тормоза эти наблюдаются только при селектах из этой таблицы с 4М записей. Селекты на других таблицах/базах работают без проблем. Как-будто забивается какой-то буфер sad Перый раз с такой какой сталкиваюсь...


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#30 18.03.2008 17:25:10

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Торможение MyISAM при вставке/обновлении

Всякое может быть. Скажем такая версия - при работе MySQL используется больше буферов, кэшей, они наполняются постепенно. У ОС не остается свободной памяти и она не может продолжать хранить данную таблицу в дисковом кэше.

Неактивен

 

#31 18.03.2008 18:33:08

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Торможение MyISAM при вставке/обновлении

У меня сейчас в процессах висят инсерты со временем по 60-90 секунд и статусом Locked. Это что получается, что запросов выстроилось в очереди так много, что они ожидают доступа 60-90 секунд? Я правильно понял ситуацию?


ЗЫ А чуть позже, время было 6ХХ и 8ХХ секунд, о как smile

Отредактированно Neval (18.03.2008 23:14:00)


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#32 18.03.2008 23:11:45

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Торможение MyISAM при вставке/обновлении

Посту ап надо, как я понял)))


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#33 18.03.2008 23:45:45

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Торможение MyISAM при вставке/обновлении

Может быть в очереди долго, а может быть запрос ждет какой-то специфичный lock. Вообще говоря, так как INSERT у Вас LOW PRIORITY, они могут не выполниться никогда, так как пока идут SELECTы, приоритет за SELECTами.

Неактивен

 

#34 19.03.2008 11:45:37

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Торможение MyISAM при вставке/обновлении

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

Текущая стата сервера:
Com_insert       14470600
Com_replace    24316180
Com_select        2299457
Com_update      1406775

Table_locks_immediate         36685557
Table_locks_waited                5843014

Много у меня реплейсов. Это нормальный подход или лучше использовать инсерты для новых записей и апдейты для существующих?

Ну и последний вопрос в этой теме.
Все расследования указывают на то, что проблема торможения в массовости апдейтов, по этому было решено вынести поля апдейтов в отдельную таблицу. Но вот сегодня я подумал... А ведь селекты используют эти поля в условии, а значит при джоине с новой таблицей результат окажется тот же (не будет доступа к таблице во время апдейтов), не так ли?


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#35 19.03.2008 12:54:52

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Торможение MyISAM при вставке/обновлении

Если вы априори не знаете что нужно выполнять UPDATE или INSERT, то использование REPLACE уместно.

Хорошо было бы разнести SELECT и UPDATE по разным таблицам. Если JOIN все равно использует другую таблицу, то польза от разделения ограничена.

Вам точно не поможет Innodb?

Неактивен

 

#36 19.03.2008 13:18:59

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Торможение MyISAM при вставке/обновлении

rgbeast написал:

Если вы априори не знаете что нужно выполнять UPDATE или INSERT, то использование REPLACE уместно.

В том-то и дело, что нужно будет сначала селект сделать, чтобы понять что нужно делать в дальнейшем - обновлять или вставлять. Ок, с этим понятно.

rgbeast написал:

Хорошо было бы разнести SELECT и UPDATE по разным таблицам. Если JOIN все равно использует другую таблицу, то польза от разделения ограничена.

Вот я тоже так подумал, ибо та таблица тоже может висеть.

Хотя вообще я разобрался с теми жёсткими апдейтами. Как оказалось, причина была на столько примитивна, что я даже не мог о ней предположить - в условии WHERE на первом месте использовались не проиндексированные поля sad Добавил индексы и за прошедшую ночь особого падения производительности не наблюдалось. По статистике за 20 часов работы сервера поступало 500 запросов в секунду, а проект работалд вполне вменяемо.

rgbeast написал:

Вам точно не поможет Innodb?

Главный минус InnoDB в чём? По-моему в более медленных селектах. По статистике, указанной выше, видно, что у меня сейчас селектов в 20 раз меньше, чем записей. Но проект доступен в сети всего одну неделю и уже сейчас имеет 500 хостов в день smile Естественно, это только начало, дальше посетителей будет всё больше и больше, потому и критична скорость выборки smile

Спасибо Вам за разъяснения и помощь в общем, такого ресурса я ждал в рунете много лет, и вот, он наконец-то появился smile


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#37 19.03.2008 13:52:39

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Торможение MyISAM при вставке/обновлении

Спасибо за добрые слова smile

В Innodb SELECTы медленнее на холостом ходу. Если же есть апдейты, то SELECTы могут работать быстрее, так как не будут ждать, пока UPDATE разблокирует таблицу (в случае, если UPDATE использует ключ в WHERE блокируется только диапазон строк по ключу, если нет - блокируется вся таблица, как и в MyISAM). Если количество апдейтов у Вас не вырастет, то MyISAM, вероятно, правильный выбор.

Неактивен

 

#38 20.03.2008 11:33:46

mche
Участник
Зарегистрирован: 20.03.2008
Сообщений: 1

Re: Торможение MyISAM при вставке/обновлении

rgbeast написал:

варианты
1. запустить два mysqld на одной машине на разных портах и настроить репликацию - учитывайте, что она не будет синхронной, UPDATE слейва будет запаздывать и, кроме того, все UPDATE будут выполняться на обоих серверах

Могли бы разьяснить ситуацию с этим пуктом? Вот эти апдэйты на одной машине не сильно затупят сервер?
Хотим запустить слэйв с минимальным конфигом для "быстрых" бэкапов и с возможностью переключения на него мастера в случае чего.

Неактивен

 

#39 20.03.2008 20:49:13

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Торможение MyISAM при вставке/обновлении

Могли бы разьяснить ситуацию с этим пуктом? Вот эти апдэйты на одной машине не сильно затупят сервер?
Хотим запустить слэйв с минимальным конфигом для "быстрых" бэкапов и с возможностью переключения на него мастера в случае чего.

В идеале двухъядерная машина с двумя хардами (без RAID). Второй mysqld юзает базы на втором харде. Если нет, то это нагрузка на тот же проц и на тот же хард - если есть запас производительности, то почему бы и нет.

Неактивен

 

#40 21.05.2008 13:08:38

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: Торможение MyISAM при вставке/обновлении

Ребята, нада снова хелп smile разделили мы имеющуюся MyISAM таблицу на 2 InnoDB и 1 MyISAM. В запросах участвуют только первые две, тестирую производительность.

Без нагрузки запрос выполняется достаточно быстро - 1-1.5 секунды. В запросе джоинятся эти две таблички. Но вот повесил сейчас 10 потоков апдейтов на эти две таблицы и всё, время запроса в глубокой трещине - 50-130 секунд с теми же параметрами. На данный момент первая таблица имеет около 7к записей, а вторая около 1.7млн записей, что не так много для таких тормозов.

Подскажите, куда копать? Конфиги InnoDB не трогал и более того, в глаза не видел))


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#41 21.05.2008 14:04:55

EugeneTM
Гуру
Зарегистрирован: 11.04.2008
Сообщений: 89

Re: Торможение MyISAM при вставке/обновлении

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson