hcymysql / slowquery

Slowquery图形化显示MySQL慢日志工具
https://dbaplus.cn/news-11-2520-1.html
145 stars 58 forks source link

老板,我打开slowquery.php页面报了这几个错,您知道咋回事儿不 #8

Open alsmn opened 1 year ago

alsmn commented 1 year ago

页面中可以选择db,但是在页面中的不同位置,可以看到这几个报错: Notice: Undefined index: action in /usr/local/apache2/htdocs/slowquery.php on line 4 Notice: session_start(): A session had already been started - ignoring in /usr/local/apache2/htdocs/slowquery.php on line 79 Notice: session_start(): A session had already been started - ignoring in /usr/local/apache2/htdocs/slowquery.php on line 109 Notice: Undefined index: page in /usr/local/apache2/htdocs/slowquery.php on line 113 Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, bool given in /usr/local/apache2/htdocs/slowquery.php on line 152

hcymysql commented 1 year ago
SELECT r.checksum,r.fingerprint,h.db_max,h.user_max,r.last_seen,SUM(h.ts_cnt) AS ts_cnt,
ROUND(MIN(h.Query_time_min),3) AS Query_time_min,ROUND(MAX(h.Query_time_max),3) AS Query_time_max,
ROUND(SUM(h.Query_time_sum)/SUM(h.ts_cnt),3) AS Query_time_avg,r.sample
FROM mysql_slow_query_review AS r JOIN mysql_slow_query_review_history AS h
ON r.checksum=h.checksum
WHERE h.db_max = '${select_dbname}'
AND r.last_seen >= SUBDATE(NOW(),INTERVAL 31 DAY)
GROUP BY r.checksum
ORDER BY r.last_seen DESC,ts_cnt DESC LIMIT 10;

你执行这个SQL,有返回数据吗?

alsmn commented 1 year ago
SELECT r.checksum,r.fingerprint,h.db_max,h.user_max,r.last_seen,SUM(h.ts_cnt) AS ts_cnt,
ROUND(MIN(h.Query_time_min),3) AS Query_time_min,ROUND(MAX(h.Query_time_max),3) AS Query_time_max,
ROUND(SUM(h.Query_time_sum)/SUM(h.ts_cnt),3) AS Query_time_avg,r.sample
FROM mysql_slow_query_review AS r JOIN mysql_slow_query_review_history AS h
ON r.checksum=h.checksum
WHERE h.db_max = '${select_dbname}'
AND r.last_seen >= SUBDATE(NOW(),INTERVAL 31 DAY)
GROUP BY r.checksum
ORDER BY r.last_seen DESC,ts_cnt DESC LIMIT 10;

你执行这个SQL,有返回数据吗?

我执行这个sql报错了,因为select的列不在group by中,我修改了mysql的sql_mode参数,现在执行这个sql已经不报错了,不过没有返回数据,而且打开slowquery.php页面还是依然报那几个错

alsmn commented 1 year ago

现在我把sql中的“31 DAY”改的大一些,执行sql是可以查到数据的,但是slowquery.php页面那4个报错不知道怎么办

hcymysql commented 1 year ago

现在我把sql中的“31 DAY”改的大一些,执行sql是可以查到数据的,但是slowquery.php页面那4个报错不知道怎么办

修改slowquery.php文件,在第一行加入以下代码: ini_set("display_errors", "Off");
error_reporting(E_ERROR | E_WARNING | E_PARSE); 图片

你再试试。

alsmn commented 1 year ago

谢谢, (1)加了这两行,确实不报错了,可是您这是把报错屏蔽了吧,在日志里这些报错还是可以看到的 (2)slowquery.php页面下面可以看到慢查询语句,但是页面上面慢查询分析图表没有任何曲线信息,图表是空的,这个您知道咋回事儿不

hcymysql commented 1 year ago

谢谢, (1)加了这两行,确实不报错了,可是您这是把报错屏蔽了吧,在日志里这些报错还是可以看到的 (2)slowquery.php页面下面可以看到慢查询语句,但是页面上面慢查询分析图表没有任何曲线信息,图表是空的,这个您知道咋回事儿不

1)Notice提示信息没事,忽略就行。 2)修改一下get_graph_data.php文件和get_top_data.php文件,把默认的14 DAY改成90 DAY,你再试试。

alsmn commented 1 year ago

两个14都改成90了,图表还是空的,get_graph_data.php里的“INTERVAL 1 DAY ”也需要改成90吗

hcymysql commented 1 year ago

两个14都改成90了,图表还是空的,get_graph_data.php里的“INTERVAL 1 DAY ”也需要改成90吗

对的。你查下面的sql有数据吗?

SELECT db_max,user_max,SUM(ts_cnt) AS top_count FROM (SELECT h.db_max,h.user_max,SUM(h.ts_cnt) AS ts_cnt FROM mysql_slow_query_review AS r JOIN mysql_slow_query_review_history AS h ON r.checksum=h.checksum WHERE r.last_seen >= SUBDATE(NOW(),INTERVAL 14 DAY) GROUP BY r.checksum) AS tmp GROUP BY tmp.db_max;

hcymysql commented 1 year ago

把sql_mode设置为空,关闭它。

alsmn commented 1 year ago

我把 “INTERVAL 1 DAY ” 改了 “INTERVAL 14 DAY ”,图表就有数据了

alsmn commented 1 year ago

两个14都改成90了,图表还是空的,get_graph_data.php里的“INTERVAL 1 DAY ”也需要改成90吗

对的。你查下面的sql有数据吗?

SELECT db_max,user_max,SUM(ts_cnt) AS top_count FROM (SELECT h.db_max,h.user_max,SUM(h.ts_cnt) AS ts_cnt FROM mysql_slow_query_review AS r JOIN mysql_slow_query_review_history AS h ON r.checksum=h.checksum WHERE r.last_seen >= SUBDATE(NOW(),INTERVAL 14 DAY) GROUP BY r.checksum) AS tmp GROUP BY tmp.db_max;

这条sql有数据

hcymysql commented 1 year ago

我把 “INTERVAL 1 DAY ” 改了 “INTERVAL 14 DAY ”,图表就有数据了

哦了。👌🏻

alsmn commented 1 year ago

但是点开sql,显示执行计划后,日志里报“sh: line 41 : ctcm_version_test_object:command not found "

hcymysql commented 1 year ago

但是点开sql,显示执行计划后,日志里报“sh: line 41 : ctcm_version_test_object:command not found "

这个报错我第一次见,代码里没有调用这个。你截图看看?

hcymysql commented 1 year ago

那个小米的soar命令,你设置一下chmod 755 soar

alsmn commented 1 year ago

那个小米的soar命令,你设置一下chmod 755 soar

不过这个提前都已经设置了,是755,可是还是报“sh: line 41 : ctcm_version_test_object:command not found " 这个错

alsmn commented 1 year ago

那个小米的soar命令,你设置一下chmod 755 soar

之前报过一个权限不足的错,改成755就好了,但是“sh: line 41 : ctcm_version_test_object:command not found " 这个错还是在报,也是在点开执行计划的时候报的

hcymysql commented 1 year ago

$html_str=system("$sql_advisor_export | ./soar/soar -online-dsn='${user}:${pwd}@${ip}:${port}/${dbname}' -test-dsn='$test_user:$test_pwd@$test_ip:$test_port/$test_db' -report-type='html' -explain=true -log-output=./soar.log"); 把这段代码注销一下,去掉soar试试。

alsmn commented 1 year ago

注销后,再点sql语句想看执行计划下面就不显示执行计划了,看不了执行计划了,并且了报了 “undefined variable : html_str ” 这个错

hcymysql commented 1 year ago

注销后,再点sql语句想看执行计划下面就不显示执行计划了,看不了执行计划了,并且了报了 “undefined variable : html_str ” 这个错

echo $html_str;再把这个注销掉,就不调用soar了。之前那个报错已经定位是soar工具的报错信息。直接屏蔽掉就可以了。

hcymysql commented 1 year ago

那个小米的soar命令,你设置一下chmod 755 soar

之前报过一个权限不足的错,改成755就好了,但是“sh: line 41 : ctcm_version_test_object:command not found " 这个错还是在报,也是在点开执行计划的时候报的

你下载一个最新版的soar试试,把之前的那个替换掉。 `

wget https://github.com/XiaoMi/soar/releases/download/0.9.0/soar.linux-amd64 -O soar

chmod a+x soar

`

alsmn commented 1 year ago

加了 echo $html_str; ,然后注释了“$html_str=system("$sql_adviso.....“这行,然后如果点具体的sql的话,进入到执行计划页面,会报slowquery_explain.php 94行和96行的错

hcymysql commented 1 year ago

加了 echo $html_str; ,然后注释了“$html_str=system("$sql_adviso.....“这行,然后如果点具体的sql的话,进入到执行计划页面,会报slowquery_explain.php 94行和96行的错

直接屏蔽soar,78-98行全部删了

图片

alsmn commented 1 year ago

直接吧 78-98行全部 注释了,日志里还是报“sh: line 41 : ctcm_version_test_object:command not found " 这个

hcymysql commented 1 year ago

直接吧 78-98行全部 注释了,日志里还是报“sh: line 41 : ctcm_version_test_object:command not found " 这个

这个我不清楚了,确实没有遇到过这个错误。我的PHP文件里没有调用过ctcm_version_test_object,你在一台干净的Centos7机器里部署一下。