Discuz X2.5 終於變快
從X1.5開始研究Discuz。覺得Discuz是很好用的CMS。始終把我的網站改成Discuz X2.0 進而升級到Discuz X2.5。是磨練的開始也是美夢的開始。Discuz X2.5 為何慢! 開啟首頁要20 secs. 第2次 refresh 只要 0.023sec.暈!開始思考為何X2.0不會如此慢。一個網站若在5秒內沒開出來是沒法讓大眾接受的。下定決心好好面對換回去X2.0 or 繼續努力?網上搜出很多優化的帖子。伺服器端的優化有:1. Discuz方面優化: 用memcacheeacceleratorapc靜態化都是在系統端優化。 將這4種建議方式安裝後。仍不見成效。2.Mysql 的測試:更換了版本mysql-5.0.45 mysql-5.0.96 mysql-5.1.56mysql-5.1.63mysql-5.5.25.tar.gz[*]mysql-5.6.2-labs-innodb-memcached.tar.gz
一樣慢的下場。試著將my.cnf
port = 3306
socket = /tmp/mysql.sock
skip-external-locking
skip-name-resolve
key_buffer_size = 128M
max_allowed_packet = 4M
table_open_cache = 256
sort_buffer_size = 4M
net_buffer_length = 64K
read_buffer_size = 2M
read_rnd_buffer_size = 1M
myisam_sort_buffer_size = 16M
log-error=/usr/local/mysql/log/error.log
log=/usr/local/mysql/log/mysql.log
long_query_time=2
log-slow-queries=/usr/local/mysql/log/slowquery.log...../usr/local/mysql/bin/mysqld, Version: 5.5.25-log (Source distribution). started with:
Tcp port: 3306Unix socket: /tmp/mysql.sock
Time Id Command Argument
120612 16:12:50 1 Connect root@127.0.0.1 on
1 Query SET character_set_connection=utf8, character_set_results=utf8, character_set_client=binary,sql_mode=''
1 Init DB my20
1 Query SELECT * FROM pre_common_session WHERE `sid`='8s705S'
1 Query SELECT * FROM pre_common_cron WHERE available>'0' AND nextrun<='1339488770' ORDER BY nextrun LIMIT 1
1 Query UPDATEpre_common_cron SET `lastrun`='1339488770' , `nextrun`='1339491600' WHERE `cronid`='6'
1 Query SELECT * FROM pre_forum_threadmod WHERE expiration>0 AND expiration<1339488770 AND status=1
1 Query SELECT * FROM pre_common_cron WHERE available>'0' ORDER BY nextrun LIMIT 1
1 Query REPLACE INTO pre_common_syscache SET `cname`='cronnextrun' , `ctype`='0' , `dateline`='1339488770' , `data`='1339488000'
1 Query SELECT * FROM pre_common_block_item WHERE `bid` IN('320','321','309','317','234','313','279','235','247','308','315','319','246','304','262','249','
1 Query SELECT * FROM pre_common_block WHERE `bid` IN('320','321','309','317','234','313','279','235','247','308','315','319','246','304','262','249','252',
1 Query SELECT * FROM pre_common_block_style WHERE `styleid` IN('134','116','128','113','120','135','119','140','124','125','123','115','141','122','143','1
1 Query UPDATEpre_common_block_item SET `makethumb`='2' WHERE `itemid`='1'
120612 16:13:10 1 Query UPDATEpre_common_block_item SET `makethumb`='2' WHERE `itemid`='1'
1 Query DELETE FROM pre_common_session WHEREsid='TZ67S8'OR lastactivity<1339487890OR (uid='0' AND ip1='180' AND ip2='168' AND ip3='163' AND ip4='250'
1 Query INSERT INTO pre_common_session SET `sid`='TZ67S8' , `ip1`='180' , `ip2`='168' , `ip3`='163' , `ip4`='250' , `uid`='0' , `username`='' , `groupid`='7
1 Query UPDATEpre_common_block SET `dateline`='1339488770' WHERE `bid`='247'
1 Query SELECT * FROM pre_common_block_item_data WHERE `bid`='247' AND isverified=1 ORDER BY stickgrade DESC, verifiedtime DESC, dataid DESCLIMIT 5
1 Query SELECT at.*, ac.viewnum, ac.commentnum FROM pre_portal_article_title at LEFT JOIN pre_portal_article_count ac ON at.aid=ac.aid WHERE at.status='0' O
1 Query SELECT * FROM pre_common_block_item WHERE `bid`='247' ORDER BY displayorder, itemtype DESC
1 Quit
2 Connect root@127.0.0.1 on
2 Query SET character_set_connection=utf8, character_set_results=utf8, character_set_client=binary,sql_mode=''
2 Init DB my20
2 Query SELECT * FROM pre_common_session WHERE `sid`='TZ67S8'
2 Query SELECT * FROM pre_common_cron WHERE available>'0' AND nextrun<='1339488790' ORDER BY nextrun LIMIT 1
2 Query UPDATEpre_common_cron SET `lastrun`='1339488790' , `nextrun`='1339489800' WHERE `cronid`='15'
2 Query SELECT * FROM pre_common_cron WHERE available>'0' ORDER BY nextrun LIMIT 1
2 Query REPLACE INTO pre_common_syscache SET `cname`='cronnextrun' , `ctype`='0' , `dateline`='1339488790' , `data`='1339489800'
2 Query SELECT * FROM pre_common_mailcron WHERE sendtime<=1339488790 ORDER BY sendtimeLIMIT 1
2 Quit
120612 16:13:11 3 Connect root@127.0.0.1 on
3.最後想或許問題在IO 就將linux 伺服器劃出1G Ram來模擬 RamDisk 。將 mysqldata 與網站所有程式移到Ramdisk。Ramdisk速度約為Raid0 的10倍速。所有最好環境都用上。仍不見起色。莫非這是天意!本人研究八字八卦風水也20多年,學linux 也14年。我看需要起個卦來問八卦祖師與諸賢聖。還是先靜靜思考問題。決定先用-奇門遁甲的招數。將慢的部分放在後面refresh 一次。在網站前面放個靜態.html. 刷好在跳轉到discuz X2.5。一般User是看不出來。所以會很快。這就是戲法人人會變巧妙各有不同。
---4.還是從根本好好學習 DiscuzX2.5的程式. 安裝了 phpxref-0.7.1.tar.gz後就好好從基礎開始學。 在 /source/class/db/db_driver_mysql.php
...
function _dbconnect($dbhost, $dbuser, $dbpw, $dbcharset, $dbname, $pconnect, $halt = true) {
<span style="color: DarkOrchid;">echo 'Begin-'.date('Y-m-d H:i:s') .'
';</span>
...
$serverset && mysql_query("SET $serverset", $link);
$dbname && @mysql_select_db($dbname, $link);
<span style="color: Purple;">echo '
'. $dbname. '-'. date('Y-m-d H:i:s'); // exit;</span>
...
public function query($sql, $silent = false, $unbuffered = false) {
if(defined('DISCUZ_DEBUG') && DISCUZ_DEBUG) {
$starttime = microtime(true);
}
if('UNBUFFERED' === $silent) {
$silent = false;
$unbuffered = true;
} elseif('SILENT' === $silent) {
$silent = true;
$unbuffered = false;
}
$func = $unbuffered ? 'mysql_unbuffered_query' : 'mysql_query';
<span style="color: Purple;">echo '
'.date('Y-m-d H:i:s') .' begin-('. $func. ')-'.$sql.'-' ;</span>
if(!($query = $func($sql, $this->curlink))) {
if(in_array($this->errno(), array(2006, 2013)) && substr($silent, 0, 5) != 'RETRY') {
<span style="color: Purple;">echo '
'.date('Y-m-d H:i:s') .' Retry-2006-2013-('. $func. ')-'.$sql.'-' ;</span>
$this->connect();
return $this->query($sql, 'RETRY'.$silent);
}
if(!$silent) {
$this->halt($this->error(), $this->errno(), $sql);
}
}
if(defined('DISCUZ_DEBUG') && DISCUZ_DEBUG) {
$this->sqldebug[] = array($sql, number_format((microtime(true) - $starttime), 6), debug_backtrace(), $this->curlink);
}
$this->querynum++;
return $query;
---Begin-2012-06-13 02:31:22
ver=5.5.25-log2012-06-13 02:31:22
my20-2012-06-13 02:31:22
2012-06-13 02:31:22 begin-(mysql_query)-SELECT * FROM pre_common_session WHERE `sid`='0yQa1z'-
2012-06-13 02:31:22 begin-(mysql_query)-SELECT * FROM pre_common_cron WHERE available>'0' AND nextrun<='1339554682' ORDER BY nextrun LIMIT 1-
2012-06-13 02:31:22 begin-(mysql_query)-UPDATE pre_common_cron SET `lastrun`='1339554682' , `nextrun`='1339611720' WHERE `cronid`='14'-
2012-06-13 02:31:22 begin-(mysql_query)-SELECT serial FROM pre_common_patch ORDER BY serial DESC LIMIT 1-
2012-06-13 02:31:22 begin-(mysql_query)-UPDATE pre_common_patch SET `status`='1' WHERE `serial`<='25000002'-
2012-06-13 02:31:22 begin-(mysql_query)-SELECT * FROM pre_common_cron WHERE available>'0' ORDER BY nextrun LIMIT 1-
2012-06-13 02:31:22 begin-(mysql_unbuffered_query)-REPLACE INTO pre_common_syscache SET `cname`='cronnextrun' , `ctype`='0' , `dateline`='1339554682' , `data`='1339527600'-
2012-06-13 10:31:22 begin-(mysql_query)-SELECT * FROM pre_common_block_style WHERE `styleid` IN('115')-
2012-06-13 10:31:22 begin-(mysql_query)-SELECT * FROM pre_common_block_item WHERE `bid` IN('246','268')-
2012-06-13 10:31:22 begin-(mysql_query)-SELECT * FROM pre_common_block WHERE `bid` IN('246','268')-
2012-06-13 10:31:22 begin-(mysql_query)-SELECT * FROM pre_common_block_style WHERE `styleid` IN('120')-
2012-06-13 10:31:42 begin-(mysql_query)-UPDATE pre_common_session SET `sid`='0yQa1z' , `ip1`='180' , `ip2`='168' , `ip3`='163' , `ip4`='250' , `uid`='0' , `username`='' , `groupid`='7' , `invisible`='0' , `action`='4' , `lastactivity`='1339554259' , `lastolupdate`='0' , `fid`='0' , `tid`='0' WHERE `sid`='0yQa1z'-
回頂部
2012-06-13 10:31:42 begin-(mysql_query)-UPDATE pre_common_block SET `dateline`='1339554682' WHERE `bid`='261'-
2012-06-13 10:31:42 begin-(mysql_query)-SELECT * FROM pre_common_block_item_data WHERE `bid`='261' AND isverified=1 ORDER BY stickgrade DESC, verifiedtime DESC, dataid DESC LIMIT 1-
2012-06-13 10:31:42 begin-(mysql_query)-SELECT typeid, name, special FROM pre_forum_threadtype WHERE special>'0'-
2012-06-13 10:31:42 begin-(mysql_query)-SELECT * FROM pre_forum_threadclass-
2012-06-13 10:31:42 begin-(mysql_query)-SELECT * FROM pre_forum_threadclass-
2012-06-13 10:31:42 begin-(mysql_query)-SELECT DISTINCT t.* FROM `pre_forum_thread` t WHERE t.readperm='0' AND t.special IN ('1') AND t.isgroup='0' AND t.displayorder>='0' ORDER BY t.lastpost DESC LIMIT 0,1;-
---終於發現第1行時間就錯誤 相差8小時 是時區問題。第16行是慢20secs的關鍵。 初步判斷discuz X2.5 慢跟時區 $this->timezone_set();有關。所以就將所有discuzX2.5 $this->timezone_set($timeoffset); $this->timezone_set(); 全改為 $this->timezone_set(8);所以速度就全靠網速與品質了。 謝天謝地!走了一大圈學習了新技術。往往逆境是突破最好的時機!感恩discuz X2.5 團隊的貢獻。
---
页:
[1]