刚刚试着"本地环境"迁移DISCUZ到HYBBS1.4.0.6,仅仅迁移主题帖,其他都没迁移到,主题103万数据。
然后速度瞬间慢到不思议,完全不像刚开始秒开。
但是同一时间打开另一个文件夹放着的原始主题103万数据的DISCUZ开起来依然流畅。
真的能放千万级数据量? 会不会是HYBBS功能增加太多,没办法像最初的版本有千万级,1.4.0.6 无法负担这麽大量数据?
还是数据量多要经过什么设定?
645862790 发表于 2016-7-23
66666666666666666666666666666666666666
加载数据中...
admin 发表于 2016-7-23
5000千万主题
http://free.hyphp.cn/
数据库就是数据库 没有程序能真正承载什么亿千万数据 都靠静态缓存和数据库的条件设计
s80022 发表于 2016-7-23
@admin:回复 #2 5000千万主题http://free.hyphp.cn/数据库就是数据库 没有程序能真正承载什么亿千万数据 都靠静态缓存和数据库的条件设计
环境是Apache2.4+php7+Memcached+mariadb5.5(OneinStack一键包)
刚刚测试了一下,新建HYBBS 1.4.0.5按下升级1.4.0.6,全新状态的HYBBS,0 主题 页面开启相当流畅。。
然后在adminer下搬移hy_post hy_thread的一部分50多万主题 到新建立的HYBBS,
数据搬移完成后就非常严重的延迟,所以应该还是主题数据造成的。
原因已经查明
四栏插件的一个 SQL语句 存在缺陷
img[!]=>'' 该语句在大数据会造成严重的 查询时间.
如果你在测试中不使用该插件 就不会造成严重的查询时间了
yunhaibin 发表于 2016-7-23
6666666666
刚刚移除四栏插件,似乎有点效果少了一半耗时
现在运行耗时:25.7686 s
重新整理有时会降到最少12 s
可能还有地方存在问题。
但应该就不是插件,因为我试过全删插件依然耗时20多秒。
查看一下 右下角窗口 调试窗口
看一下SQL执行 哪句比较耗时
@admin全都显示0ms,但是我开好久好久....
你先修复一下 0ms的问题
/HY/HY_SQL.php
104行处
public function query($query) { if ($this->debug_mode) { echo $query; $this->debug_mode = false; return false; } array_push($this->logs, $query); $re = $this->pdo->query($query); if (C('DEBUG_PAGE')) { $a = microtime(TRUE); DEBUG_SQL::SQL_LOG($query . ' [耗时] ' . round(microtime(TRUE) - $a, 4) . 'ms'); } return $re; }
改为
public function query($query) { if ($this->debug_mode) { echo $query; $this->debug_mode = false; return false; } array_push($this->logs, $query); $a = microtime(TRUE); $re = $this->pdo->query($query); if (C('DEBUG_PAGE')) { DEBUG_SQL::SQL_LOG($query . ' [耗时] ' . round(microtime(TRUE) - $a, 4) . 'ms'); } return $re; }
接着下面的exec函数
public function exec($query) { if ($this->debug_mode) { echo $query; $this->debug_mode = false; return false; } array_push($this->logs, $query); $re = $this->pdo->exec($query); if (C('DEBUG_PAGE')) { $a = microtime(TRUE); DEBUG_SQL::SQL_LOG($query . ' [耗时] ' . round(microtime(TRUE) - $a, 4) . 'ms'); } return $re; }
public function exec($query) { if ($this->debug_mode) { echo $query; $this->debug_mode = false; return false; } array_push($this->logs, $query); $a = microtime(TRUE); $re = $this->pdo->exec($query); if (C('DEBUG_PAGE')) { DEBUG_SQL::SQL_LOG($query . ' [耗时] ' . round(microtime(TRUE) - $a, 4) . 'ms'); } return $re; }
这是我之前做耗时 的一个if 失误
@admin主题页面
SQL查询 (24)连接数据库 [耗时] 0.0113msSELECT * FROM "hy_user" WHERE "id" = '1' LIMIT 1 [耗时] 0.0005msSELECT * FROM "hy_forum" [耗时] 0.0006msSELECT * FROM "hy_usergroup" [耗时] 0.0006msSELECT COUNT(*) FROM "hy_post" [耗时] 0.0004msSELECT COUNT(*) FROM "hy_thread" [耗时] 0.0002msSELECT COUNT(*) FROM "hy_user" [耗时] 0.0002msSELECT COUNT(*) FROM "hy_thread" WHERE "atime" > 1469203200 [耗时] 1.7529msSELECT COUNT(*) FROM "hy_post" WHERE "atime" > 1469203200 [耗时] 14.1534msSELECT COUNT(*) FROM "hy_user" WHERE "atime" > 1469203200 [耗时] 0.0178msSELECT COUNT(*) FROM "hy_ol" [耗时] 0.0009msDELETE FROM "hy_ol" WHERE "atime" < 1469278469 [耗时] 0.0278msSELECT COUNT(*) FROM "hy_ol" [耗时] 0.0005msSELECT EXISTS(SELECT 1 FROM "hy_ol" WHERE "uid" = '1') [耗时] 0.0802msUPDATE "hy_ol" SET "atime" = '1469278669' WHERE "uid" = '1' [耗时] 0.0004msSELECT * FROM "hy_thread" ORDER BY "btime" DESC LIMIT 10 [耗时] 1.9981msSELECT * FROM "hy_thread" WHERE "img" != '' ORDER BY "id" DESC LIMIT 10 [耗时] 24.3555msSELECT * FROM "hy_thread" ORDER BY "posts" DESC LIMIT 10 [耗时] 3.3143msSELECT * FROM "hy_thread" WHERE "id" = 616400 LIMIT 1 [耗时] 1.1442msSELECT "user" FROM "hy_user" WHERE "id" = '1' LIMIT 1 [耗时] 0.0127msSELECT * FROM "hy_post" WHERE "tid" = 616400 AND "isthread" = 1 LIMIT 1 [耗时] 0.0174msSELECT * FROM "hy_post" WHERE "tid" = 616400 AND "isthread" = 0 ORDER BY "id" LIMIT 0,10 [耗时] 0.0007msSELECT * FROM "hy_fileinfo" WHERE "tid" = 616400 [耗时] 0.0005msSELECT EXISTS(SELECT 1 FROM "hy_post" WHERE "uid" = '1' AND "tid" = 616400) [耗时] 0.0007msUPDATE "hy_thread" SET "views" = "views" + 1 WHERE "id" = 616400 [耗时] 23.2158ms
SQL查询 (24)
连接数据库 [耗时] 0.0113ms
SELECT * FROM "hy_user" WHERE "id" = '1' LIMIT 1 [耗时] 0.0005ms
SELECT * FROM "hy_forum" [耗时] 0.0006ms
SELECT * FROM "hy_usergroup" [耗时] 0.0006ms
SELECT COUNT(*) FROM "hy_post" [耗时] 0.0004ms
SELECT COUNT(*) FROM "hy_thread" [耗时] 0.0002ms
SELECT COUNT(*) FROM "hy_user" [耗时] 0.0002ms
SELECT COUNT(*) FROM "hy_thread" WHERE "atime" > 1469203200 [耗时] 1.7529ms
SELECT COUNT(*) FROM "hy_post" WHERE "atime" > 1469203200 [耗时] 14.1534ms
SELECT COUNT(*) FROM "hy_user" WHERE "atime" > 1469203200 [耗时] 0.0178ms
SELECT COUNT(*) FROM "hy_ol" [耗时] 0.0009ms
DELETE FROM "hy_ol" WHERE "atime" < 1469278469 [耗时] 0.0278ms
SELECT COUNT(*) FROM "hy_ol" [耗时] 0.0005ms
SELECT EXISTS(SELECT 1 FROM "hy_ol" WHERE "uid" = '1') [耗时] 0.0802ms
UPDATE "hy_ol" SET "atime" = '1469278669' WHERE "uid" = '1' [耗时] 0.0004ms
SELECT * FROM "hy_thread" ORDER BY "btime" DESC LIMIT 10 [耗时] 1.9981ms
SELECT * FROM "hy_thread" WHERE "img" != '' ORDER BY "id" DESC LIMIT 10 [耗时] 24.3555ms
SELECT * FROM "hy_thread" ORDER BY "posts" DESC LIMIT 10 [耗时] 3.3143ms
SELECT * FROM "hy_thread" WHERE "id" = 616400 LIMIT 1 [耗时] 1.1442ms
SELECT "user" FROM "hy_user" WHERE "id" = '1' LIMIT 1 [耗时] 0.0127ms
SELECT * FROM "hy_post" WHERE "tid" = 616400 AND "isthread" = 1 LIMIT 1 [耗时] 0.0174ms
SELECT * FROM "hy_post" WHERE "tid" = 616400 AND "isthread" = 0 ORDER BY "id" LIMIT 0,10 [耗时] 0.0007ms
SELECT * FROM "hy_fileinfo" WHERE "tid" = 616400 [耗时] 0.0005ms
SELECT EXISTS(SELECT 1 FROM "hy_post" WHERE "uid" = '1' AND "tid" = 616400) [耗时] 0.0007ms
UPDATE "hy_thread" SET "views" = "views" + 1 WHERE "id" = 616400 [耗时] 23.2158ms
后台
(话说进后台也会跑hy_thread,hy_post表会不会有点浪费资源)
SQL查询 (18)连接数据库 [耗时] 0.0015msSELECT * FROM "hy_user" WHERE "id" = '1' LIMIT 1 [耗时] 0.0007msSELECT * FROM "hy_forum" [耗时] 0.0646msSELECT * FROM "hy_usergroup" [耗时] 0.0013msSELECT COUNT(*) FROM "hy_post" [耗时] 0.0006msSELECT COUNT(*) FROM "hy_thread" [耗时] 0.0002msSELECT COUNT(*) FROM "hy_user" [耗时] 0.0003msSELECT COUNT(*) FROM "hy_thread" WHERE "atime" > 1469203200 [耗时] 1.564msSELECT COUNT(*) FROM "hy_post" WHERE "atime" > 1469203200 [耗时] 15.597msSELECT COUNT(*) FROM "hy_user" WHERE "atime" > 1469203200 [耗时] 0.0116msSELECT COUNT(*) FROM "hy_ol" [耗时] 0.0003msDELETE FROM "hy_ol" WHERE "atime" < 1469278447 [耗时] 0.001msSELECT COUNT(*) FROM "hy_ol" [耗时] 0.0003msSELECT EXISTS(SELECT 1 FROM "hy_ol" WHERE "uid" = '1') [耗时] 0.0004msINSERT INTO "hy_ol" ("uid", "username", "ip", "group", "atime") VALUES ('1', 'admin', '1878879629', '1', '1469278647') [耗时] 0.0009msSELECT COUNT(*) FROM "hy_ol" [耗时] 0.0251msSELECT * FROM "hy_thread" ORDER BY "btime" DESC LIMIT 10 [耗时] 2.0389msSELECT * FROM "hy_thread" WHERE "img" != '' ORDER BY "id" DESC LIMIT 10 [耗时] 16.008msSELECT * FROM "hy_thread" ORDER BY "posts" DESC LIMIT 10 [耗时] 1.9007ms
SQL查询 (18)
连接数据库 [耗时] 0.0015ms
SELECT * FROM "hy_user" WHERE "id" = '1' LIMIT 1 [耗时] 0.0007ms
SELECT * FROM "hy_forum" [耗时] 0.0646ms
SELECT * FROM "hy_usergroup" [耗时] 0.0013ms
SELECT COUNT(*) FROM "hy_post" [耗时] 0.0006ms
SELECT COUNT(*) FROM "hy_user" [耗时] 0.0003ms
SELECT COUNT(*) FROM "hy_thread" WHERE "atime" > 1469203200 [耗时] 1.564ms
SELECT COUNT(*) FROM "hy_post" WHERE "atime" > 1469203200 [耗时] 15.597ms
SELECT COUNT(*) FROM "hy_user" WHERE "atime" > 1469203200 [耗时] 0.0116ms
SELECT COUNT(*) FROM "hy_ol" [耗时] 0.0003ms
DELETE FROM "hy_ol" WHERE "atime" < 1469278447 [耗时] 0.001ms
SELECT EXISTS(SELECT 1 FROM "hy_ol" WHERE "uid" = '1') [耗时] 0.0004ms
INSERT INTO "hy_ol" ("uid", "username", "ip", "group", "atime") VALUES ('1', 'admin', '1878879629', '1', '1469278647') [耗时] 0.0009ms
SELECT COUNT(*) FROM "hy_ol" [耗时] 0.0251ms
SELECT * FROM "hy_thread" ORDER BY "btime" DESC LIMIT 10 [耗时] 2.0389ms
SELECT * FROM "hy_thread" WHERE "img" != '' ORDER BY "id" DESC LIMIT 10 [耗时] 16.008ms
SELECT * FROM "hy_thread" ORDER BY "posts" DESC LIMIT 10 [耗时] 1.9007ms
按我说的 尝试增加索引:
hy_thread , hy_post , hy_user ,hy_ol 的 atime字段 增加index 索引
ht_thread 的 btime , posts 增加index索引
列表中的 img!=''消耗巨大 因为他是字符类型 这个请先关闭插件
我觉得有些SQL语法,要不要参考Carbon论坛的做法。
类似
主题>50000主题时就节约资源搜寻语法,
主题<50000就用比较进阶的搜寻语法....
先解决 索引的问题
主题搜索的问题 后期优化上去
@admin我的意思是那些语法可以用类似的方式对较多数据的用户减少整体消耗,不是单单指搜索。
(例如可以增加个判断或后台增加开关,对于百万数据的论坛,
如果某主题的View大于如十万多少,就不触发UPDATE "views" + 1 ,然后hy_thread对于超过十万的就直接改显示"形容很多"或是约略的"十万以上",毕竟每个增加views累积起来也是小负担,而且我看一下常常都0.X s以上,有时候还会突然暴增延时。。)
另外想问一下,atime是指发文时间? 可不可以提示一下修改位置可以暂时注解掉不显示看看是否会顺畅许多?
还有好像 s & ms 单位很多是错的,另外HY_SQL.php的修复好像没放入1.4.0.7更新中。
SQL查询 (19)连接数据库 [耗时] 0.0005msSELECT * FROM "hy_user" WHERE "id" = '1' LIMIT 1 [耗时] 0.0006msSELECT * FROM "hy_forum" [耗时] 0.009msSELECT * FROM "hy_usergroup" [耗时] 0.0011msSELECT COUNT(*) FROM "hy_post" [耗时] 0.0003msSELECT COUNT(*) FROM "hy_thread" [耗时] 0.0002msSELECT COUNT(*) FROM "hy_user" [耗时] 0.0004msSELECT COUNT(*) FROM "hy_thread" WHERE "atime" > 1469203200 [耗时] 1.1677msSELECT COUNT(*) FROM "hy_post" WHERE "atime" > 1469203200 [耗时] 11.686msSELECT COUNT(*) FROM "hy_user" WHERE "atime" > 1469203200 [耗时] 0.0241msSELECT COUNT(*) FROM "hy_ol" [耗时] 0.0014msDELETE FROM "hy_ol" WHERE "atime" < 1469281125 [耗时] 0.0005msSELECT COUNT(*) FROM "hy_ol" [耗时] 0.0003msSELECT * FROM "hy_thread" WHERE "id" = 620519 LIMIT 1 [耗时] 0.0255msSELECT "user" FROM "hy_user" WHERE "id" = '1' LIMIT 1 [耗时] 0.0005msSELECT * FROM "hy_post" WHERE "tid" = 620519 AND "isthread" = 1 LIMIT 1 [耗时] 0.01msSELECT * FROM "hy_post" WHERE "tid" = 620519 AND "isthread" = 0 ORDER BY "id" LIMIT 0,10 [耗时] 0.0008msSELECT * FROM "hy_fileinfo" WHERE "tid" = 620519 [耗时] 0.0343msSELECT EXISTS(SELECT 1 FROM "hy_post" WHERE "uid" = '1' AND "tid" = 620519) [耗时] 0.0021msUPDATE "hy_thread" SET "views" = "views" + 1 WHERE "id" = 620519 [耗时] 0.8899ms
SQL查询 (19)
连接数据库 [耗时] 0.0005msSELECT * FROM "hy_user" WHERE "id" = '1' LIMIT 1 [耗时] 0.0006msSELECT * FROM "hy_forum" [耗时] 0.009msSELECT * FROM "hy_usergroup" [耗时] 0.0011msSELECT COUNT(*) FROM "hy_post" [耗时] 0.0003msSELECT COUNT(*) FROM "hy_thread" [耗时] 0.0002msSELECT COUNT(*) FROM "hy_user" [耗时] 0.0004msSELECT COUNT(*) FROM "hy_thread" WHERE "atime" > 1469203200 [耗时] 1.1677msSELECT COUNT(*) FROM "hy_post" WHERE "atime" > 1469203200 [耗时] 11.686msSELECT COUNT(*) FROM "hy_user" WHERE "atime" > 1469203200 [耗时] 0.0241msSELECT COUNT(*) FROM "hy_ol" [耗时] 0.0014msDELETE FROM "hy_ol" WHERE "atime" < 1469281125 [耗时] 0.0005msSELECT COUNT(*) FROM "hy_ol" [耗时] 0.0003msSELECT * FROM "hy_thread" WHERE "id" = 620519 LIMIT 1 [耗时] 0.0255msSELECT "user" FROM "hy_user" WHERE "id" = '1' LIMIT 1 [耗时] 0.0005msSELECT * FROM "hy_post" WHERE "tid" = 620519 AND "isthread" = 1 LIMIT 1 [耗时] 0.01msSELECT * FROM "hy_post" WHERE "tid" = 620519 AND "isthread" = 0 ORDER BY "id" LIMIT 0,10 [耗时] 0.0008msSELECT * FROM "hy_fileinfo" WHERE "tid" = 620519 [耗时] 0.0343msSELECT EXISTS(SELECT 1 FROM "hy_post" WHERE "uid" = '1' AND "tid" = 620519) [耗时] 0.0021msUPDATE "hy_thread" SET "views" = "views" + 1 WHERE "id" = 620519 [耗时] 0.8899ms
连接数据库 [耗时] 0.0005ms
SELECT * FROM "hy_user" WHERE "id" = '1' LIMIT 1 [耗时] 0.0006ms
SELECT * FROM "hy_forum" [耗时] 0.009ms
SELECT * FROM "hy_usergroup" [耗时] 0.0011ms
SELECT COUNT(*) FROM "hy_post" [耗时] 0.0003ms
SELECT COUNT(*) FROM "hy_user" [耗时] 0.0004ms
SELECT COUNT(*) FROM "hy_thread" WHERE "atime" > 1469203200 [耗时] 1.1677ms
SELECT COUNT(*) FROM "hy_post" WHERE "atime" > 1469203200 [耗时] 11.686ms
SELECT COUNT(*) FROM "hy_user" WHERE "atime" > 1469203200 [耗时] 0.0241ms
SELECT COUNT(*) FROM "hy_ol" [耗时] 0.0014ms
DELETE FROM "hy_ol" WHERE "atime" < 1469281125 [耗时] 0.0005ms
SELECT * FROM "hy_thread" WHERE "id" = 620519 LIMIT 1 [耗时] 0.0255ms
SELECT "user" FROM "hy_user" WHERE "id" = '1' LIMIT 1 [耗时] 0.0005ms
SELECT * FROM "hy_post" WHERE "tid" = 620519 AND "isthread" = 1 LIMIT 1 [耗时] 0.01ms
SELECT * FROM "hy_post" WHERE "tid" = 620519 AND "isthread" = 0 ORDER BY "id" LIMIT 0,10 [耗时] 0.0008ms
SELECT * FROM "hy_fileinfo" WHERE "tid" = 620519 [耗时] 0.0343ms
SELECT EXISTS(SELECT 1 FROM "hy_post" WHERE "uid" = '1' AND "tid" = 620519) [耗时] 0.0021ms
UPDATE "hy_thread" SET "views" = "views" + 1 WHERE "id" = 620519 [耗时] 0.8899ms
ical 发表于 2016-7-23
2个牛人
@ical:回复 #5 2个牛人
update views+1 并不会很大影响
没办法 只能到达10万 就不++ 了 那何来 20万呢 其实还是得++
update 整数+1 还是很快的
论坛数据结构很多处的 atime都是指内容的插入时间 . btime 一般只 最后更新时间
intern 发表于 2016-7-24
这样的反馈才是hybbs所需要的,像我们的这样数据有限的触发不了隐藏任务
s80022 发表于 2016-7-24
解决大半了,现在"微慢"而已。
即使atime字段 增加index 索引,缓存开启的状态下atime一个依然要0.8187ms。
等于50多万笔光主题hy_post +hy_thread 就耗掉1秒多,
如再加上回复与注册依然会上升到好几秒。
一个页面要好几秒开启,显然不大符合生产应用。
不知@admin 能不能改善一下写法之类,尽量降低atime延迟。 --------------------------
admin 发表于 2016-7-24
http://free.hyphp.cn/ 解决索引后的 100万主题
@admin确实索引加进去了,也确实变快了,但是依然无法达到你的那种效果。
这个HYBB除安装BLOG模板,home插件,sitemap插件,关闭注册用户,侧边栏-增加HTML代码。
我唯一只在资料库中增加id自动递增,如图片那样,然后搬移主题数据,也没忘了索引。。
其馀都是 置顶那个完全崭新的 那个HYBBS1.4.0.8,而不是升级的。
会不会是因为我的atime都不一样。 而你的atime的unix时间戳都是"0" ? (我不懂这个,猜测..)
线上硬件测试一下吧.
这是100万主题的 atime 范围 count
在phpmyadmin中 执行 SELECT COUNT(*) FROM "hy_thread" WHERE "atime" > 1469289600
注意上面的 单位是 (微妙) (µs)
也就是说这种查询 是微乎其微的速度
因为我的数据测试时间戳用系统时间产生的。所以atime 是00:00:00后。
例如1469343600
而 "atime" > 1469289600,会COUNT出 大于 2016/7/24 00:00:00的次数。
我以系统时间戳产生了50万笔,就会++50万次,造成开启缓慢。所以修了一下
话说...加总atime>1469289600的意义在于?
我的100万数据 也是 当日生成的 时间也是0 atime时间条件也是满足 100万条的
你问的这条SQL是用于 统计当日发帖数量的
看你这张图的性能分析
Send Data 用了400多ms
这是 mysql发送到 php 传输管道的用时
首先count这是一个统计 发送的数据并不大 却用了 那么大的时间
应该是本地环境的问题!
@admin:回复 #2 线上硬件测试一下吧.
如果是为了统计不需要每次都触发,另建表储存统计资料。而统计资料可以SELECT COUNT(*) ,但不用时时刻刻吧? 就好像另一个轻论坛的就是这样做减缓消耗。 很多定时,或是点击次数每100才触发。这样就没这个问题了。。
并外可能有部分本地环境问题,因为我真的不懂my.cnf要怎么设,可能是这个影响到。还有IO可能不是很好,虽然是SSD但VirtualBox模拟出来的Centos8.
但也不是完全是本地环境问题....因为我的时间戳原本不是0...这才是改0之后的。
由于你本地开启了DEBUG模式 所以数据没被缓存
所以造成了 每次访问都会查询
@admin
可以atime全改成1469376000,我参考看看吗?....。
另外这样应该是没开DEBUG模式吧,依然跑了count阿~~
已增加 100万主题 1469376000 时间戳
你这时间戳时 明天凌晨
看样子只有我的会比较慢还一直查询,我还是直接注解掉统计好了。就这样...
又加了 100万主题 并 atime 使用随机数
不知原因他就是一直Count...
已放弃.....HYBBS.php//已注解掉统计。
站点主题:3786
站点帖子:32062
站点用户:19769
今日主题:0
今日帖子:1
今日注册:1
运行耗时:0.0398 s
645862790
发表于 2016-7-23
66666666666666666666666666666666666666
评论列表
加载数据中...
admin
发表于 2016-7-23
5000千万主题
http://free.hyphp.cn/
数据库就是数据库 没有程序能真正承载什么亿千万数据 都靠静态缓存和数据库的条件设计
评论列表
加载数据中...
s80022
发表于 2016-7-23
环境是Apache2.4+php7+Memcached+mariadb5.5(OneinStack一键包)
刚刚测试了一下,新建HYBBS 1.4.0.5按下升级1.4.0.6,
全新状态的HYBBS,0 主题 页面开启相当流畅。。
然后在adminer下搬移hy_post hy_thread的一部分50多万主题 到新建立的HYBBS,
数据搬移完成后就非常严重的延迟,所以应该还是主题数据造成的。
评论列表
加载数据中...
admin
发表于 2016-7-23
原因已经查明
四栏插件的一个 SQL语句 存在缺陷
img[!]=>'' 该语句在大数据会造成严重的 查询时间.
如果你在测试中不使用该插件 就不会造成严重的查询时间了
评论列表
加载数据中...
yunhaibin
发表于 2016-7-23
6666666666
评论列表
加载数据中...
s80022
发表于 2016-7-23
刚刚移除四栏插件,似乎有点效果少了一半耗时
现在运行耗时:25.7686 s
重新整理有时会降到最少12 s
可能还有地方存在问题。
但应该就不是插件,因为我试过全删插件依然耗时20多秒。
评论列表
加载数据中...
admin
发表于 2016-7-23
查看一下 右下角窗口 调试窗口
看一下SQL执行 哪句比较耗时
评论列表
加载数据中...
s80022
发表于 2016-7-23
@admin
全都显示0ms,但是我开好久好久....
评论列表
加载数据中...
admin
发表于 2016-7-23
你先修复一下 0ms的问题
/HY/HY_SQL.php
104行处
改为
接着下面的exec函数
改为
这是我之前做耗时 的一个if 失误
评论列表
加载数据中...
s80022
发表于 2016-7-23
@admin
主题页面
SQL查询 (24)
连接数据库 [耗时] 0.0113ms
SELECT * FROM "hy_user" WHERE "id" = '1' LIMIT 1 [耗时] 0.0005ms
SELECT * FROM "hy_forum" [耗时] 0.0006ms
SELECT * FROM "hy_usergroup" [耗时] 0.0006ms
SELECT COUNT(*) FROM "hy_post" [耗时] 0.0004ms
SELECT COUNT(*) FROM "hy_thread" [耗时] 0.0002ms
SELECT COUNT(*) FROM "hy_user" [耗时] 0.0002ms
SELECT COUNT(*) FROM "hy_thread" WHERE "atime" > 1469203200 [耗时] 1.7529ms
SELECT COUNT(*) FROM "hy_post" WHERE "atime" > 1469203200 [耗时] 14.1534ms
SELECT COUNT(*) FROM "hy_user" WHERE "atime" > 1469203200 [耗时] 0.0178ms
SELECT COUNT(*) FROM "hy_ol" [耗时] 0.0009ms
DELETE FROM "hy_ol" WHERE "atime" < 1469278469 [耗时] 0.0278ms
SELECT COUNT(*) FROM "hy_ol" [耗时] 0.0005ms
SELECT EXISTS(SELECT 1 FROM "hy_ol" WHERE "uid" = '1') [耗时] 0.0802ms
UPDATE "hy_ol" SET "atime" = '1469278669' WHERE "uid" = '1' [耗时] 0.0004ms
SELECT * FROM "hy_thread" ORDER BY "btime" DESC LIMIT 10 [耗时] 1.9981ms
SELECT * FROM "hy_thread" WHERE "img" != '' ORDER BY "id" DESC LIMIT 10 [耗时] 24.3555ms
SELECT * FROM "hy_thread" ORDER BY "posts" DESC LIMIT 10 [耗时] 3.3143ms
SELECT * FROM "hy_thread" WHERE "id" = 616400 LIMIT 1 [耗时] 1.1442ms
SELECT "user" FROM "hy_user" WHERE "id" = '1' LIMIT 1 [耗时] 0.0127ms
SELECT * FROM "hy_post" WHERE "tid" = 616400 AND "isthread" = 1 LIMIT 1 [耗时] 0.0174ms
SELECT * FROM "hy_post" WHERE "tid" = 616400 AND "isthread" = 0 ORDER BY "id" LIMIT 0,10 [耗时] 0.0007ms
SELECT * FROM "hy_fileinfo" WHERE "tid" = 616400 [耗时] 0.0005ms
SELECT EXISTS(SELECT 1 FROM "hy_post" WHERE "uid" = '1' AND "tid" = 616400) [耗时] 0.0007ms
UPDATE "hy_thread" SET "views" = "views" + 1 WHERE "id" = 616400 [耗时] 23.2158ms
后台
(话说进后台也会跑hy_thread,hy_post表会不会有点浪费资源)
SQL查询 (18)
连接数据库 [耗时] 0.0015ms
SELECT * FROM "hy_user" WHERE "id" = '1' LIMIT 1 [耗时] 0.0007ms
SELECT * FROM "hy_forum" [耗时] 0.0646ms
SELECT * FROM "hy_usergroup" [耗时] 0.0013ms
SELECT COUNT(*) FROM "hy_post" [耗时] 0.0006ms
SELECT COUNT(*) FROM "hy_thread" [耗时] 0.0002ms
SELECT COUNT(*) FROM "hy_user" [耗时] 0.0003ms
SELECT COUNT(*) FROM "hy_thread" WHERE "atime" > 1469203200 [耗时] 1.564ms
SELECT COUNT(*) FROM "hy_post" WHERE "atime" > 1469203200 [耗时] 15.597ms
SELECT COUNT(*) FROM "hy_user" WHERE "atime" > 1469203200 [耗时] 0.0116ms
SELECT COUNT(*) FROM "hy_ol" [耗时] 0.0003ms
DELETE FROM "hy_ol" WHERE "atime" < 1469278447 [耗时] 0.001ms
SELECT COUNT(*) FROM "hy_ol" [耗时] 0.0003ms
SELECT EXISTS(SELECT 1 FROM "hy_ol" WHERE "uid" = '1') [耗时] 0.0004ms
INSERT INTO "hy_ol" ("uid", "username", "ip", "group", "atime") VALUES ('1', 'admin', '1878879629', '1', '1469278647') [耗时] 0.0009ms
SELECT COUNT(*) FROM "hy_ol" [耗时] 0.0251ms
SELECT * FROM "hy_thread" ORDER BY "btime" DESC LIMIT 10 [耗时] 2.0389ms
SELECT * FROM "hy_thread" WHERE "img" != '' ORDER BY "id" DESC LIMIT 10 [耗时] 16.008ms
SELECT * FROM "hy_thread" ORDER BY "posts" DESC LIMIT 10 [耗时] 1.9007ms
评论列表
加载数据中...
admin
发表于 2016-7-23
按我说的 尝试增加索引:
hy_thread , hy_post , hy_user ,hy_ol 的 atime字段 增加index 索引
ht_thread 的 btime , posts 增加index索引
列表中的 img!=''消耗巨大 因为他是字符类型 这个请先关闭插件
评论列表
加载数据中...
s80022
发表于 2016-7-23
我觉得有些SQL语法,要不要参考Carbon论坛的做法。
类似
主题>50000主题时就节约资源搜寻语法,
主题<50000就用比较进阶的搜寻语法....
评论列表
加载数据中...
admin
发表于 2016-7-23
先解决 索引的问题
主题搜索的问题 后期优化上去
评论列表
加载数据中...
s80022
发表于 2016-7-23
@admin
我的意思是那些语法可以用类似的方式对较多数据的用户减少整体消耗,不是单单指搜索。
(例如可以增加个判断或后台增加开关,对于百万数据的论坛,
如果某主题的View大于如十万多少,就不触发UPDATE "views" + 1 ,
然后hy_thread对于超过十万的就直接改显示"形容很多"或是约略的"十万以上",
毕竟每个增加views累积起来也是小负担,而且我看一下常常都0.X s以上,有时候还会突然暴增延时。。)
另外想问一下,atime是指发文时间?
可不可以提示一下修改位置可以暂时注解掉不显示看看是否会顺畅许多?
还有好像 s & ms 单位很多是错的,另外HY_SQL.php的修复好像没放入1.4.0.7更新中。
SQL查询 (19)
连接数据库 [耗时] 0.0005ms
SELECT * FROM "hy_user" WHERE "id" = '1' LIMIT 1 [耗时] 0.0006ms
SELECT * FROM "hy_forum" [耗时] 0.009ms
SELECT * FROM "hy_usergroup" [耗时] 0.0011ms
SELECT COUNT(*) FROM "hy_post" [耗时] 0.0003ms
SELECT COUNT(*) FROM "hy_thread" [耗时] 0.0002ms
SELECT COUNT(*) FROM "hy_user" [耗时] 0.0004ms
SELECT COUNT(*) FROM "hy_thread" WHERE "atime" > 1469203200 [耗时] 1.1677ms
SELECT COUNT(*) FROM "hy_post" WHERE "atime" > 1469203200 [耗时] 11.686ms
SELECT COUNT(*) FROM "hy_user" WHERE "atime" > 1469203200 [耗时] 0.0241ms
SELECT COUNT(*) FROM "hy_ol" [耗时] 0.0014ms
DELETE FROM "hy_ol" WHERE "atime" < 1469281125 [耗时] 0.0005ms
SELECT COUNT(*) FROM "hy_ol" [耗时] 0.0003ms
SELECT * FROM "hy_thread" WHERE "id" = 620519 LIMIT 1 [耗时] 0.0255ms
SELECT "user" FROM "hy_user" WHERE "id" = '1' LIMIT 1 [耗时] 0.0005ms
SELECT * FROM "hy_post" WHERE "tid" = 620519 AND "isthread" = 1 LIMIT 1 [耗时] 0.01ms
SELECT * FROM "hy_post" WHERE "tid" = 620519 AND "isthread" = 0 ORDER BY "id" LIMIT 0,10 [耗时] 0.0008ms
SELECT * FROM "hy_fileinfo" WHERE "tid" = 620519 [耗时] 0.0343ms
SELECT EXISTS(SELECT 1 FROM "hy_post" WHERE "uid" = '1' AND "tid" = 620519) [耗时] 0.0021ms
UPDATE "hy_thread" SET "views" = "views" + 1 WHERE "id" = 620519 [耗时] 0.8899ms
评论列表
加载数据中...
ical
发表于 2016-7-23
2个牛人
评论列表
加载数据中...
s80022
发表于 2016-7-23
评论列表
加载数据中...
admin
发表于 2016-7-23
update views+1 并不会很大影响
没办法 只能到达10万 就不++ 了 那何来 20万呢 其实还是得++
update 整数+1 还是很快的
论坛数据结构很多处的 atime都是指内容的插入时间 . btime 一般只 最后更新时间
评论列表
加载数据中...
intern
发表于 2016-7-24
这样的反馈才是hybbs所需要的,像我们的这样数据有限的触发不了隐藏任务
评论列表
加载数据中...
s80022
发表于 2016-7-24
解决大半了,现在"微慢"而已。
即使atime字段 增加index 索引,缓存开启的状态下atime一个依然要0.8187ms。
等于50多万笔光主题hy_post +hy_thread 就耗掉1秒多,
如再加上回复与注册依然会上升到好几秒。
一个页面要好几秒开启,显然不大符合生产应用。
不知@admin 能不能改善一下写法之类,尽量降低atime延迟。
--------------------------
评论列表
加载数据中...
admin
发表于 2016-7-24
http://free.hyphp.cn/ 解决索引后的 100万主题
评论列表
加载数据中...
s80022
发表于 2016-7-24
@admin
确实索引加进去了,也确实变快了,但是依然无法达到你的那种效果。
这个HYBB除安装BLOG模板,home插件,sitemap插件,关闭注册用户,侧边栏-增加HTML代码。
我唯一只在资料库中增加id自动递增,如图片那样,然后搬移主题数据,也没忘了索引。。
其馀都是 置顶那个完全崭新的 那个HYBBS1.4.0.8,而不是升级的。
会不会是因为我的atime都不一样。 而你的atime的unix时间戳都是"0" ? (我不懂这个,猜测..)
评论列表
加载数据中...
admin
发表于 2016-7-24
线上硬件测试一下吧.
评论列表
加载数据中...
admin
发表于 2016-7-24
这是100万主题的 atime 范围 count
在phpmyadmin中 执行 SELECT COUNT(*) FROM "hy_thread" WHERE "atime" > 1469289600
注意上面的 单位是 (微妙) (µs)
也就是说这种查询 是微乎其微的速度
评论列表
加载数据中...
s80022
发表于 2016-7-24
因为我的数据测试时间戳用系统时间产生的。所以atime 是00:00:00后。
例如1469343600
而 "atime" > 1469289600,会COUNT出 大于 2016/7/24 00:00:00的次数。
我以系统时间戳产生了50万笔,就会++50万次,造成开启缓慢。
所以修了一下
话说...加总atime>1469289600的意义在于?
评论列表
加载数据中...
admin
发表于 2016-7-24
我的100万数据 也是 当日生成的 时间也是0 atime时间条件也是满足 100万条的
你问的这条SQL是用于 统计当日发帖数量的
看你这张图的性能分析
Send Data 用了400多ms
这是 mysql发送到 php 传输管道的用时
首先count这是一个统计 发送的数据并不大 却用了 那么大的时间
应该是本地环境的问题!
评论列表
加载数据中...
s80022
发表于 2016-7-24
如果是为了统计不需要每次都触发,另建表储存统计资料。而统计资料可以SELECT COUNT(*) ,但不用时时刻刻吧? 就好像另一个轻论坛的就是这样做减缓消耗。 很多定时,或是点击次数每100才触发。这样就没这个问题了。。
并外可能有部分本地环境问题,因为我真的不懂my.cnf要怎么设,可能是这个影响到。还有IO可能不是很好,虽然是SSD但VirtualBox模拟出来的Centos8.
但也不是完全是本地环境问题....
因为我的时间戳原本不是0...这才是改0之后的。
评论列表
加载数据中...
admin
发表于 2016-7-24
由于你本地开启了DEBUG模式 所以数据没被缓存
所以造成了 每次访问都会查询
评论列表
加载数据中...
s80022
发表于 2016-7-24
@admin
http://free.hyphp.cn/
可以atime全改成1469376000,我参考看看吗?....。
另外这样应该是没开DEBUG模式吧,依然跑了count阿~~
评论列表
加载数据中...
admin
发表于 2016-7-24
已增加 100万主题 1469376000 时间戳
你这时间戳时 明天凌晨
评论列表
加载数据中...
s80022
发表于 2016-7-24
看样子只有我的会比较慢还一直查询,我还是直接注解掉统计好了。
就这样...
评论列表
加载数据中...
admin
发表于 2016-7-24
http://free.hyphp.cn/
又加了 100万主题 并 atime 使用随机数
评论列表
加载数据中...
s80022
发表于 2016-7-24
不知原因他就是一直Count...
已放弃.....HYBBS.php//已注解掉统计。
评论列表
加载数据中...