Дикая нагрузка DLE база

Тема в разделе "Базы данных", создана пользователем bigboss, 13 янв 2015.

Статус темы:
Закрыта.
Модераторы: latteo
  1. bigboss

    bigboss

    Регистр.:
    21 авг 2008
    Сообщения:
    161
    Симпатии:
    7
    Движок на ДЛЕ
    Последняя версия
    База на 1 гиг
    Процесс mysql нагружен на 200-500%
    В логах видно что повторяется:
    94 | *** | localhost | *** | Query | 1157 | Copying to tmp table | SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.t |

    как решить проблему?
     
  2. Juri

    Juri

    Заблокирован
    Регистр.:
    5 окт 2007
    Сообщения:
    1.068
    Симпатии:
    197
    следует включить отслеживание долгих запросов в конфиге мускуля, так же показать сам конфиг.
    Ну и огласить посещаемость и количество просмотренных страниц.

    Если у вас обычный хост, то стучите в саппорт, пусть выдаст данные
     
  3. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.402
    Симпатии:
    1.182
    CHAR_LENGTH затратная операция, а на большой базе - мега затратная.
    Удалите эту строку из запроса, если возможно или замените на поле p.full_story_LENGTH - его надо будет добавить в вашу табличку и заполнять при апдейте таблицы "p"
     
    Последнее редактирование: 27 янв 2015
  4. bigboss

    bigboss

    Регистр.:
    21 авг 2008
    Сообщения:
    161
    Симпатии:
    7
    а можно команду для mysql для удаления или замены? а то в мускуле не силен
     
  5. lazarevmax

    lazarevmax Создатель

    Регистр.:
    9 июн 2012
    Сообщения:
    18
    Симпатии:
    0
    у вас в логие видно часть запроса:
    SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.t

    нужно убрать часть ", CHAR_LENGTH(p.full_story) as full_story" из запроса
    и заменить на новое поле ",p.full_story_LENGTH"

    которое нужно создать в таблице через phpmyadmin либо другие менеджеры либо через запрос alter table
    и обновлять при изменении записи в таблице при сохранении поля full_story

    как то так, если скрипт не свой и в программировани не очень, думаю будет сложновато..
     
  6. bozhday

    bozhday Создатель

    Регистр.:
    15 сен 2013
    Сообщения:
    22
    Симпатии:
    18
    Полностью согласен, хотел только добавить, что для заполнения подобный полей грамотнее триггеры использовать. Значение p.full_story можно же через phpmyadmin руками изменить (например, это сделает ваш коллега в то время, пока вы будете в отпуске абсолютно не подозревая о ваших "маневрах") и все... информация уже биться не будет. С триггером такая штука не пройдет.
     
  7. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.402
    Симпатии:
    1.182
    Подход грамотный, правильный и, возможно, более легкий чем изучение апи cms, но если человек задаёт такие вопросы как ТС, то триггер я ему не посоветую минимум по 4м причинам:
    - он не сможет его написать;
    - не сможет добавить, если у него обычный хостинг без прав на создание процедур для таблиц;
    - при переезде между хостингами процедуры очень часто забывают на старом;
    - не все автоматические бекаперы их бекапят.

    В разных темах этого форума можно найти все эти ошибки и еще кучку...
     
    bozhday нравится это.
Статус темы:
Закрыта.