Скрыть объявление
ВАШИ ПРАВА ОГРАНИЧЕНЫ!

Зарегистрируйтесь на форуме, чтобы стать полноценным участником сообщества!

Нужна помощь по оптимизацию бд

Тема в разделе "Вопросы- ответы", создана пользователем arifira1, 20 янв 2017.

20.01.17 в 21:51
26.01.17 в 19:03
20
2.111
0
  1. TopicStarter Overlay
    arifira1

    arifira1 Посетитель

    Регистрация:
    2 мар 2016
    Сообщения:
    54
    Лучших ответов:
    0
    Рейтинги:
    +12 / 0 / -0
    Привет тому, кто поможет оптимизировать запросы в БД!

    Идет дикая нагрузка по вечерам. Написал хостеру, оптимизировали как могли, но посоветовали найти программиста, который сможет наводит порядок на SQL

    11782 mysql 20 0 2625952 325572 9320 S 303.0 8.4 12:41.01 mysqld

    [20:22]
    [root@ХХХХХ ~]# w
    20:22:20 up 14 min, 1 user, load average: 24.61, 11.65, 5.67
     
  2. TopicStarter Overlay
    arifira1

    arifira1 Посетитель

    Регистрация:
    2 мар 2016
    Сообщения:
    54
    Лучших ответов:
    0
    Рейтинги:
    +12 / 0 / -0
    Вот что они написали мне

    Покажите специалисту один из SQL-запросов:

    SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story)
    as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num,
    p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating,
    e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM
    dle_post p LEFT JOIN dle_post_extras e ON (p.id=e.news_id) WHERE
    category NOT REGEXP '[[:<:]](51|53|54|55|56|57|58|59|11)[[:>:]]' AND
    approve=1 ORDER BY news_read DESC LIMIT 0,3;

    explain по нему:

    +------+-------------+-------+------+---------------+---------+---------+--------------------+-------+----------+----------------------------------------------+
    | id | select_type | table | type | possible_keys | key |
    key_len | ref | rows | filtered | Extra
    |
    +------+-------------+-------+------+---------------+---------+---------+--------------------+-------+----------+----------------------------------------------+
    | 1 | SIMPLE | p | ref | approve | approve | 1
    | const | 21274 | 100.00 | Using where; Using
    temporary; Using filesort |
    | 1 | SIMPLE | e | ref | news_id | news_id | 4
    | user.p.id | 1 | 100.00 |
    |
    +------+-------------+-------+------+---------------+---------+---------+--------------------+-------+----------+----------------------------------------------+

    REGEXP вызывает необходимость у MySQL создавать временные таблицы,
    чтобы в них потом делать поиск по регулярному выражению.
     
  3. Chingis

    Забанен

    Регистрация:
    29 сен 2015
    Сообщения:
    2.528
    Лучших ответов:
    0
    Рейтинги:
    +748 / 0 / -0
    • Нравится Нравится x 2
  4. Avenger

    Avenger Бывалый

    Регистрация:
    10 сен 2015
    Сообщения:
    356
    Лучших ответов:
    1
    Рейтинги:
    +86 / 6 / -2

    Мне кажется это у всех. Такая же байда. Я на Зомро написал в ТП они снизили запросы. Но не помогло! Может гдето дырка в нулле.
     
  5. europa1988

    europa1988 Бывалый

    Регистрация:
    24 фев 2016
    Сообщения:
    605
    Лучших ответов:
    2
    Рейтинги:
    +113 / 12 / -6
    cloudflare в помощь и сайт.ru/admin.php?mod=options&action=syscon (Оптимизация запросов к базе данных)
     
  6. Rik

    Rik
    Команда форума VIP Кинотрафик v2

    Регистрация:
    13 май 2016
    Сообщения:
    738
    Лучших ответов:
    0
    Рейтинги:
    +371 / 23 / -9
    Ты ни чего с этим не сделаешь. REGEXP в MySQL не умеет работать с индексами, поэтому такой запрос всегда делает Full scan, т. е. полный перебор таблицы. У тебя есть 3 выхода:
    1. Кешировать запрос на определенный промежуток времени
    2. Кешировать страницы
    3. Переписать запрос

    Что делать. решай сам.
     
    • Нравится Нравится x 1
  7. Intention

    Intention Местный

    Регистрация:
    15 янв 2016
    Сообщения:
    2.118
    Лучших ответов:
    0
    Рейтинги:
    +689 / 1 / -0
    HTML:
    SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story)
    as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num,
    p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating,
    e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM
    dle_post p LEFT JOIN dle_post_extras e ON (p.id=e.news_id) WHERE
    category NOT IN ('51', '53', '54', '55', '56', '57', '58', '59', '11') AND
    approve=1 ORDER BY news_read DESC LIMIT 0,3
     
  8. PunPun

    PunPun Гуру

    Регистрация:
    11 июн 2015
    Сообщения:
    7.244
    Лучших ответов:
    27
    Рейтинги:
    +3.818 / 73 / -100
    :D если в ячейке только одно значение.
     
  9. Intention

    Intention Местный

    Регистрация:
    15 янв 2016
    Сообщения:
    2.118
    Лучших ответов:
    0
    Рейтинги:
    +689 / 1 / -0
    @Gameer, Разве не аналог регэкспа?) Че я не понял?))))))))
     
  10. PunPun

    PunPun Гуру

    Регистрация:
    11 июн 2015
    Сообщения:
    7.244
    Лучших ответов:
    27
    Рейтинги:
    +3.818 / 73 / -100
    Нет, он выбирает когда целое значение в поле, когда к примеру 51,11,12 он не выберет 11
     
  11. Intention

    Intention Местный

    Регистрация:
    15 янв 2016
    Сообщения:
    2.118
    Лучших ответов:
    0
    Рейтинги:
    +689 / 1 / -0
    @Gameer, да вроде норм работает
    Screenshot_1.png Screenshot_2.png

    Все понял, да хуйня получается)))
     
  12. PunPun

    PunPun Гуру

    Регистрация:
    11 июн 2015
    Сообщения:
    7.244
    Лучших ответов:
    27
    Рейтинги:
    +3.818 / 73 / -100
    • Нравится Нравится x 1
  13. Intention

    Intention Местный

    Регистрация:
    15 янв 2016
    Сообщения:
    2.118
    Лучших ответов:
    0
    Рейтинги:
    +689 / 1 / -0
    @Gameer как вариант, можно на лайках наверно но чет как то стремно))))))))))
    HTML:
    SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story)
    
    as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num,
    p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating,
    e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM
    dle_post p LEFT JOIN dle_post_extras e ON (p.id=e.news_id) WHERE
    category NOT RLIKE '[[:<:]](51|53|54|55|56|57|58|59|11)[[:>:]]' AND
    approve=1 ORDER BY news_read DESC LIMIT 0,3
    Screenshot_1.png

    Оригинал запроса:
    Screenshot_2.png
     
  14. TopicStarter Overlay
    arifira1

    arifira1 Посетитель

    Регистрация:
    2 мар 2016
    Сообщения:
    54
    Лучших ответов:
    0
    Рейтинги:
    +12 / 0 / -0
    1-2 пункт сделал а вот 3-й как сделать?
     
  15. Rik

    Rik
    Команда форума VIP Кинотрафик v2

    Регистрация:
    13 май 2016
    Сообщения:
    738
    Лучших ответов:
    0
    Рейтинги:
    +371 / 23 / -9
    Rlike то же самое что и regexp, просто синоним.
     
  16. Rik

    Rik
    Команда форума VIP Кинотрафик v2

    Регистрация:
    13 май 2016
    Сообщения:
    738
    Лучших ответов:
    0
    Рейтинги:
    +371 / 23 / -9
    Я тебе дал направление, а как ты будешь поступать уже дело твоё.
     
  17. Mr.Twich

    Mr.Twich Новичок

    Регистрация:
    15 апр 2016
    Сообщения:
    25
    Лучших ответов:
    0
    Рейтинги:
    +1 / 0 / -0
    такая же байда была, так еще и страницы, которых не было в кэше, загружались по 40 секунд. по любому где то дыра
     
  18. TopicStarter Overlay
    arifira1

    arifira1 Посетитель

    Регистрация:
    2 мар 2016
    Сообщения:
    54
    Лучших ответов:
    0
    Рейтинги:
    +12 / 0 / -0
    а как найти эту дыру?
     
  19. Mr.Twich

    Mr.Twich Новичок

    Регистрация:
    15 апр 2016
    Сообщения:
    25
    Лучших ответов:
    0
    Рейтинги:
    +1 / 0 / -0
    хз, я просто запросы оптимизировал
     
  20. TopicStarter Overlay
    arifira1

    arifira1 Посетитель

    Регистрация:
    2 мар 2016
    Сообщения:
    54
    Лучших ответов:
    0
    Рейтинги:
    +12 / 0 / -0
    а как запросы оптимизировал?
     
Яндекс.Метрика