從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方面優化: 用memcache eaccelerator apc 靜態化都是在系統端優化。 將這4種建議方式安裝後。仍不見成效。 2.Mysql 的測試: 更換了版本 mysql-5.0.45 mysql-5.0.96 mysql-5.1.56 mysql-5.1.63 mysql-5.5.25.tar.gz - mysql-5.6.2-labs-innodb-memcached.tar.gz
一樣慢的下場。 試著將my.cnf - [mysqld]
- 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: 3306 Unix 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 UPDATE pre_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 UPDATE pre_common_block_item SET `makethumb`='2' WHERE `itemid`='1'
- 120612 16:13:10 1 Query UPDATE pre_common_block_item SET `makethumb`='2' WHERE `itemid`='1'
- 1 Query DELETE FROM pre_common_session WHERE sid='TZ67S8' OR lastactivity<1339487890 OR (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 UPDATE pre_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 DESC LIMIT 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 UPDATE pre_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 sendtime LIMIT 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 團隊的貢獻。
---
|