6ответ(ов) в теме
Preci
не в сети 5 часов
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1643
1
19:17

Столкнулся с не приятной проблемой:

Код recall/functions/shortcodes.php:

$rcl_action_users = $wpdb->get_results("
SELECT
us.ID AS user,us.user_registered AS time_action
FROM
".$wpdb->prefix."users AS us
WHERE
us.ID NOT IN (SELECT ua.user FROM ".RCL_PREF."user_action AS ua)");

Создает бешеные запросы к бд, которые там выполняются по минуте:

# Time: 150227 19:00:11
# User@Host: xxxxxxxxxxxx @ localhost []
# Query_time: 49.872164 Lock_time: 0.000054 Rows_sent: 14426 Rows_examined: 82305577
SET timestamp=1425052811;
SELECT
us.ID AS user,us.user_registered AS time_action
FROM
wp_users AS us
WHERE
us.ID NOT IN (SELECT ua.user FROM wp_rcl_user_action AS ua);

Как я понимаю этот запрос используется в функции для определения последней активности пользователя на сайте,а может и нет. В любом случае прошу помощи, из-за этой бяки лишняя нагрузка и 500-ые ошибки у пользователей

0
Андрей CS
не в сети 36 минут
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16857
2
20:48

видимо до установки плагина на сайте уже были какие пользователи, причем после установки эти пользователи так и не заходили на сайт и не оставили информации о своей активности в БД, поэтому когда через шорткод плагина идет выборка пользователей по активности он начинает выводить пользователей не по активности, а по дате регистрации, исключая при этом пользователей с активностью. Я проблем с этим запросом не наблюдал, но если у вас он отрабатывает долго, то проблему можно решить либо удалив пользователей у которых активности нет, либо прописав им последнюю активность на дату регистрации запросом в БД.
вот такой запрос проверяет есть такие пользователи на сайте и прописывает им информацию об активности, чтобы потом можно было с ней работать:

$no_action_users = $wpdb->get_results("SELECT COUNT(us.ID) FROM ".$wpdb->prefix."users AS us WHERE us.ID NOT IN (SELECT ua.user FROM ".RCL_PREF."user_action AS ua)");

		if($no_action_users){
                    $wpdb->query("
                            INSERT INTO ".RCL_PREF."user_action( user, time_action ) 
                            SELECT us.ID, us.user_registered
                            FROM ".$wpdb->prefix."users AS us
                            WHERE us.ID NOT IN ( SELECT user FROM ".RCL_PREF."user_action )
                    ");
		}

0
Preci
не в сети 5 часов
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1643
3
21:15

Выполнил, в таблице user_action записи увеличились с 5к до 22к (стало равно кол-ву пользователей)
Но в time_action им записалось 0000-00-00 00:00:00 - это нормально?

0
Андрей CS
не в сети 36 минут
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16857
4
21:17

должно было прописаться время регистрации, но нули тоже сойдут, при одинаковых значениях сортировка будет производится по идентификатору

0
Preci
не в сети 5 часов
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1643
5
21:21

Ну и отлично. Судя по времени генерации страниц, оно уменьшилось ~ на 30%. Пока посмотрю за логами, если все и правда разрешилось - будет супер.

Мне только не понятно как с Rows_examined: 82305577, который иногда был больше 100 миллионов сервер вообще держался?

0
Preci
не в сети 5 часов
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1643
6
22:44

Вообщем проблема решена, больше таких запросов по минуте нету. И сайт стал немного шустрее.

Надеюсь 500-ые ошибки были из-за этого и они то же пропадут :)

0
Тема закрыта. Публикация новых сообщений запрещена.