From 6a61c46da5277473f01c6fbe3bacdcad81fee235 Mon Sep 17 00:00:00 2001 From: Florent Bruneau Date: Sat, 15 Nov 2008 21:00:57 +0100 Subject: [PATCH] Fix performance issue at session creation. Signed-off-by: Florent Bruneau --- classes/xorgsession.php | 15 ++++----------- core | 2 +- upgrade/0.9.18/05_logger.sql | 17 +++++++++++++++++ 3 files changed, 22 insertions(+), 12 deletions(-) create mode 100644 upgrade/0.9.18/05_logger.sql diff --git a/classes/xorgsession.php b/classes/xorgsession.php index 534ed86..1ce6bf7 100644 --- a/classes/xorgsession.php +++ b/classes/xorgsession.php @@ -197,25 +197,18 @@ class XorgSession extends PlSession $res = XDB::query("SELECT u.user_id AS uid, u.hruid, prenom, prenom_ini, nom, nom_ini, nom_usage, perms, promo, promo_sortie, matricule, password, FIND_IN_SET('femme', u.flags) AS femme, q.core_mail_fmt AS mail_fmt, UNIX_TIMESTAMP(q.banana_last) AS banana_last, q.watch_last, q.core_rss_hash, - FIND_IN_SET('watch', u.flags) AS watch_account, q.last_version, g.g_account_name IS NOT NULL AS googleapps + FIND_IN_SET('watch', u.flags) AS watch_account, q.last_version, g.g_account_name IS NOT NULL AS googleapps, + UNIX_TIMESTAMP(s.start) AS lastlogin, s.host FROM auth_user_md5 AS u INNER JOIN auth_user_quick AS q USING(user_id) LEFT JOIN gapps_accounts AS g ON (u.user_id = g.l_userid AND g.g_status = 'active') + LEFT JOIN logger.last_sessions AS ls ON (ls.uid = u.user_id) + LEFT JOIN logger.sessions AS s ON(s.id = ls.id) WHERE u.user_id = {?} AND u.perms IN('admin', 'user')", $uid); $sess = $res->fetchOneAssoc(); $perms = $sess['perms']; unset($sess['perms']); - // Retrieves account usage information (last login, last host). - $res = XDB::query('SELECT UNIX_TIMESTAMP(s.start) AS lastlogin, s.host - FROM logger.sessions AS s - WHERE s.uid = {?} AND s.suid = 0 - ORDER BY s.start DESC - LIMIT 1', $uid); - if ($res->numRows()) { - $sess = array_merge($sess, $res->fetchOneAssoc()); - } - // Loads the data into the real session. $_SESSION = array_merge($_SESSION, $sess); diff --git a/core b/core index 402a078..7f10bc6 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit 402a0780f42b948525fbef6db2e3c1bfe59b883d +Subproject commit 7f10bc6153e899a781fb1244c6681252b16887b2 diff --git a/upgrade/0.9.18/05_logger.sql b/upgrade/0.9.18/05_logger.sql new file mode 100644 index 0000000..c948992 --- /dev/null +++ b/upgrade/0.9.18/05_logger.sql @@ -0,0 +1,17 @@ +use logger; + +create table last_sessions ( + uid int(6) not null, + id int(6) not null, + primary key uid (uid) +); + +insert into last_sessions + select s.uid AS uid, MAX(s.id) AS id + from logger.sessions as s + where s.suid = 0 + GROUP BY s.uid; + +use x4dat; + +# vim:set syntax=mysql: -- 2.1.4