达梦存储过程性能问题定位

news/2024/9/22 4:12:38/文章来源:https://www.cnblogs.com/fangzpa/p/18382423
在达梦数据库中可以通过V$DMSQL_EXEC_TIME和debug方式来定位存储过程存在的性能问题,但V$DMSQL_EXEC_TIME往往定位比较粗糙,没法定位到存储过程中sql的执行时间,而debug可以点位具体某段sql,但如果存储过程里面有大量游标,参数变量值很多的情况下,debug调试也花费大量时间,下面介绍使用日志表来排查存储过程哪些地方耗时较长
示例如下:存储过程调用需要46分钟
存储过程如下:游标依次获取表中唯一的fid,将fid值传入到3个存储过程调用。
CREATE OR REPLACE   PROCEDURE "TEST"."P_TEST" as
declare
   V_FID TESTA.FID%type;
   cursor c_cursor is
   select distinct(FID) from TESTA; 
begin
  open c_cursor; 
 fetch c_cursor into V_FID;
  while c_cursor %found loop
     call P_TEST1(V_FID);
     call P_TEST2(V_FID);
     call P_TEST3(V_FID);
    fetch c_cursor into V_FID;
  end loop;
  close c_cursor; 
end;
如下查询,表中含有211个不同的FID,需要循环211次
创建日志表,根据自己的爱好及实际情况创建字段
CREATE TABLE dmlog (name1 VARCHAR(20),name2 VARCHAR(20),name3 DATETIME)
创建日志表之后,将程序每个步骤的前后执行时间写入到日志表,如下所示:
重新执行存储过程,执行完之后查看日志表
从上可以看到,基本都是stp2到stp3之间的P_TEST2耗时比较久,存储过程如下:
单独查询需要7s,慢在排序
在t1的A字段建立降序索引消除排序
CREATE OR REPLACE  INDEX "TEST"."IX_T1_A" ON "TEST"."T1"("A" desc)
查询执行时间减少到2毫秒
在dmlog日志表里面看到,有些参数在stp3和stp4之间的P_test3执行也比较慢
p_test3存储过程如下:
单独查询需要9s,慢在全表扫描,
在fid字段建立索引
 CREATE index idx_testa_fid on testa(fid);
索引创建之后执行时间3s,还是比较慢,慢在回表
建立组合索引消除回表,执行时间显著减少
 CREATE or REPLACE index idx_testa_fid on testa(fid,SNo,FAcct,Balance,Available,Income);
优化之后,存储过程执行由46分钟减少到5分钟
查看dmlog日志,大部分执行都非常快
如下两个参数在调用p_test3时耗时较长
将参数带入进去查询,执行计划正常
原因是该表数据分布不均衡,当fid为123456,123006时,数据量大导致insert需要比较长的时间
 
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/791058.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis-数据结构数据类型

redis常见数据类型 作者:x x x Redis 共有 5 种基本数据类型:String(字符串)、List(列表)、Set(集合)、Hash(散列)、Zset(有序集合)。数据类型 底层数据结构 应用场景String SDS 它可以存储任何数据 - 字符串、整数、浮点值、JPEG 图像、序列化的 Ruby 对象或您希望…

SHxxx传感器集线器,最多支持100组频率+温度传感器接入,满足您的多通道需求

SHxxx传感器集线器,最多支持100组频率+温度传感器接入,满足您的多通道需求SHxxx是一个传感器集线器,能够将多路传感器轮转切换到单一接口(最多200路)。它解决了测试现场传感器数量较多时传感器编号混乱的问题。该传感器集线器适用于2/3/4线制的所有传感器,例如振弦、NTC热…

Idea如何提交本地项目到Gitee或Gitlab等远程仓库

Idea、提交Git代码1、确定远程仓库地址 2、确认自己的Git账号密码(提交代码时需要登录)如果是自己的Gitee码云则是自己登录码云的账号密码; 如果是公司的GitLab则以公司分给自己的Git账号密码为准。3、确定自己本地安装了Git,然后用Idea创建或者开发好代码4、初始化本地项目…

孩子特有的纯真

写在前面1447 字 | 感触 | 见闻 | 孩子 | 童真 | 天性正文晚上。跳舞。老师有很多学生,几乎都念小学,大的不过五年级。小孩子。今晚只来了一个。其他的孩子据说都在写作业。这几天老师都打算回归街舞本源,去街上跳舞,于是让我们大包小包拿东西。音箱、地胶、小型探照灯,水…

线上applicationExecutor启动bean未加载到问题

项目启动报错applicationExecutor问题SpringBoot applicationExecutor启动bean未加载到 1. 环境 springboot3.x + flowable 2. 问题原因 报错日志:明显的使用线程池的时候Bean加载问题, 发现报错日志后再代码中搜索是否存在这个bean, 最终发现并没有, 这个bean是spring官方创建…

Camera Link转光纤卡设计资料:153-基于Sprtan6的Full(Base) Camera Link 信号源

基于Sprtan6的Full(Base) Camera Link 信号源 一、板卡概述板卡采用单FPGA的结构,FPGA采用XILINX的SPARTAN6系列的XC6SLX45T-1FF484I,用来实现Full 模式下的一路Camera Link转光纤功能输出。二、主要功能和性能板卡功能参数内容一路Full 模式下的Camera Link转光纤功能XC6SLX…

goland idea中debug程序报错-debugger could not patch runtime.mallogc

idea中debug Go程序报错error layer=debugger could not patch runtime.mallogc 一、问题场景在idea中配置了Go编程环境,可以运行Go程序,但是无法debug,报错error layer=debugger could not patch runtime.mallogc: no type entry found, use ‘types’ for a list of valid…

一个练习项目,好玩的bbs-nodejs-fastify

代码:const fastify = require("fastify")(); const md5 = require(md5); const querystring = require(querystring);//npm install fastifyvar secretKey = saacac3423@21212; var pagesize = 20;var mysql = require(mysql); var connection = mysql.create…

一个练习项目,好玩的bbs-nodejs-express

代码:const express = require(express); const app = express(); const md5 = require(md5);//npm install expressvar secretKey = saacac3423@21212; var pagesize = 20;var mysql = require(mysql); var connection = mysql.createConnection({host : 127.0.0.1,…

查看linux邮件/patch

事情的起因是发现 gpio_request 被标记成弃用了,想找一下改这个patch和邮件,查看一下原因。 首先 # gpiolib-legacy.c是该函数存在的文件 git blame drivers/gpio/gpiolib-legacy.c然后得到该change的commit git show f402886得到了该commit的标题,如红框所示。 最后在这个网…

一个练习项目,好玩的bbs-nodejs-koa

代码:const Koa = require(koa); const Router = require(koa-router); const md5 = require(md5);//npm install koa koa-routerconst app = new Koa(); const router = new Router();var secretKey = saacac3423@21212; var pagesize = 20;var mysql = require(mysql);…

NocoBase 与百事通:为法律行业带来全新变革

百事通使用 NocoBase 优化法律案件处理,实现案件数据的批量管理、复杂工作流的自动化和基于角色的权限定制。这些改进简化了操作,大大提高案件处理效率。关于百事通 上海百事通信息技术股份有限公司成立于 2006 年,是大型创新型法律服务提供方,构建了法律数字化智能平台,为…