达梦慢sql和统计信息收集
更多技术博客,请关注微信公众号:运维之美
一、引子
网站运行久了,web页面加载出现转圈和加载慢的情况,通过查看日志是慢SQL导致的,如果你对国产的达梦数据库不是很熟悉,那么怎么定位呢?
- 根因分析
数据库出现慢sql的原因基本上有如下几点
-
数据库节点资源不足,负载高导致的慢
-
web节点和数据库节点网络有延迟
-
SQL语句没有索引,当网站运行数据量越来越大后出现慢sql
-
数据库统计信息太旧了,导致SQL运行没走索引
本章主要讲达梦数据库在第4种情况下的问题处理,达梦数据库可以兼容oracle,所以运维过oracle的小伙伴,达梦就比较简单了。
二、问题分析
查询超过执行时间阈值的 SQL 语句
可通过查询 V$LONG_EXEC_SQLS 系统视图获取结果:
SELECT * FROM V$LONG_EXEC_SQLS;
查询结果字段详细信息介绍如下表所示:
列名 | 说明 |
---|---|
SESS_ID | 会话 ID,会话唯一标识 |
SQL_ID | 语句 ID,语句唯一标识 |
SQL_TEXT | SQL 文本 |
EXEC_TIME | 执行时间(毫秒) |
FINISH_TIME | 执行结束时间 |
N_RUNS | 执行次数 |
SEQNO | 编号 |
TRX_ID | 事务号 |
三、了解执行计划
数据库会按照SQL接方式、连接顺序、访问路径生成不同的执行计划,选择代价最小的一个作为最终的执行计划。
一般情况下,索引访问用于检索表的小部分数据,全表扫描用于访问表的大部分数据。从数据库中定位和检索数据的方法有:全表扫描、聚集索引扫描、二级索引扫描等。
全表扫描是指从基表中检索数据时,扫描该表中所有的数据。全表扫描方式适合检索表中大部分数据,这时比索引扫描更加有效率。
索引扫描是指通过指定语句中的索引列进行遍历来检索表中的数据。索引扫描是从基于一列或多列的索引中检索数据。索引不仅包含索引值,还包含对应表中数据的 ROWID。如果需要访问的不是索引列,这时需要通过 ROWID 或聚集索引来找到表中的数据行。
达梦数据库可通过两种方式查看执行计划。
方式一:通过 DM 数据库配套管理工具查看。
方式二:使用 explain 命令查看。
以下对两种查看方式进行介绍。
(1)管理工具查看执行计划
在 DM 配套管理工具中,选中待查看执行计划的 SQL 语句,点击工具栏中的按钮,或使用快捷键 F9,即可查看执行计划。</