原文链接:
https://www.gbase.cn/community/post/3872
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。
在数据库的日常运维中,慢SQL的检测与优化是提升数据库性能的关键步骤。慢SQL不仅影响用户体验,还可能成为系统性能瓶颈的源头。本文将介绍如何检查正在运行的慢SQL,并提供相应的优化策略。
一、使用SQL查询检测慢SQL
1、SQL查询基础,通过特定的SQL查询,可以快速定位到成本较高且可能执行缓慢的SQL语句。这为我们进一步分析和优化提供了依据。
dbaccess sysmaster -<<!
select first 10 sqx_estcost,
sqx_estrows, sqx_sessionid,
sqx_sqlstatement
from sysmaster:syssqexplain
where 1=1
order by sqx_estcost desc;
!
2、分析查询输出结果,对查询结果进行分析,识别出成本最高且行数估计较多的SQL语句。这些语句往往是优化工作的首选目标。
sqx_estcost 2147483647
sqx_estrows 49
sqx_sessionid 51
sqx_sqlstatement select max(t3.tabid) as id from systables t1,systables t2,sys
tables t3, systables t4,systables t5,systables t6
group by t
1.tabname,t2.tabname
3、输出结果解读,详细解读输出结果,理解每个字段的含义,如估计成本(sqx_estcost)、估计行数(sqx_estrows)、会话ID(sqx_sessionid)和SQL语句本身(sqx_sqlstatement)。
二、使用命令检查正在运行的慢SQL
1、检查一直在运行的线程rstcb,检查第三列不变持续输出的线程。
onstat -g act -r 1 | egrep "sqlexec|threads"
输出:
Running threads:
215 4a645178 470f33e8 1 running 8cpu sqlexec
Running threads:
215 4a645178 470f33e8 1 running 8cpu sqlexec
2、查看线程会话,根据上一步输出,检查线程信息
onstat -u |grep 470f33e8
输出:
470f33e8 ---P--- 51 gbasedbt - 0 0 1 5 0
3、检查会话信息,跟据上一步输出,检查会话信息及执行的sql。
onstat -g ses 51
输出:
On-Line -- Up 14 days 19:53:19 -- 674664 Kbytes
session effective #RSAM total used dynamic
id user user tty pid hostname threads memory memory explain
51 gbasedbt - - 1486 dbhost1 1 221184 218648 off
Program :
/opt/gbase/bin/dbaccess
tid name rstcb flags curstk status
215 sqlexec 470f33e8 ---P--- 10528 running-
Memory pools count 2
name class addr totalsize freesize #allocfrag #freefrag
51 V 4a745040 217088 1728 453 6
51*O0 V 4a788040 4096 808 1 1
name free used name free used
overhead 0 6576 scb 0 144
opentable 0 9192 filetable 0 904
log 0 16536 temprec 0 22688
keys 0 176 ralloc 0 80024
gentcb 0 1616 ostcb 0 2968
sqscb 0 21064 sql 0 18952
hashfiletab 0 552 osenv 0 2768
sqtcb 0 9688 fragman 0 1240
shmblklist 0 22568 rsam_seqscan 0 992
sqscb info
scb sqscb optofc pdqpriority optcompind directives
47b61290 4a735028 0 0 2 1
Sess SQL Current Iso Lock SQL ISAM F.E.
Id Stmt type Database Lvl Mode ERR ERR Vers Explain
51 SELECT testdb LC Not Wait 0 0 9.24 Off
Current statement name : unlcur
Current SQL statement (2) :
select max(t3.tabid) as id from systables t1,systables t2,systables t3,
systables t4,systables t5,systables t6 group by t1.tabname,t2.tabname
Last parsed SQL statement :
select max(t3.tabid) as id from systables t1,systables t2,systables t3,
systables t4,systables t5,systables t6 group by t1.tabname,t2.tabname
通过对正在运行的慢SQL的检查和分析,我们可以更准确地识别性能瓶颈并采取相应的优化措施。无论是使用SQL查询还是系统命令,关键在于理解输出结果并据此制定优化策略。
感谢您的阅读,希望本文能帮助您在数据库性能优化的道路上更进一步。如果您在慢SQL检测和优化方面有任何疑问,欢迎在评论区留言讨论。
原文链接:
https://www.gbase.cn/community/post/3872
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。