Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Конец света MySql дрявое корыто, помогите исправить

67K
09 февраля 2011 года
kiki
2 / / 09.02.2011
все ппц
база накрывается
кто подскажет что делать?
в скрипте куча запросов - штук 30
как выявить вшивую овцу запрос?

как оптимизировать?
что подскажете?

вот самые длинные запросы
 
Код:
"UPDATE `userlist` SET `limit` = (SELECT COUNT(*) FROM `visitors` WHERE `where` = '$traff_where' AND DATE(datetime) = ADDDATE(DATE(NOW()),-1)) WHERE `url` = '$traff_where';"


 
Код:
"UPDATE `userlist` SET `status` = 'tested', `limit` = '0' WHERE (SELECT COUNT(*) FROM `visitors` WHERE `where` = `userlist`.`url` AND DATE(datetime) = ADDDATE(DATE(NOW()),-1)) < 3 AND `status` = 'works';"


короче по порядку выполняется примерно 30 запросов по выборке-вставке-обновлению
сверху написал самые длинные, могут ли эти дряни тормозить так что сайт становится недоступным на 1 мин???

или тормозит кучища запросов?
по идее там остальные запросы простые и должны работать мгновенно...

еще там не используются индексы так как не знаю куда их присобачить

в таблицу в сутки добавляется примерно 10 000 записей
67K
09 февраля 2011 года
kiki
2 / / 09.02.2011
я ппц в шоке
что делать???? а??????????????
385
09 февраля 2011 года
SomewherSomehow
477 / / 25.07.2004
"Ааа...моя машина не едет! В ней штук двести деталей и какая-то не работает! Вы моежете сказать какая?! Вот я тут две детали привел на которые подозреня первая "такая большая черная с непонятной загагулиной", вторая "такая маленькая серебристая с винтиками"! Я в шоке!"
Вот примерные впечатления от вашего поста.

В любой серьезной субд есть средства профилирования. Подозреваю что таковые есть и в MySQL? При помощи них, вылавливаете проблемный запрос. Если сразу непонятно почему он тормозит, то пожалуйте его сюда, с описанием таблиц (структура, индексы, кол-во записей), и описанием что он делает.
С таким описанием как дали вы, все что можно делать - это гадать на кофейной гуще. Может конечно кто-то и угадает, но рассчитывать на это - несерьезный подход. Единственное что бросилось в глаза это фраза "не используются индексы", если их нет вообще, стоит наверное их создать, если не занете что это, зачем это и "куда присобачить" - рекомендую загуглить.
И ознакомьтес с правилами форума пункт 2 о названии тем.
244
09 февраля 2011 года
UAS
2.0K / / 19.07.2006
Зачем все валить на MySQL, если на самом деле просто руки из Ж растут?
Профилируйте, смотрите в сторону оператора EXPLAIN перед SQL-запросом.
4
09 февраля 2011 года
mike
3.7K / / 01.10.2002
10000 - это просто смешно как мало :)

Включите slow_log и редактируйте запросы, стройте индексы, меняйте схему БД.

http://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html
11K
12 февраля 2011 года
xAtom
65 / / 17.01.2011
Цитата: kiki
все ппц
база накрывается
кто подскажет что делать?
в скрипте куча запросов - штук 30
как выявить вшивую овцу запрос?

как оптимизировать?
что подскажете?

вот самые длинные запросы
 
Код:
"UPDATE `userlist` SET `limit` = (SELECT COUNT(*) FROM `visitors` WHERE `where` = '$traff_where' AND DATE(datetime) = ADDDATE(DATE(NOW()),-1)) WHERE `url` = '$traff_where';"


 
Код:
"UPDATE `userlist` SET `status` = 'tested', `limit` = '0' WHERE (SELECT COUNT(*) FROM `visitors` WHERE `where` = `userlist`.`url` AND DATE(datetime) = ADDDATE(DATE(NOW()),-1)) < 3 AND `status` = 'works';"


короче по порядку выполняется примерно 30 запросов по выборке-вставке-обновлению
сверху написал самые длинные, могут ли эти дряни тормозить так что сайт становится недоступным на 1 мин???

или тормозит кучища запросов?
по идее там остальные запросы простые и должны работать мгновенно...

еще там не используются индексы так как не знаю куда их присобачить

в таблицу в сутки добавляется примерно 10 000 записей



По коду sql - видно что проектировал бд ты не аккуратно ты сравниваешь
строки в таблице `userlist` со столбцом `url` = '$traff_where';" я как понял он у тебя строковой наверное varchar(255) типа такогого, ты слышил про первичные ключи так вот для этого нужно использовать целочисленные данные а не строки для сравнния сравниваем ключи а выбираем строки плюс добавляем индекс к первичному числовому ключу так как у тебя здесь команды DML - то индексы только уменьшат скорость вставки обновлений, они во основном используются для DQL - выборки и поиска. Вот что за муть здесь:

 
Код:
(SELECT COUNT(*) FROM `visitors` WHERE `where` = '$traff_where' AND DATE(datetime) = ADDDATE(DATE(NOW()),-1))

Не проще работа с датой возложить на PHP/Perl ну то есть откуда query - ишь свои запросы. SELECT COUNT(*) FROM `visitors` WHERE `where` = '$ вот изъян, так как у тебя используется условие выборки - WHERE
то не думай что будет один запрос он будет каждый раз пробегать по всей таблице - `visitors` сравнивая столбец - `where` он у тебя ещё наверное строковой если числовой вот к этому столбцу этой таблице добавь индекс ALTER TABLE 'visitors' ADD INDEX('where'), вообще читай книг по больше и не читай понтливых книг с супер запросами они как правила всегда тормозят есть поговорка кто не может тот учит, кто может тот работает. EXPLAIN сделай запрос посмотри какие связи используются если в типе - type будет ALL, короче гугли, здесь много не скажешь качай книгу.
279
14 февраля 2011 года
bave
456 / / 07.03.2004
Нормальные люди вообще никаких запросов в скриптах не пишут.

Все вменяемые люди пользуются хранимыми процедурами.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог