1. Мы продолжаем публиковать интересные статьи на тему SocialEngine 4. Одна из статей посвящена правильному выбору сервера для вашей социальной сети, а другая содержит советы по увеличению производительности платформы. Также мы добавили большую статью о пользовательских уровнях. Ознакомиться со статьями вы можете в разделе Вопросы и Ответы SocialEngine 4.
  2. Вам кажется, что ваша версия SocialEngine 4, работает медленно?

    Голосуйте. Пишите свою версию системы, железо на чем работает и количество пользователей. Будем увеличивать производительность :-) Подробнее

  3. В связи с участившимися случаями попыток продажи пользователями форума различных "сборок" коммерческих социальных платформ, обычно основанных на SocialEngine 3, вводится новое правило для форума. Запрещается создание тем или размещение в уже созданных предложений о продаже или размещение ссылок на сайты, где происходит продажа "сборок". Пользователи, которые продолжат свою коммерческую деятельность в данном направлении, будут заблокированы. Подробнее.

Логи медленных запросов, анализ и т.д.

Discussion in 'Прочая Поддержка - Help Requests' started by Adre, Mar 3, 2011.

  1. Adre Thread starter Famous member


    Offline
    • Знаменитый
    Message Count:
    370
    Likes Received:
    96
    Внесу свои 5 копеек для оптимизации SE 3.20

    И так шаги для анализа...

    Включите лог медленных запросов

    в [mysqld] секции my.cnf:

    # Минимальное время запроса, которое не будет помещено в лог.
    long_query_time=10
    # Файл в котором будут отображаться слишком долгие запросы.
    # можно использовать опцию -mysqld -log-slow-queries=file
    log-slow-queries=/var/log/mysqld/slowquery.log

    Для ведения полного лога всех запросов, нужно использовать опцию mysqld --log=allquery.log

    Через какое то N время смотри данный логи и находит....
    Беру один для пример...

    PHP:
    SELECT
                    
    `se_profilecomments`.*,
                    
    se_users.user_id,
                    
    se_users.user_username,
                    
    se_users.user_fname,
                    
    se_users.user_lname,
                    
    se_users.user_photo,

     (
    SELECT user_id FROM se_visitors WHERE visitor_user_id=se_users.user_id LIMIT 1visit,
                CASE
                  
    WHEN ((se_users.user_privacy & @SE_PRIVACY_REGISTERED) AND '1'<>0)
                    
    THEN FALSE
                  WHEN 
    ((se_users.user_privacy & @SE_PRIVACY_ANONYMOUS) AND '1'=0)
                    
    THEN FALSE
                  WHEN 
    ((se_users.user_privacy & @SE_PRIVACY_SELF) AND se_users.user_id='44')
                    
    THEN FALSE
                  WHEN 
    ((se_users.user_privacy & @SE_PRIVACY_FRIEND) AND (SELECT TRUE FROM se_friends WHERE friend_user_id1=se_users.user_id AND friend_user_id2='44' AND friend_status='1' LIMIT 1))
                    
    THEN FALSE
                  WHEN 
    ((se_users.user_privacy & @SE_PRIVACY_SUBNET) AND se_users.user_subnet_id='0')
                    
    THEN FALSE
                  WHEN 
    ((se_users.user_privacy & @SE_PRIVACY_FRIEND2) AND se_users.user_subnet_id='0' AND (SELECT TRUE FROM se_friends AS friends_primary LEFT JOIN se_friends AS friends_secondary ON friends_primary.friend_user_id2=friends_secondary.friend_user_id1 WHERE friends_primary.friend_user_id1=se_users.user_id AND friends_secondary.friend_user_id2='44' LIMIT 1))
                    
    THEN FALSE
                  
    ELSE TRUE
                END
                
    AS is_profile_private
                FROM
                    
    `se_profilecomments`
                
    LEFT JOIN
                    se_users
                ON
                    
    `se_profilecomments`.`profilecomment_authoruser_id`=se_users.user_id
                WHERE
                    
    `profilecomment_user_id`='263'
                
    ORDER BY
            
    `profilecomment_idDESC
                LIMIT
            0
    5;
    Далее открываем phpmyadmin вставляем данный запрос на исполнение и смотрим

    1. что он выводит
    2. время исполнения

    Пробуем убрать (для информации вложения), скажем

    PHP:
    ,

     (
    SELECT user_id FROM se_visitors WHERE visitor_user_id=se_users.user_id LIMIT 1visit,
                CASE
                  
    WHEN ((se_users.user_privacy & @SE_PRIVACY_REGISTERED) AND '1'<>0)
                    
    THEN FALSE
                  WHEN 
    ((se_users.user_privacy & @SE_PRIVACY_ANONYMOUS) AND '1'=0)
                    
    THEN FALSE
                  WHEN 
    ((se_users.user_privacy & @SE_PRIVACY_SELF) AND se_users.user_id='44')
                    
    THEN FALSE
                  WHEN 
    ((se_users.user_privacy & @SE_PRIVACY_FRIEND) AND (SELECT TRUE FROM se_friends WHERE friend_user_id1=se_users.user_id AND friend_user_id2='44' AND friend_status='1' LIMIT 1))
                    
    THEN FALSE
                  WHEN 
    ((se_users.user_privacy & @SE_PRIVACY_SUBNET) AND se_users.user_subnet_id='0')
                    
    THEN FALSE
                  WHEN 
    ((se_users.user_privacy & @SE_PRIVACY_FRIEND2) AND se_users.user_subnet_id='0' AND (SELECT TRUE FROM se_friends AS friends_primary LEFT JOIN se_friends AS friends_secondary ON friends_primary.friend_user_id2=friends_secondary.friend_user_id1 WHERE friends_primary.friend_user_id1=se_users.user_id AND friends_secondary.friend_user_id2='44' LIMIT 1))
                    
    THEN FALSE
                  
    ELSE TRUE
                END
                
    AS is_profile_private
    опять смотрим время выполнения. и вывод.

    Далее определяем данный запрос в каком он файле.
    скажем этот запрос делает в файле: class_comment.php

    После
    // THIS METHOD RETURNS AN ARRAY CONTAINING COMMENT INFO
    // INPUT: $start REPRESENTING THE COMMENT TO START WITH
    // $limit REPRESENTING THE NUMBER OF COMMENTS TO RETURN
    // OUTPUT: AN ARRAY OF COMMENTS

    думаю общая идея для переписывания движка понятна. Кстати заметил, что не так уж и много, что надо делать для более-менее оптимизации всего этого добра что 3.20
  2. Red Rabbit Tough member


    Offline
    Message Count:
    898
    Likes Received:
    193
    Для оптимизации его как минимум нужно переписать с нуля. А вот приводить в норму такие запросы как в примере - это не оптимизация, а ликвидация бреда разработчиков. Я так понял это проверка приватности на просмотр профиля, так вот - в это делается одним (!) запросом, в одной строке, без всяких джойнов и условий (!) в запросе. К тому же так просто убрать что-либо не получится, поскольку нужно либо переписать по кучу уму, либо обрезать функционал.
  3. Adre Thread starter Famous member


    Offline
    • Знаменитый
    Message Count:
    370
    Likes Received:
    96
    >а ликвидация бреда разработчиков

    Вполне возможно назвать это и так.

    >Я так понял это проверка приватности на просмотр профиля

    Лишь комментариев

Share This Page

All rights reserved SocEngine.ru ©