一 基础环境信息
数据库版本:达梦8-03134283890-20220304-158322-10045
操作系统版本:CentOS Linux release 7.6.1810 (Core)
二 SQL执行流程
假如在DM中有一个查询会话请求,那么大概流程如下:
(1)客户端对发起SQL请求;
(2)数据库服务进程创建连接、分配线程处理相关的请求;
(3)查找SQL CACHE MANAGERMENT(SQL缓冲区负责储存sql的计划、语句和结果集缓存等信息);
(4)如果存在相同的执行计划,则执行SQL,获取数据,返回给客户端;
(5)如果不存在执行计划,则,进行语法检查,语义检查,权限,SQL优化(查询转换,执行代价分析),最终形成执行计划;
(6)执行SQL,获取数据返回给客户端。
三 问题描述
1.当我们在优化SQL的时候,我们首先考虑SQL缓冲区是否有执行计划,这个SQL执行计划是否是最优的;
2.当我们执行SQL的时候,第一次可能效率较低,第二次存在了SQL执行计划,以及数据缓存,查询效率会高一点;
3.在优化SQL的时候,需要查看SQL缓冲区中的执行计划。
注意:优化SQL的过程,不要再业务高峰期进行,比如创建索引,清空SQL语句的执行计划等操作
四 操作流程
1. 执行查询SQL
select * fromTEST.TEST;
2. 查询SQL的cache_item(举例为140116797555440)
select cache_item,sqlstr from v$cachepln where sqlstr like '%TEST.TEST%';
3. 将内存中SQL的执行计划生成导出,查看执行计划是否存在异常
alter session set events 'immediate trace name plndump level 140116797555440,dump_file ''/soft/dmdbms/dm.log''';
4. 查看执行计划生成导出文件
cat /soft/dmdbms/dm.log
5. 清理内存中的执行计划
SP_CLEAR_PLAN_CACHE(140116797555440);
6. 优化SQL
7.查看执行计划
explain select * fromTEST.TEST;