Zoptymalizowanie standardowych statystyk PHP-Fusion (Aktualnie online)
|
Gutek1806 |
Dodany dnia 02.10.2010 14:48:02
|

Przedszkolak

Postów: 65 Pomógł: 3
Data rejestracji: 08.07.2009 23:19
|
Witam korzystam z PHP-Fusion v7.00.07 i mój problem jest nast?puj?cy przy w??czonych standardowych statystykach strony obci??enie procentowe procesora samym tylko procesem mysql waha si? pomi?dzy 50-120% co spowalnia prac? innych stron umieszczonych na tym samym serwerze. Próbowa?em odchudzi? statystyki na w?asn? r?k?, ale niestety ja si? na tym nie znam i obci??enie si? nie zmienia. Adres strony to www.ls-world.pl, licz? na Wasz? pomoc.
Poni?ej dane, które mog? by? pomocne.
Odwiedziny:
- ?rednio: 23000
- rekord: 30150
Ods?ony:
- ?rednio: 170000
- rekord: 273909
Ilo?? osób przebywaj?cych jednocze?nie na portalu:
- ?rednio: 180-200
- godziny szczytu: 250+
- rekord: 605
Zu?ycie transferu:
- wrzesie? 2010: ~ 380 GB
Edytowane przez Pieka dnia 02.10.2010 16:29:38
|
|
|
|
W?cibski Go?? |
Dodany dnia 06.09.2025 14:37:52
|
Pan Kontekstualny
Postów: n^x
Data rejestracji: Zawsze
|
|
IP: localhost |
|
|
bartek124 |
Dodany dnia 02.10.2010 16:06:12
|

Weteran

Postów: 3264 Pomógł: 236
v7.02.06 Data rejestracji: 26.05.2007 12:25
|
Których standardowych statystyk, bo nie ?apie?
Nie pomagam na komunikatorach oraz PW!
|
|
|
|
Pieka |
Dodany dnia 02.10.2010 16:15:02
|


Postów: 19887 Pomógł: 767
v7.02.03 Data rejestracji: 23.02.2005 18:12
|
bartek124 napisa?/a:
Których standardowych statystyk, bo nie ?apie?
Chodzi o statystyki odwiedzin, nowych uzytkowikow etc., umieszczone w bocznym panelu (Aktualnie online).
Pieka dodał/a następującą grafikę:
Jestem jaki jestem 
|
|
|
|
bartek124 |
Dodany dnia 02.10.2010 19:36:59
|

Weteran

Postów: 3264 Pomógł: 236
v7.02.06 Data rejestracji: 26.05.2007 12:25
|
Usu? z bazy tabel? prefix_online, a nast?pnie w PHPMyAdmin wykonaj zapytanie:
GeSHi: MySQL KEY `online_lastactive` (`online_lastactive`)
Zinterpretowano w sekund: 0.008, wykorzystano GeSHi 1.0.8.10
Oczywi?cie wcze?niej wpisz swój prefix tabel do zapytania!
Teraz podmie? zawarto?? pliku infusions/online_users_panel/online_users_panel.php na nast?puj?c?:
<?php
/*-------------------------------------------------------+
| PHP-Fusion Content Management System
| Copyright ? 2002 - 2007 Nick Jones
| http://www.php-fusion.co.uk/
+--------------------------------------------------------+
| Filename: online_users_panel.php
| Author: Nick Jones (Digitanium)
| Co-Author: bartek124
+--------------------------------------------------------+
| This program is released as free software under the
| Affero GPL license. You can redistribute it and/or
| modify it under the terms of this license which you
| can read by viewing the included agpl.txt or online
| at http://www.gnu.org/licenses/agpl.html. Removal of this
| copyright header is strictly prohibited without
| written permission from the original author(s).
+--------------------------------------------------------*/
if (!defined("IN_FUSION")) { die("Access Denied"); }
$user_level = $userdata['user_level'] != 0 ? $userdata['user_id'] : '0';
$result = dbcount("(online_user)", DB_ONLINE, "online_user=" . $user_level . " AND online_ip=INET_ATON('" . USER_IP . "') LIMIT 1");
if (!empty($result)) {
$result = dbquery("UPDATE ".DB_ONLINE." SET online_lastactive='".time()."' WHERE online_user=".($userdata['user_level'] != 0 ? "'".$userdata['user_id']."'" : "'0' AND online_ip=INET_ATON('".USER_IP."')")." LIMIT 1");
} else {
$result = dbquery("INSERT INTO ".DB_ONLINE." (online_user, online_ip, online_lastactive) VALUES ('".($userdata['user_level'] != 0 ? $userdata['user_id'] : "0")."', INET_ATON('".USER_IP."'), '".time()."')");
}
$result = dbquery("DELETE FROM ".DB_ONLINE." WHERE online_lastactive<".(time()-60)."");
openside($locale['global_010']);
$result = dbquery(
"SELECT ton.online_user, tu.user_name, tu.user_status FROM ".DB_ONLINE." ton
LEFT JOIN ".DB_USERS." tu ON ton.online_user=tu.user_id"
);
$guests = 0; $members = array();
while ($data = dbarray($result)) {
if ($data['online_user'] == "0") {
$guests++;
} else {
array_push($members, array($data['online_user'], $data['user_name']));
}
}
echo THEME_BULLET." ".$locale['global_011'].": ".$guests."<br /><br />\n";
echo THEME_BULLET." ".$locale['global_012'].": ".count($members)."<br />\n";
if (count($members)) {
$i = 1;
while (list($key, $member) = each($members)) {
echo "<a href='".BASEDIR."profile.php?lookup=".$member[0]."' class='side'>".$member[1]."</a>";
if ($i != count($members)) { echo ",\n"; } else { echo "<br />\n"; }
$i++;
}
}
echo "<br />\n".THEME_BULLET." ".$locale['global_014'].": ".number_format(dbcount("(user_id)", DB_USERS, "user_status<='1' LIMIT 1"))."<br />\n";
if (iADMIN && checkrights("M") && $settings['admin_activation'] == "1") {
echo THEME_BULLET." <a href='".ADMIN."members.php".$aidlink."&status=2' class='side'>".$locale['global_015']."</a>";
echo ": ".dbcount("(user_id)", DB_USERS, "user_status='2'")."<br />\n";
}
$data = dbarray(dbquery("SELECT user_id, user_name, user_status FROM ".DB_USERS." WHERE user_status='0' ORDER BY user_joined DESC LIMIT 1"));
echo THEME_BULLET." ".$locale['global_016'].": <a href='".BASEDIR."profile.php?lookup=".$data['user_id']."' class='side'>".$data['user_name']."</a>\n";
closeside();
?>
Tyle obecnie mog? zrobi?. Przeprowad? kilka testów i daj zna?, jak wyniki. Je?li Ci? nie zadowol?, b?dziemy próbowa? dalej :)
Edytowane przez bartek124 dnia 02.10.2010 19:53:44
Nie pomagam na komunikatorach oraz PW!
|
|
|
|
Gutek1806 |
Dodany dnia 02.10.2010 20:33:07
|

Przedszkolak

Postów: 65 Pomógł: 3
Data rejestracji: 08.07.2009 23:19
|
Zastosowa?em wszystko co napisa? bartek124 i obci??enie zmniejszy?o si? minimalnie, ale problem jest nadal, w praktyce nic to nie da?o.
|
|
|
|
bartek124 |
Dodany dnia 02.10.2010 20:38:08
|

Weteran

Postów: 3264 Pomógł: 236
v7.02.06 Data rejestracji: 26.05.2007 12:25
|
Widzia?em serwis gdy by? w??czony panel. ~150 zalogowanych u?ytkowników wtedy. To jest jedna z tych sekcji strony, w której cache si? w ogóle nie przyda, wi?c musimy my?le? dalej.
Swoj? drog?, a jak wygl?daj? statystyki bez tego panela? Bo zdaje mi si? ?e i ca?y serwis potrzebuje optymalizacji, przy takim ruchu.
Nie pomagam na komunikatorach oraz PW!
|
|
|
|
Gutek1806 |
Dodany dnia 02.10.2010 20:46:12
|

Przedszkolak

Postów: 65 Pomógł: 3
Data rejestracji: 08.07.2009 23:19
|
Obci??enie procentowe procesora samym tylko procesem mysql W granicach 2-12%.
|
|
|
|
Pieka |
Dodany dnia 02.10.2010 20:52:02
|


Postów: 19887 Pomógł: 767
v7.02.03 Data rejestracji: 23.02.2005 18:12
|
Nie Bartku, tylko te statystyki generuja obciazenie procesora na poziomie 60-120% procesem mysql. Po wylaczeniu wszystko wraca do normy. Inne procesy nie stanowia problemu. Standardowo LA wynosi 0.8, a w godzinach szczytu 1.5.
Jestem jaki jestem 
|
|
|
|
bartek124 |
Dodany dnia 02.10.2010 21:50:30
|

Weteran

Postów: 3264 Pomógł: 236
v7.02.06 Data rejestracji: 26.05.2007 12:25
|
Skombinowa?em jeszcze taki kodzik:
<?php
/*-------------------------------------------------------+
| PHP-Fusion Content Management System
| Copyright ? 2002 - 2007 Nick Jones
| http://www.php-fusion.co.uk/
+--------------------------------------------------------+
| Filename: online_users_panel.php
| Author: Nick Jones (Digitanium)
| Co-Author: bartek124
+--------------------------------------------------------+
| This program is released as free software under the
| Affero GPL license. You can redistribute it and/or
| modify it under the terms of this license which you
| can read by viewing the included agpl.txt or online
| at http://www.gnu.org/licenses/agpl.html. Removal of this
| copyright header is strictly prohibited without
| written permission from the original author(s).
+--------------------------------------------------------*/
if (!defined("IN_FUSION")) { die("Access Denied"); }
$user_level = isset($userdata['user_level']) && $userdata['user_level'] != 0 ? $userdata['user_id'] : '0';
//$result = dbcount("(online_user)", DB_ONLINE, "online_user=" . $user_level . " AND online_ip=INET_ATON('" . USER_IP . "') LIMIT 1");
$time = time();
if (isset($_COOKIE['online_user']) && isnum($_COOKIE['online_user'])) {
if (($time - $_COOKIE['online_user']) >= 45) {
$result = dbquery("UPDATE ".DB_ONLINE." SET online_lastactive='".$time."' WHERE online_user='".$user_level."' AND online_ip=INET_ATON('".USER_IP."') LIMIT 1");
}
} else {
$result = dbquery("INSERT INTO ".DB_ONLINE." (online_user, online_ip, online_lastactive) VALUES ('".$user_level."', INET_ATON('".USER_IP."'), '".$time."')");
}
setcookie('online_user', $time, $time+45);
$result = dbquery("DELETE FROM ".DB_ONLINE." WHERE online_lastactive<".($time-60)."");
openside($locale['global_010']);
$result = dbquery(
"SELECT ton.online_user, tu.user_name, tu.user_status FROM ".DB_ONLINE." ton
LEFT JOIN ".DB_USERS." tu ON ton.online_user=tu.user_id"
);
$guests = 0; $members = array();
while ($data = dbarray($result)) {
if ($data['online_user'] == '0') {
$guests++;
} else {
$members[$data['online_user']] = $data;
}
}
$count_members = count($members);
echo THEME_BULLET." ".$locale['global_011'].": ".$guests."<br /><br />\n";
echo THEME_BULLET." ".$locale['global_012'].": ".$count_members."<br />\n";
if ($count_members > 0) {
$i = 1;
foreach ($members as $data) {
echo "<a href='".BASEDIR."profile.php?lookup=".$data['online_user']."' class='side'>".$data['user_name']."</a>";
echo ($i != $count_members ? ", " : "<br />");
$i++;
}
}
unset($members, $count_members);
echo "<br />\n".THEME_BULLET." ".$locale['global_014'].": ".number_format(dbcount("(user_id)", DB_USERS, "user_status<='1' LIMIT 1"))."<br />\n";
if (iADMIN && checkrights("M") && $settings['admin_activation'] == "1") {
echo THEME_BULLET." <a href='".ADMIN."members.php".$aidlink."&status=2' class='side'>".$locale['global_015']."</a>";
echo ": ".dbcount("(user_id)", DB_USERS, "user_status='2'")."<br />\n";
}
$data = dbarray(dbquery("SELECT user_id, user_name, user_status FROM ".DB_USERS." WHERE user_status='0' ORDER BY user_joined DESC LIMIT 1"));
echo THEME_BULLET." ".$locale['global_016'].": <a href='".BASEDIR."profile.php?lookup=".$data['user_id']."' class='side'>".$data['user_name']."</a>\n";
closeside();
?>
Sprawd? go, oczywi?cie razem z modyfikacj? tabeli prefix_online z pierwszego postu.
Pozby?em si? ca?kowicie jednego zapytania oraz drugiego cz??ciowo (wykonuje si? rzadziej ni? raz na 45 sekund).
Zobaczymy, co z tego wyjdzie.
Edytowane przez bartek124 dnia 02.10.2010 22:03:20
Nie pomagam na komunikatorach oraz PW!
|
|
|
|
eldiablo |
Dodany dnia 02.10.2010 22:17:20
|

Bywalec

Postów: 671 Pomógł: 80
Data rejestracji: 13.07.2009 19:20
|
@Gutek1806 zawsze mo?esz podpi?? zewn?trzny widget "online", np: ten z którego korzysta toolbar wibiya. Albo ca?kowicie panel online po?egna?, je?eli szukasz oszcz?dno?ci w zasobach. Lub zostawi? jedynie u?ytkownicy online, a go?ci bye bye.  |
|
|
|
Gutek1806 |
Dodany dnia 02.10.2010 22:33:29
|

Przedszkolak

Postów: 65 Pomógł: 3
Data rejestracji: 08.07.2009 23:19
|
bartek124 teraz nie mog? do ko?ca sprawdzi? czy pomog?o bo ilo?? osób online jest du?o mniejsza ale obliczaj?c tak procentowo wychodzi na to ?e nie bardzo pomog?o.
eldiablo no w?a?nie chcia?bym tego unikn??.
|
|
|
|
bartek124 |
Dodany dnia 02.10.2010 23:11:15
|

Weteran

Postów: 3264 Pomógł: 236
v7.02.06 Data rejestracji: 26.05.2007 12:25
|
Ok, ostatnia próba na dzisiaj, pomys?y mi si? ko?cz?.
Usu? poprzedni? tabel? prefix_online, a nast?pnie wykonaj zapytanie w PHPMyAdmin:
CREATE TABLE `prefix_online` (
`online_user` mediumint(8) unsigned NOT NULL DEFAULT '0',
`user_name` varchar(30) NOT NULL DEFAULT '',
`user_status` tinyint(1) unsigned NOT NULL DEFAULT '0',
`online_ip` int(10) unsigned NOT NULL DEFAULT '0',
`online_lastactive` int(10) unsigned NOT NULL DEFAULT '0',
KEY `online_lastactive` (`online_lastactive`),
KEY `online_user` (`online_user`)
) ENGINE=MyISAM;
Pami?taj o prefixie.
Nowa zawarto?? pliku online_users_panel.php:
<?php
/*-------------------------------------------------------+
| PHP-Fusion Content Management System
| Copyright ? 2002 - 2007 Nick Jones
| http://www.php-fusion.co.uk/
+--------------------------------------------------------+
| Filename: online_users_panel.php
| Author: Nick Jones (Digitanium)
| Co-Author: bartek124
+--------------------------------------------------------+
| This program is released as free software under the
| Affero GPL license. You can redistribute it and/or
| modify it under the terms of this license which you
| can read by viewing the included agpl.txt or online
| at http://www.gnu.org/licenses/agpl.html. Removal of this
| copyright header is strictly prohibited without
| written permission from the original author(s).
+--------------------------------------------------------*/
if (!defined("IN_FUSION")) { die("Access Denied"); }
$user_level = $userdata['user_level'] != 0 ? $userdata['user_id'] : '0';
//$result = dbcount("(online_user)", DB_ONLINE, "online_user=" . $user_level . " AND online_ip=INET_ATON('" . USER_IP . "') LIMIT 1");
$time = time();
if (isset($_COOKIE['online_user']) && isnum($_COOKIE['online_user'])) {
if (($time - $_COOKIE['online_user']) >= 45) {
$result = dbquery("UPDATE ".DB_ONLINE." SET online_lastactive='".$time."' WHERE online_user='".$user_level."' AND online_ip=INET_ATON('".USER_IP."') LIMIT 1");
}
} else {
if (iMEMBER) {
$result = dbquery("INSERT INTO ".DB_ONLINE." (online_user, user_name, user_status, online_ip, online_lastactive) VALUES ('".$user_level."', '".$userdata['user_name']."', '".$userdata['user_status']."', INET_ATON('".USER_IP."'), '".$time."')");
} else {
$result = dbquery("INSERT INTO ".DB_ONLINE." (online_user, online_ip, online_lastactive) VALUES ('".$user_level."', INET_ATON('".USER_IP."'), '".$time."')");
}
}
$result = dbquery("DELETE FROM ".DB_ONLINE." WHERE online_lastactive<".($time-60)."");
setcookie('online_user', $time, $time+45);
openside($locale['global_010']);
$result = dbquery("SELECT online_user AS user_id, user_name, user_status FROM ".DB_ONLINE);
$guests = 0; $members = array();
while ($data = dbarray($result)) {
if ($data['user_id'] == '0') {
$guests++;
} else {
$members[$data['user_id']] = $data;
}
}
$count_members = count($members);
echo THEME_BULLET." ".$locale['global_011'].": ".$guests."<br /><br />\n";
echo THEME_BULLET." ".$locale['global_012'].": ".$count_members."<br />\n";
if ($count_members > 0) {
$i = 1;
foreach ($members as $data) {
echo "<a href='".BASEDIR."profile.php?lookup=".$data['user_id']."' class='side'>".$data['user_name']."</a>";
echo ($i != $count_members ? ", " : "<br />");
$i++;
}
}
unset($members, $count_members);
echo "<br />\n".THEME_BULLET." ".$locale['global_014'].": ".number_format(dbcount("(user_id)", DB_USERS, "user_status<='1' LIMIT 1"))."<br />\n";
if (iADMIN && checkrights("M") && $settings['admin_activation'] == "1") {
echo THEME_BULLET." <a href='".ADMIN."members.php".$aidlink."&status=2' class='side'>".$locale['global_015']."</a>";
echo ": ".dbcount("(user_id)", DB_USERS, "user_status='2'")."<br />\n";
}
$data = dbarray(dbquery("SELECT user_id, user_name, user_status FROM ".DB_USERS." WHERE user_status='0' ORDER BY user_joined DESC LIMIT 1"));
echo THEME_BULLET." ".$locale['global_016'].": <a href='".BASEDIR."profile.php?lookup=".$data['user_id']."' class='side'>".$data['user_name']."</a>\n";
closeside();
?>
Edytowane przez bartek124 dnia 02.10.2010 23:11:31
Nie pomagam na komunikatorach oraz PW!
|
|
|
|
Gutek1806 |
Dodany dnia 03.10.2010 12:47:55
|

Przedszkolak

Postów: 65 Pomógł: 3
Data rejestracji: 08.07.2009 23:19
|
Nic nie pomog?o, obci??enie nadal jest tak du?e.
|
|
|
|
pajoman22 |
Dodany dnia 03.10.2010 13:10:11
|

Przedszkolak

Postów: 42 Pomógł: 6 Ostrzeżeń: 2
Data rejestracji: 17.02.2010 21:09
|
Mo?e zainteresuj si? tym http://whos.amung...
|
|
|
|
bartek124 |
Dodany dnia 03.10.2010 13:12:34
|

Weteran

Postów: 3264 Pomógł: 236
v7.02.06 Data rejestracji: 26.05.2007 12:25
|
Tego typu widgety to ?adne zamienniki. Chodzi o optymalizacj? kodu PHP-Fusion.
Nie pomagam na komunikatorach oraz PW!
|
|
|
|
Pieka |
Dodany dnia 03.10.2010 13:30:30
|


Postów: 19887 Pomógł: 767
v7.02.03 Data rejestracji: 23.02.2005 18:12
|
Dokladnie. Tu nie chodzi o jakies atrapy, tylko o poprawe wydajnosci kodu, ktory jak widac przy bardzo obleganej stronie obciazajac baze katuje moim zdaniem bardzo wydajny procesor. Trzeba to jak najszybciej poprawic.
Jestem jaki jestem 
|
|
|
|
Gutek1806 |
Dodany dnia 06.10.2010 16:26:15
|

Przedszkolak

Postów: 65 Pomógł: 3
Data rejestracji: 08.07.2009 23:19
|
Co zrobi? z pif_global_cache.php bo jak doda?em do g?ównego folderu to zamiast panelu wy?wietla si? Access Denied
|
|
|
|
Pieka |
Dodany dnia 06.10.2010 16:28:41
|


Postów: 19887 Pomógł: 767
v7.02.03 Data rejestracji: 23.02.2005 18:12
|
Z tego, co widac w pliku wymagana jest wtyczka Pimped Fusion, bez tego nie ruszy.
A wywala poniewaz jest wpis zabezpieczajacy:
if (!defined("PIMPED_FUSION")) { die("Access Denied"); }
Jestem jaki jestem 
|
|
|
|
Gutek1806 |
Dodany dnia 06.10.2010 20:45:27
|

Przedszkolak

Postów: 65 Pomógł: 3
Data rejestracji: 08.07.2009 23:19
|
Teraz wywala b??dy
Warning: array_key_exists() [function.array-key-exists]: The second argument should be either an array or an object in /home/gutek1806/domains/ls-world.pl/public_html/pif_global_cache.php on line 39
· Go?ci online: 31
· U?ytkowników online: 93
Fatal error: Call to undefined function profile_link() in /home/gutek1806/domains/ls-world.pl/public_html/infusions/online_users_panel/online_users_panel.php on line 27
|
|
|
|
Gutek1806 |
Dodany dnia 07.10.2010 15:42:32
|

Przedszkolak

Postów: 65 Pomógł: 3
Data rejestracji: 08.07.2009 23:19
|
B??dów ju? nie ma, ale statystyki dla Admina wy?wietlaj? si? normalnie, lecz jak mi si? pokaza?o 16 go?ci 47 zalogowanych to ju? si? to nie zmienia, a innym wywala ca?? list?
Notice: Undefined index: hide_userprofiles in /home/gutek1806/domains/ls-world.pl/public_html/maincore.php on line 844
Admin,
|
|
|