首页 > 其他分享 >达梦存储过程性能问题定位

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

时间:2024-09-02 15:24:58浏览次数:3  
标签:定位 存储 fid cursor FID 日志 执行 达梦

在达梦数据库中可以通过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需要比较长的时间    

标签:定位,存储,fid,cursor,FID,日志,执行,达梦
From: https://www.cnblogs.com/fangzpa/p/18382423

相关文章

  • 【PHP+数据库】 一种快速定位php代码中的数据库连接信息取证思路
    一、取证需求趋势二、快速分析思路2.1面向过程的mysql连接2.2面向对象的mysql连接2.3PDO(PHPDataObjects)三、php常见的web框架3.1ThinkPHP框架3.2Laravel框架四、小结以下文章来源于万宏蜀盾科技,作者万宏蜀盾一、取证需求趋势越来越......
  • 云原生存储Rook部署Ceph
            Rook是一款云原生存储编排服务工具,Ceph是一种广泛使用的开源分布式存储方案,通过Rook可以大大简化ceph在Kubernetes集群中的部署和维护工作。        Rook由云原生计算基金会(CNCF)孵化,且于2020年10月正式进入毕业阶段。Rook并不直接提......
  • 浮点数在电脑中如何存储的
    根据国际标准IEEE(电气和电子工程协会)754,任意一个二进制浮点数V可以表示成下面的形式(-1)^S*M*2^E-1^S表示符号位,当s=0,V表示正数,当s=1,V为负数M表示有效数字,大于等于1,小于22^E表示指数位什么意思呢?例如:5.55在二进制中是101,而后面的.5是表示1,因为小数点后面的第一位是从2的负一......
  • 20240905_000339 mysql 存储过程 用户自定义变量
    自定义变量的特点一个@符号定义自定变量打印自定变量另一种定义方式查询赋值......
  • 20240905_010339 mysql 存储过程 局部变量
    ......
  • 一维数组的使用和存储
    数组下标C语言中规定数组是有下标的,从0开始,假设数组有n个元素,则最后一个元素的下标为n-1。下标相当于数组元素的编号。在C语言中数组的访问提供了一个操作符[],叫作下标引用操作符。数组元素的打印与输入#include<stdio.h>intmain(){intarr[10]={1,2,3,4,5,6......
  • 互联网编程:实验三 域名IP转换及应用URL类定位和获取数据编程
    1.编程解析域名:编写一个可重用的域名解析程序模块,使之能够将用户输入的域名解析为IP地址,能将用户输入的IP地址,反向解析为对应的主机名或域名。思路:通过命令行参数args[0]获取用户输入的域名或IP地址。使用InetAddress.getByName(args[0])用于获取相应的InetAddress 对象。......
  • 容器存储接口--CSI
    目录一、背景二、CSI是什么三、CSI系统架构1、CSI如何与k8s组件相互通信2、CSI由哪些组件组成3、CSI的工作原理4、k8s存储中涉及的组件及其作用4.1、SidecarContainers4.1.1、external-attacher4.1.2、external-provisioner4.1.3、external-resizer4.1.4、external-snaps......
  • 云存储抽象层-FluentStorage
    FluentStorage是一个.NET云存储抽象层,支持多种云服务提供商。它提供了一个统一的API来处理不同云服务提供商的Blob存储(如AWSS3,GCP,FTP,SFTP,AzureBlob/File/EventHub/DataLake)和消息传递(如AWSSQS,AzureQueue/ServiceBus)。这个库完全用C#编写,支持.NET5+和.NETStanda......
  • ubuntu重新分配根目录存储空间-将根目录空间缩小腾出给别的位置
    我有个1t的固态,上面装了双系统,分了四分之一给windows,四分之三给ubuntu,现在出了黑神话悟空,我想玩一玩,黑神话悟空需要130g的存储,但是我的windows空间只剩50g,而且我又不想使用机械硬盘,毕竟太慢了。于是,我想把我的ubuntu再分出四分之一给windows,相当于两个系统各占一半的空间。经过......