12下一页
返回列表 发帖
查看: 504|回复: 17

[求助] dz数据库占用满载,慢日志显示dateline代码问题,求方法!

3

主题

12

回帖

20

积分

初学乍练

贡献
0 点
金币
4 个
发表于 2024-2-21 21:48:49 | 显示全部楼层 |阅读模式
   RT,Dz3.4,有时候cpu占用达到190%!导致论坛经常打不开!查询mysql慢日志代码如下! 这个具体怎么解决,有没有老哥指点一下!
  1. SELECT * FROM pre_forum_thread WHERE FROM_UNIXTIME(dateline, '%Y-%m-%d') = CURDATE() and fid in('2') AND displayorder >=0 ORDER BY views DESC LIMIT 10;
  2. # User@Host: www_xxxxx_co[www_xxxxx_co] @ localhost [127.0.0.1]  Id: 68983
  3. # Query_time: 3.384782  Lock_time: 0.000089 Rows_sent: 10  Rows_examined: 622055
  4. SET timestamp=1708522728;
  5. SELECT * FROM pre_forum_thread WHERE FROM_UNIXTIME(dateline, '%Y-%m-%d') = CURDATE() and fid in('2') AND displayorder >=0 ORDER BY views DESC LIMIT 10;
  6. # Time: 240221 21:38:49
  7. # User@Host: www_xxxxx_co[www_xxxxx_co] @ localhost [127.0.0.1]  Id: 68985
  8. # Query_time: 3.091555  Lock_time: 0.000102 Rows_sent: 10  Rows_examined: 622055
  9. SET timestamp=1708522729;
  10. SELECT * FROM pre_forum_thread WHERE FROM_UNIXTIME(dateline, '%Y-%m-%d') = CURDATE() and fid in('2') AND displayorder >=0 ORDER BY views DESC LIMIT 10;
  11. # Time: 240221 21:38:56
  12. # User@Host: www_xxxxx_co[www_xxxxx_co] @ localhost [127.0.0.1]  Id: 69008
  13. # Query_time: 3.325886  Lock_time: 0.000094 Rows_sent: 10  Rows_examined: 622055
  14. SET timestamp=1708522736;
  15. SELECT * FROM pre_forum_thread WHERE FROM_UNIXTIME(dateline, '%Y-%m-%d') = CURDATE() and fid in('2') AND displayorder >=0 ORDER BY views DESC LIMIT 10;
  16. # User@Host: www_xxxxx_co[www_xxxxx_co] @ localhost [127.0.0.1]  Id: 69006
  17. # Query_time: 3.421492  Lock_time: 0.000097 Rows_sent: 10  Rows_examined: 622055
  18. SET timestamp=1708522736;
  19. SELECT * FROM pre_forum_thread WHERE FROM_UNIXTIME(dateline, '%Y-%m-%d') = CURDATE() and fid in('2') AND displayorder >=0 ORDER BY views DESC LIMIT 10;
  20. # User@Host: www_xxxxx_co[www_xxxxx_co] @ localhost [127.0.0.1]  Id: 69015
  21. # Query_time: 3.344995  Lock_time: 0.000093 Rows_sent: 10  Rows_examined: 622055
  22. SET timestamp=1708522736;
  23. SELECT * FROM pre_forum_thread WHERE FROM_UNIXTIME(dateline, '%Y-%m-%d') = CURDATE() and fid in('2') AND displayorder >=0 ORDER BY views DESC LIMIT 10;
  24. # Time: 240221 21:39:03
  25. # User@Host: www_xxxxx_co[www_xxxxx_co] @ localhost [127.0.0.1]  Id: 69031
  26. # Query_time: 5.658589  Lock_time: 0.000089 Rows_sent: 10  Rows_examined: 622055
  27. SET timestamp=1708522743;
  28. SELECT * FROM pre_forum_thread WHERE FROM_UNIXTIME(dateline, '%Y-%m-%d') = CURDATE() and fid in('2') AND displayorder >=0 ORDER BY views DESC LIMIT 10;
  29. # Time: 240221 21:39:04
  30. # User@Host: www_xxxxx_co[www_xxxxx_co] @ localhost [127.0.0.1]  Id: 69032
  31. # Query_time: 6.080100  Lock_time: 0.000091 Rows_sent: 10  Rows_examined: 622055
  32. SET timestamp=1708522744;
  33. SELECT * FROM pre_forum_thread WHERE FROM_UNIXTIME(dateline, '%Y-%m-%d') = CURDATE() and fid in('2') AND displayorder >=0 ORDER BY views DESC LIMIT 10;
  34. # Time: 240221 21:39:06
  35. # User@Host: www_xxxxx_co[www_xxxxx_co] @ localhost [127.0.0.1]  Id: 69035
  36. # Query_time: 7.060208  Lock_time: 0.000113 Rows_sent: 10  Rows_examined: 622055
  37. SET timestamp=1708522746;
  38. SELECT * FROM pre_forum_thread WHERE FROM_UNIXTIME(dateline, '%Y-%m-%d') = CURDATE() and fid in('2') AND displayorder >=0 ORDER BY views DESC LIMIT 10;
  39. # User@Host: www_xxxxx_co[www_xxxxx_co] @ localhost [127.0.0.1]  Id: 69039
  40. # Query_time: 7.022993  Lock_time: 0.000092 Rows_sent: 10  Rows_examined: 622055
  41. SET timestamp=1708522746;
  42. SELECT * FROM pre_forum_thread WHERE FROM_UNIXTIME(dateline, '%Y-%m-%d') = CURDATE() and fid in('2') AND displayorder >=0 ORDER BY views DESC LIMIT 10;
  43. # User@Host: www_xxxxx_co[www_xxxxx_co] @ localhost [127.0.0.1]  Id: 69036
  44. # Query_time: 7.054990  Lock_time: 0.000096 Rows_sent: 10  Rows_examined: 622055
  45. SET timestamp=1708522746;
  46. SELECT * FROM pre_forum_thread WHERE FROM_UNIXTIME(dateline, '%Y-%m-%d') = CURDATE() and fid in('2') AND displayorder >=0 ORDER BY views DESC LIMIT 10;
  47. # User@Host: www_xxxxx_co[www_xxxxx_co] @ localhost [127.0.0.1]  Id: 69037
  48. # Query_time: 7.103437  Lock_time: 0.000109 Rows_sent: 10  Rows_examined: 622055
  49. SET timestamp=1708522746;
  50. SELECT * FROM pre_forum_thread WHERE FROM_UNIXTIME(dateline, '%Y-%m-%d') = CURDATE() and fid in('2') AND displayorder >=0 ORDER BY views DESC LIMIT 10;
  51. # User@Host: www_xxxxx_co[www_xxxxx_co] @ localhost [127.0.0.1]  Id: 69038
  52. # Query_time: 7.090650  Lock_time: 0.000093 Rows_sent: 10  Rows_examined: 622055
  53. SET timestamp=1708522746;
  54. SELECT * FROM pre_forum_thread WHERE FROM_UNIXTIME(dateline, '%Y-%m-%d') = CURDATE() and fid in('2') AND displayorder >=0 ORDER BY views DESC LIMIT 10;
  55. # Time: 240221 21:39:07
  56. # User@Host: www_xxxxx_co[www_xxxxx_co] @ localhost [127.0.0.1]  Id: 69043
  57. # Query_time: 7.351484  Lock_time: 0.000130 Rows_sent: 10  Rows_examined: 622055
  58. SET timestamp=1708522747;
  59. SELECT * FROM pre_forum_thread WHERE FROM_UNIXTIME(dateline, '%Y-%m-%d') = CURDATE() and fid in('2') AND displayorder >=0 ORDER BY views DESC LIMIT 10;
  60. # Time: 240221 21:39:11
  61. # User@Host: www_xxxxx_co[www_xxxxx_co] @ localhost [127.0.0.1]  Id: 69046
  62. # Query_time: 7.439842  Lock_time: 0.000093 Rows_sent: 10  Rows_examined: 622055
  63. SET timestamp=1708522751;
  64. SELECT * FROM pre_forum_thread WHERE FROM_UNIXTIME(dateline, '%Y-%m-%d') = CURDATE() and fid in('2') AND displayorder >=0 ORDER BY views DESC LIMIT 10;
  65. # Time: 240221 21:39:13
  66. # User@Host: www_xxxxx_co[www_xxxxx_co] @ localhost [127.0.0.1]  Id: 69051
  67. # Query_time: 7.495992  Lock_time: 0.000095 Rows_sent: 10  Rows_examined: 622055
  68. SET timestamp=1708522753;
  69. SELECT * FROM pre_forum_thread WHERE FROM_UNIXTIME(dateline, '%Y-%m-%d') = CURDATE() and fid in('2') AND displayorder >=0 ORDER BY views DESC LIMIT 10;
  70. # Time: 240221 21:39:14
  71. # User@Host: www_xxxxx_co[www_xxxxx_co] @ localhost [127.0.0.1]  Id: 69057
  72. # Query_time: 7.341683  Lock_time: 0.000129 Rows_sent: 10  Rows_examined: 622055
  73. SET timestamp=1708522754;
  74. SELECT * FROM pre_forum_thread WHERE FROM_UNIXTIME(dateline, '%Y-%m-%d') = CURDATE() and fid in('2') AND displayorder >=0 ORDER BY views DESC LIMIT 10;
  75. # User@Host: www_xxxxx_co[www_xxxxx_co] @ localhost [127.0.0.1]  Id: 69056
  76. # Query_time: 7.348487  Lock_time: 0.000143 Rows_sent: 10  Rows_examined: 622055
  77. SET timestamp=1708522754;
  78. SELECT * FROM pre_forum_thread WHERE FROM_UNIXTIME(dateline, '%Y-%m-%d') = CURDATE() and fid in('2') AND displayorder >=0 ORDER BY views DESC LIMIT 10;
  79. # User@Host: www_xxxxx_co[www_xxxxx_co] @ localhost [127.0.0.1]  Id: 69065
  80. # Query_time: 7.135357  Lock_time: 0.000110 Rows_sent: 10  Rows_examined: 622055
  81. SET timestamp=1708522754;
  82. SELECT * FROM pre_forum_thread WHERE FROM_UNIXTIME(dateline, '%Y-%m-%d') = CURDATE() and fid in('2') AND displayorder >=0 ORDER BY views DESC LIMIT 10;
  83. # User@Host: www_xxxxx_co[www_xxxxx_co] @ localhost [127.0.0.1]  Id: 69063
  84. # Query_time: 7.170770  Lock_time: 0.000126 Rows_sent: 10  Rows_examined: 622055
  85. SET timestamp=1708522754;
  86. SELECT * FROM pre_forum_thread WHERE FROM_UNIXTIME(dateline, '%Y-%m-%d') = CURDATE() and fid in('2') AND displayorder >=0 ORDER BY views DESC LIMIT 10;
  87. # User@Host: www_xxxxx_co[www_xxxxx_co] @ localhost [127.0.0.1]  Id: 69066
  88. # Query_time: 7.211434  Lock_time: 0.000121 Rows_sent: 10  Rows_examined: 622055
  89. SET timestamp=1708522754;
  90. SELECT * FROM pre_forum_thread WHERE FROM_UNIXTIME(dateline, '%Y-%m-%d') = CURDATE() and fid in('2') AND displayorder >=0 ORDER BY views DESC LIMIT 10;
  91. # User@Host: www_xxxxx_co[www_xxxxx_co] @ localhost [127.0.0.1]  Id: 69067
  92. # Query_time: 7.217455  Lock_time: 0.000091 Rows_sent: 10  Rows_examined: 622055
  93. SET timestamp=1708522754;
  94. SELECT * FROM pre_forum_thread WHERE FROM_UNIXTIME(dateline, '%Y-%m-%d') = CURDATE() and fid in('2') AND displayorder >=0 ORDER BY views DESC LIMIT 10;
  95. # Time: 240221 21:39:15
  96. # User@Host: www_xxxxx_co[www_xxxxx_co] @ localhost [127.0.0.1]  Id: 69073
  97. # Query_time: 3.805129  Lock_time: 0.000100 Rows_sent: 10  Rows_examined: 622055
  98. SET timestamp=1708522755;
  99. SELECT * FROM pre_forum_thread WHERE FROM_UNIXTIME(dateline, '%Y-%m-%d') = CURDATE() and fid in('2') AND displayorder >=0 ORDER BY views DESC LIMIT 10;
复制代码


gpt给的优化建议是下面这个,如果正确的话,具体优化哪个文件夹呢?
  1. 当CURDATE()转为索引字段时,MySQL无法直接利用dateline索引,而需要对全表的dateline列进行函数运算后才能做比较,查询效率低。

  2. 如果dateline是以时间戳存储的,可以把条件改为 dateline = UNIX_TIMESTAMP(CURDATE()),这样可以避免全表转换。
复制代码


我知道答案 回答被采纳将会获得1 贡献 已有17人回答
回复

使用道具 举报

3

主题

12

回帖

20

积分

初学乍练

贡献
0 点
金币
4 个
 楼主| 发表于 2024-2-21 21:52:36 | 显示全部楼层
原贴不能编辑了,补充一下gpt的优化方案!这个dateline优化代码在哪个文件了呢?
  1. 不要在WHERE条件中对字段进行函数操作。在你的SQL语句中,你使用了FROM_UNIXTIME(dateline, '%Y-%m-%d') = CURDATE()进行比较,由于需要对每一行的dateline执行FROM_UNIXTIME函数,这将导致索引无法使用,并需要全表扫描。建议将这部分修改为dateline >= UNIX_TIMESTAMP(CURDATE()) AND dateline < UNIX_TIMESTAMP(DATE_ADD(CURDATE(), INTERVAL 1 DAY))。
复制代码
回复 支持 反对

使用道具 举报

10

主题

1330

回帖

2318

积分

应用开发者

DSVUE

贡献
63 点
金币
448 个
QQ
发表于 2024-2-21 23:13:14 | 显示全部楼层
看看对应时间节点,是哪些脚本在运行。
或者通过慢查询的关键词来搜索源码
通过此类方法先找到慢查询的实际PHP脚本位置,再谈怎么优化和改造
DSVUE-专业建站服务 | 最新DZ插件和模板  | 业务联系QQ:631847671 | 技术支持交流Q群:476397924
承接APP、DZ插件开发、PHP二次开发、网站模板制作、网站搬家、各类网站疑难杂症解决(谢绝担保交易,需支付定金)
回复 支持 反对

使用道具 举报

3

主题

12

回帖

20

积分

初学乍练

贡献
0 点
金币
4 个
 楼主| 发表于 2024-2-22 12:16:26 | 显示全部楼层
mingkong 发表于 2024-2-21 23:13
看看对应时间节点,是哪些脚本在运行。
或者通过慢查询的关键词来搜索源码
通过此类方法先找到慢查询的实际 ...

应该不是插件问题,应该还是源码问题,尝试过关掉所有插件,确实没有问题了,但是只要开启的插件调用这个数据表,就会出现慢日志记录!
回复 支持 反对

使用道具 举报

10

主题

1330

回帖

2318

积分

应用开发者

DSVUE

贡献
63 点
金币
448 个
QQ
发表于 2024-2-22 12:22:17 | 显示全部楼层
达达崩吧 发表于 2024-2-22 12:16
应该不是插件问题,应该还是源码问题,尝试过关掉所有插件,确实没有问题了,但是只要开启的插件调用这个 ...

如果关闭某个插件就正常了,那就从这个插件的代码入手。看看他如何查询这个数据表的。
DSVUE-专业建站服务 | 最新DZ插件和模板  | 业务联系QQ:631847671 | 技术支持交流Q群:476397924
承接APP、DZ插件开发、PHP二次开发、网站模板制作、网站搬家、各类网站疑难杂症解决(谢绝担保交易,需支付定金)
回复 支持 反对

使用道具 举报

3

主题

12

回帖

20

积分

初学乍练

贡献
0 点
金币
4 个
 楼主| 发表于 2024-2-23 12:31:31 | 显示全部楼层
mingkong 发表于 2024-2-22 12:22
如果关闭某个插件就正常了,那就从这个插件的代码入手。看看他如何查询这个数据表的。 ...

好多插件涉及 pre_forum_thread 这个数据表都会出现在这个问题!连官方的插件也是。所以我推断不是插件代码的问题!
回复 支持 反对

使用道具 举报

35

主题

2003

回帖

3468

积分

应用开发者

Discuz! 运维

贡献
97 点
金币
616 个
QQ
发表于 2024-2-23 13:23:53 | 显示全部楼层
达达崩吧 发表于 2024-2-23 12:31
好多插件涉及 pre_forum_thread 这个数据表都会出现在这个问题!连官方的插件也是。所以我推断不是插件代 ...

你不能说插件有问题或者代码有问题,毕竟这是一个正常的sql,但是考虑使用场景
不是牵涉到pre_forum_thread就有问题,而是这个sql是否在合适的场景使用,比如你慢日志的sql,如果频繁的调用,那么就可能造成数据库的服务压力

打个通俗的比方:图书馆有10000本数(你的数据条目数),10个管理员(性能上限),每个人进图书馆都要查询下去年2月份买的书单,如果管理员没有每个月购书的目录,而书上面贴了购书时间,是不是得一本本看,100个人进来,是不是得排队
回复 支持 反对

使用道具 举报

35

主题

2003

回帖

3468

积分

应用开发者

Discuz! 运维

贡献
97 点
金币
616 个
QQ
发表于 2024-2-23 13:25:32 | 显示全部楼层
所以最好的是找到这段sql调用的地方,优化下,可以做缓存
继续用上面的比方,如果第一个人进来,查到书的目录,缓存下来,第二个人只要看缓存数据就行了,而不用从头查一次
回复 支持 反对

使用道具 举报

3

主题

12

回帖

20

积分

初学乍练

贡献
0 点
金币
4 个
 楼主| 发表于 2024-2-23 21:34:37 | 显示全部楼层
科站网 发表于 2024-2-23 13:25
所以最好的是找到这段sql调用的地方,优化下,可以做缓存
继续用上面的比方,如果第一个人进来,查到书的目 ...

缓存已经弄了,没啥效果,这段sql调用的我感觉就是dateline这里!但是不知道是哪个文件!
回复 支持 反对

使用道具 举报

ink

21

主题

145

回帖

191

积分

渐入佳境

贡献
2 点
金币
1 个
发表于 2024-2-28 22:36:41 | 显示全部楼层
pre_forum_thread 这个表是主题表,你后台暂时关闭了搜索功能试试。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 关注公众号
  • 有偿服务微信
  • 有偿服务QQ

手机版|小黑屋|Discuz! 官方交流社区 ( 皖ICP备16010102号 |皖公网安备34010302002376号 )|网站地图|star

GMT+8, 2024-4-29 04:38 , Processed in 0.042949 second(s), 6 queries , Redis On.

Powered by Discuz! W1.0 Licensed

Cpoyright © 2001-2024 Discuz! Team.

关灯 在本版发帖
有偿服务QQ
有偿服务微信
返回顶部
快速回复 返回顶部 返回列表