ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

达梦SQL调优

2022-01-18 17:31:57  阅读:252  来源: 互联网

标签:语句 MONITOR 调优 SQL ET 日志 执行 达梦


达梦SQL调优

1、背景

在数据库的使用过程中,会用到大量的查询语句,数据库的性能问题最终都要涉及到SQL优化。所以,为了节省时间和提高效率,对一些SQL进行调优是十分必要的。

2、处理流程

生成日志–>日志入库–>分析SQL–>优化方案
2.1、生成日志

--设置SQL过滤规则,只记录必要的SQL,生产环境不要设成1
-- 2 只记录DML语句、3 只记录DDL语句、22 记录绑定参数的语句、25 记录SQL语句和它的执行时间 、28 记录SQL语句绑定的参数信息
SELECT SF_SET_SYSTEM_PARA_VALUE('SQL_TRACE_MASK','2:3:22:25:28',0,1);
--同步日志会严重影响系统效率,生产环境必须设置为异步日志
SELECT SF_SET_SYSTEM_PARA_VALUE('SVR_LOG_ASYNC_FLUSH',1,0,1);
--下面这个语句设置只记录执行时间超过200ms的语句
SELECT SF_SET_SYSTEM_PARA_VALUE('SVR_LOG_MIN_EXEC_TIME',200,0,1);
--下面的语句查看设置是否生效
SELECT * FROM V$DM_INI where para_name='SVR_LOG_ASYNC_FLUSH';
SELECT * FROM V$DM_INI where para_name='SQL_TRACE_MASK';
SELECT * FROM V$DM_INI where para_name='SVR_LOG_MIN_EXEC_TIME';
--开启SQL日志:
SP_SET_PARA_VALUE(1, 'SVR_LOG', 1);
--关闭SQL日志:
SP_SET_PARA_VALUE(1, 'SVR_LOG', 0);

2.2、日志入库
用ETL工程将sql日志入库并用JAR包分析sql。
PS:对于比较大SQL日志(大于10G),建议采用ETL入库,入库较快

2.3、分析SQL
优化等级:并发非常高>并发一般>并发很少特别慢。

并发非常高

SQL特征:数量很少(5%),但是执行频率非常高,甚至达到每秒上百次,只要一慢,系统很可能瘫痪。

并发一般

SQL特征:占大多数(80%),如果有慢的,对系统整体稳定性影响不大,但是会造成局部的某些操作慢。

并发很少特别慢

SQL特征:数量少(15%),往往是很复杂的查询,可能一天就执行几次,对系统整体影响不大,但是优化难度很大。

2.4、优化方案

并发非常高:

1、单个SQL调到最快。 普通索引 聚集索引 覆盖索引 2、优化应用,减少执行次数。 应用做结果集缓存 优化应用逻辑,减少无用的执行
将SQL分散其他数据库节点

PS:普通索引>聚集索引、覆盖索引>优化应用,减少执行次数

并发一般:

1、使用索引 单列索引 组合索引 2、 改写SQL left join等价改为inner join 避免隐式转换不走索引
将过滤条件上拉,走索引 用分析函数,减少表扫描

3、分析工具

在达梦数据库中,可以查看需要调整的SQL的执行计划并结合ET进行分析,来帮助寻找代价多的计划节点和操作符,指导我们进行SQL的优化。

3.1、执行计划
3.1.1、什么是达梦的执行计划

执行计划就是一条SQL语句在数据库中的执行过程或者访问路径的描述

3.1.2、如何查看执行计划

在需要查看执行计划的SQL语句前加上EXPLAIN关键字,再执行该条SQL,即可查看它的执行计划;
在达梦的管理工具中,可以选中需要查看的SQL语句,按下F9键也可以查看它的执行计划。

3.1.3、如何解读达梦的执行计划

执行计划看起来就像一棵树,执行过程为:控制流从上向下传递,数据流从下向上传递。 字段解读: 名称:计划节点的操作符
附加信息:这个操作符具体执行了什么操作 代价:该操作符花费的代价 结果集:该操作符返回的结果条数 行数据处理长度:该执行节点的字节数
描述:对该操作符的简单描述

3.2、ET
3.2.1、什么是ET
ET是达梦自带的系统存储过程,能统计SQL每个操作符的时间花费,从而定位到有性能问题的操作,指导我们去优化。

3.2.2、为什么使用ET
我们从上面的执行计划中知道了该SQL的执行过程,以及每个操作符和计划节点的代价,不过这个代价看上去还是有些抽象,ET可以把这些代价转化为具体的时间,帮助我们更好的有针对性的做出优化。

3.2.3、怎么使用ET
达梦ET默认未启用,设置启动以下三个参数可以启用ET(ENABLE_MONITOR、MONITOR_TIME和MONITOR_SQL_EXEC)。
其中,ENABLE_MONITOR和MONITOR_TIME默认已开启,如果未开启可以使用如下方法开启:

SP_SET_PARA_VALUE(1,'ENABLE_MONITOR',1);
SP_SET_PARA_VALUE(1,'MONITOR_TIME',1);

MONITOR_SQL_EXEC为会话级动态参数,可以设置只针对当前会话开启:

SF_SET_SESSION_PARA_VALUE('MONITOR_SQL_EXEC',1);

执行SQL语句,我们会看到一个执行号,直接点这个执行号,即可调用ET。

3.2.4、ET结果说明

OP: 操作符 TIME(us): 时间开销,单位为微秒 PERCENT: 执行时间占总时间百分比 RANK: 执行时间耗时排序 SEQ:
执行计划节点号 N_ENTER: 进入次数

标签:语句,MONITOR,调优,SQL,ET,日志,执行,达梦
来源: https://blog.csdn.net/usersjx/article/details/122564006

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有