达梦数据库如何定位查询慢SQL
数据库日常运维中,常常需要对数据库的性能和负载进行监控和优化,因此,能够及时采集发现慢SQL很重要。达梦有三种方式,可以获取数据库慢SQL。
第一种,利用达梦的SQL日志
如果将 DM 数据库配置文件中的参数 SVR_LOG 设置为打开,则系统还会在 log 目录下生成名为 dmsql_实例名_日期_时间.log 的 SQL 日志文件。例如,dmsql_DMSERVER_20210226_102712.log。在该文件中记录了启用 SVR_LOG 之后数据库接收到的所有 SQL 语句等信息,DBA 可以通过分析该文件来帮助解决问题。
所有节点修改sqllog.ini到实例路径下
vi /data/dmdb/sqllog.ini
BUF_TOTAL_SIZE = 10240
BUF_SIZE = 1024
BUF_KEEP_CNT = 6
[SLOG_ALL]
FILE_PATH = ../log
PART_STOR = 1
SWITCH_MODE = 2
SWITCH_LIMIT = 512
ASYNC_FLUSH = 1
FILE_NUM = 5
ITEMS = 0
SQL_TRACE_MASK = 2:3:25
MIN_EXEC_TIME = 1500 (记录超过1.5S的SQL语句)
USER_MODE = 0
USERS =
如果对 sqllog.ini 进行了修改,可通过调用以下函数即时生效,无需重启数据库
SP_SET_PARA_VALUE(1,'SVR_LOG',1);
SP_REFRESH_SVR_LOG_CONFIG();
第二种,利用v$sessions视图
查看当前会话视图v$sessions,可以看到正在执行的SQL的耗时。
第三种,v$long_exec_sqls视图或V$SYSTEM_LONG_EXEC_SQLS视图
在 打 开 监 控 开 关 ( ENABLE_MONITOR=1 ) 后 , 可 以 通 过 查 询 动 态 视 图V$LONG_EXEC_SQLS 或 V$SYSTEM_LONG_EXEC_SQLS 来确定高负载的 SQL 语句。前者显示最近 1000 条执行时间较长的 SQL 语句,后者显示服务器启动以来执行时间最长的 20条 SQL 语句。
select * from v$sql_history; 也可以看到最近的10000条SQL语句,TIME_USED是耗时