Задавайте вопросы, мы ответим
Вы не зашли.
Доброго времени суток
Помогите пожалуйста разобраться с такой проблемой
Недели две назад повторно закрыли мой сайт "за превышение максимально-допустимой нагрузки на БД". В ходе переписки с сапортом хостера единственное что удалось получить в ответ на вопрос "Что конкретно грузит базу" выдежку из логов, дословно:
| 95 | **name** | localhost | **account** | Query | 129 | FULLTEXT initialization | SELECT id, title, date, category, alt_name, flag FROM dle_post WHERE MATCH (title, short_story, full |
и пояснение что именно такие запросы и являются причиной превышения нагрузки.
У хостера следующая конфигурация:
Сервер: Localhost via UNIX socket
Версия сервера: 5.0.51a-community-log
Версия PHP: 5.2.9
Версия протокола: 10
MySQL-кодировка: UTF-8 Unicode (utf8)
Проблема возникла на DLE 7.0
Подскажите пожалуйста, гуру администрирования БД и оптимизации запросов, как устранить данную неприятность ?
Заранее спасибо, всем ответившим
Неактивен
Вообще, конечно, FAQ#10, но в данном конкретном запросе
DLE как раз не виноват. У хостера проблемы с полнотекстовым
поиском. Возможно, у него просто сильно загружена база, а
отрывается он на Вас.
Единственное, что стоит проверить, — что табличка dle_post
типа MyISAM и что есть полнотекстовый индекс на всех указанных
в запросе полях (title, short_story, full и всех остальных, которые
провайдер не написал). Если всё это есть, то тогда надо менять
провайдера.
Неактивен
Смена хостинга - безусловно выход, но вот только не хочется терять предоплаченных за хостинг денег.
paulus написал:
Единственное, что стоит проверить, — что табличка dle_post
типа MyISAM и что есть полнотекстовый индекс на всех указанных
в запросе полях (title, short_story, full и всех остальных, которые
провайдер не написал).
Зашел в phpMyAdmin, проверил указанные параметры - все так как и написано, тип - MyISAM, индексируемое, полнотекстовый индекс.
Сегодня еще нашел такую тему на офф сайте MySQL, но мне не удалось получить аналогичную ошибку в тепличных (Denwer) условиях. Насколько я понимаю это известный, причем давно, баг MySQL и на него пока еще нет фикса, или я не там копаю ?
Неактивен
Ммм, да, печально. Выглядит действительно как Ваша бага
Единственное «но»: полнотекстовый индекс в любом случае очень плохо работает
с полями в utf-8; если Вы можете себе позволить отказаться от utf-8, то, возможно,
это Вас спасет. Т.е. alter table dle_post convert to charset cp1251. Но при этом Вы
потеряете возможность добавлять туда символы, не входящие в кодировку cp1251.
Опять же, можно попробовать преобразовывать в другую кодировку unicode (ucs2),
возможно, на ней эта ошибка не проявляется. Сделайте бэкап и попробуйте, начиная
с ucs2, и, если не поможет, то cp1251.
Неактивен
paulus написал:
alter table dle_post convert to charset cp1251. Но при этом Вы
потеряете возможность добавлять туда символы, не входящие в кодировку cp1251.
Что это за символы ? всевозможные национальные алфавиты, наподобие китайского и иже с ними, если да - то отказаться от utf-8 не проблема, т.к. единственное что мне нужно - кирилица и латинский стандартный алфавит.
Тем более только что посмотрел - у меня все таблицы живут в кодировке cp1251_general_ci (точнее напротив каждой таблицы в поле "Сравнение" в phpMyAdmin - указана именно эта кодировка).
Единственное что в utf-8 это "Сопоставление соединения с MySQL - utf8_general_ci" и "MySQL-кодировка: UTF-8 Unicode (utf8)"
И самое интересное - около полугода все работало нормально, при том что посещаемость и, соответственно нагрузка на БД, были значительно выше чем в период предшествующий "закрытию". Что-то мне подсказывает что хостер сменил версию MySQL.. и баги свежей версии не заставили себя долго ждать
В общем случае ситуация "Я ничего не делал, не менял, не трогал - оно само поломалось"..
Неактивен
Если так, то, скорее всего, Вы тут уже ничего сделать не сможете. Разве что написать
ссылку на эту багу хостеру, чтобы они смотрели сами, что можно с этим сделать.
Неактивен
А что, если посоветовать хостеру сменить MySQL 5.0.51 на 5.0.45 ?
У меня пока только предположения и нет ни веских аргументов и ни четких формулировок..
Есть ли вероятность, что проблема возникла в результате обновления сервера MySQL и может разрешиться при понижении версии ?
И как это можно проверить в "домашних условиях" ?
Неактивен
Ну, советовать хостеру ничего нельзя, конечно. Можно показать им ссылку
на эту ошибку и сказать, что она у Вас и наблюдается, что Вы ни в чем не
виноваты. Соответственно, пусть они сами думают — откатывать им версию
MySQL 5.0 или наоборот обновляться до 5.1. В 5.0.83 проверил, ошибка есть.
В 5.1.37 ошибки нету.
Проверить проще всего скачав php-файл из указанной Вами ссылки (я брал
Светин вариант), отредактировав параметры подключения и запустив его.
В случае с 5.0 сценарий виснет, в случае с 5.1 — завершается успешно.
Неактивен