性能案例经验总结

 

  1. 数据库案例总结
  2. 案例一:索引创建不合适导致性能问题
  3. 背景

接口getResourceByRoleID在单交易测试时,发现接口响应时间过长,DB 消耗资源比较严重。

  • 关键字

db2advis 、执行计划、runstat 、权限接口

  • 问题分析
  • 首先是找出接口调用的SQL语句,有两个方法
  • 通过DB2top 命令 查找
  • 通过以下提供的SQL语句找出SQL语句(如果SQL语句特别长,采用此方法)

SELECT substr (appl_name, 1, 15) AS Appl_name,

       elapsed_time_min AS "Elapsed Min.",

       appl_status AS "Status ",

       substr (authid, 1, 10) AS auth_id,

       substr (inbound_comm_address, 1, 15) AS "IP Address",

       substr (stmt_text, 1, 2000) AS "SQL Statement"

  FROM sysibmadm.long_running_sql

ORDER BY 2 DESC;

--------------------------------------------------------------------------------------------------------------------------

找到了如下SQL:

SELECT DISTINCT rtrim (prv.PRVID) AS PRVID,

                prv.URL,

                prv.remark,

                prv.STATUS,

                prv.URI,

                rtrim (prv.PRVCODE) AS PRVCODE,

                prv.PRVTYPE,

                prv.METHODPARAM,

                prv.METHODVALUE,

                prv.OPERATE,

                prv.ISINDEX,

                prv.ISINNET,

                rtrim (appPrv.SYSID) AS BUSSYSID,

                appPrv.MENUNAME,

                appPrv.MENUORDER,

                appPrv.MENUDES,

                rtrim (appPrv.PARENTID) AS PARENTID

  FROM MPRIVILEGE AS prv,

       SYSTEM_PRV AS appPrv,

       MGROUP_PRV AS rolePrv,

       MGROUP AS role

 WHERE     prv.PRVID = appPrv.PRVID

       AND rolePrv.PRVID = appPrv.PRVID

       AND role.sysid = appPrv.sysid

       AND role.roleid = rolePrv.roleid

       AND prv.STATUS = 1

       AND appPrv.SYS_STATUS = 1

       AND role.STATUS = 1

       AND role.roleID = ?

ORDER BY BUSSYSID, appPrv.MENUORDER, PRVID

  WITH UR
  1. 分析SQL执行计划,执行计划的Cost 达到了105

  1. 在执行计划中10-12 步骤获取结果时,cost 由7.64 直接跳到40,原因可能是索引扫描时,索引筛选的结果集较大,估计索引创建不合理
  2. 通过db2advis 工具利用db2advis 给出了两个索引的创建,可以提升60%的性能

Db2advis –d sample –s  “sql_text”

CREATE INDEX ODP.IDX_SYSTEM_PRV_IDX1 ON ODP.SYSTEM_PRV

   (SYSID ASC, SYS_STATUS ASC, PARENTID ASC, MENUDES

   ASC, MENUORDER ASC, MENUNAME ASC, PRVID ASC)

   ALLOW REVERSE SCANS COLLECT SAMPLED DETAILED STATISTICS;

 CREATE UNIQUE INDEX ODP.UNIX_MPRIVILEGE_IDX1

   ON ODP.MPRIVILEGE (PRVID ASC) INCLUDE (STATUS,

   ISINNET, ISINDEX, OPERATE, METHODVALUE, METHODPARAM,

   PRVTYPE, PRVCODE, URI, REMARK, URL) ALLOW

   REVERSE SCANS COLLECT SAMPLED DETAILED STATISTICS;

COMMIT WORK

      注意使用db2advis 命令时,可能会出现如下错误:

Using user id as default schema name. Use -n option to specify schema

Explain tables not set up properly for schema DB2INST4

The insert into the ADVISE_INSTANCE table has failed.

      解决方法:

无法使用db2advis  ,由于EXPALAIN 和ADVISE 相关表没有创建,在此模式下

$DB2HOME/sqllib/misc/explain.ddl   -Linux下

%DB2HOME\sqllib\misc\explain.ddl   -Windows 下

db2 -tvf EXPlAIN.DDL

  1. 重新执行相关表的统计信息分析,方法如下:

单张表进行RUNSTATS 的命令

db2  runstats on table ODP.SYSTEM_PRV  and indexes all;

db2  runstats on table ODP. MPRIVILEGE and indexes all

这个命令将和收集该表及其所有索引(基本级别)的统计信息 

查看是否执行了RUNSTATS命令

select tbname,nleaf ,nlevels,stats_time from sysibm.sysindexes

全表进行RUNSTATS 的方法

select 'db2 runstats on table ODP.'||rtrim(NAME)||'  and indexes all' from SYSIBM.SYSTABLES  s where s.creator='ODP' and s.name not like 'BAK%'

  1. 查看添加索引后的执行计划

发现 cost 有105 下降到了34

  • 解决方案

创建以下两个索引

CREATE INDEX ODP.IDX_SYSTEM_PRV_IDX1 ON ODP.SYSTEM_PRV

   (SYSID ASC, SYS_STATUS ASC, PARENTID ASC, MENUDES

   ASC, MENUORDER ASC, MENUNAME ASC, PRVID

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【哇! C++】类和对象(三) - 构造函数和析构函数

目录 一、构造函数 1.1 构造函数的引入 1.2 构造函数的定义和语法 1.2.1 无参构造函数: 1.2.2 带参构造函数 1.3 构造函数的特性 1.4 默认构造函数 二、析构函数 2.1 析构函数的概念 2.2 特性 如果一个类中什么成员都没有,简称为空类。 空类中…

分布式存储—— HBase数据模型 详解

目录 1.3 HBase数据模型 1.3.1 两类数据模型 1.3.2 数据模型的重要概念 1.3.3 数据模型的操作 1.3.4 数据模型的特殊属性 1.3.5 CAP原理与最终一致性 1.3.6 小结 本文章参考、总结于学校教材课本《HBase开发与应用》 1.3 HBase数据模型 在开始学习HBase之前非常…

WebSocket:实现实时通信的利器

在现代Web应用中,实时通信变得越来越重要。无论是聊天应用、在线游戏,还是实时数据推送,传统的HTTP请求-响应模式已经无法满足需求。WebSocket作为一种全双工通信协议,应运而生,成为实现实时通信的利器。本文将深入探讨…

Aruco 库详解:计算机视觉中的高效标记检测工具

1. 引言:Aruco 在计算机视觉中的重要性 在计算机视觉领域,标记(Marker)检测和识别是许多应用的基础,包括 机器人导航、增强现实(AR)、相机标定(Calibration)以及物体跟踪…

SQL_语法

1 数据库 1.1 新增 create database [if not exists] 数据库名; 1.2 删除 drop database [if exists] 数据库名; 1.3 查询 (1) 查看所有数据库 show databases; (2) 查看当前数据库下的所有表 show tables; 2 数据表 2.1 新增 (1) 创建表 create table [if not exists…

react中的fiber和初次渲染

源码中定义了不同类型节点的枚举值 组件类型 文本节点HTML标签节点函数组件类组件等等 src/react/packages/react-reconciler/src/ReactWorkTags.js export const FunctionComponent 0; export const ClassComponent 1; export const IndeterminateComponent 2; // Befo…

AutoGen学习笔记系列(七)Tutorial - Managing State

这篇文章瞄准的是AutoGen框架官方教程中的 Tutorial 章节中的 Managing State 小节,主要介绍了如何对Team内的状态管理,特别是如何 保存 与 加载 状态,这对于Agent系统而言非常重要。 官网链接:https://microsoft.github.io/auto…

Compose Multiplatform+Kotlin Multiplatfrom 第四弹跨平台

文章目录 引言功能效果开发准备依赖使用gradle依赖库MVIFlow设计富文本显示 总结 引言 Compose Multiplatformkotlin Multiplatfrom 今天已经到compose v1.7.3,从界面UI框架上实战开发看,很多api都去掉实验性注解,表示稳定使用了!…

[Java基础-线程篇]7_线程设计模式与总结

摘要:懒汉单例模式怎么变得线程安全?Master-Worker归并模式,工作窃取算法。Java线程相关源码使用了什么设计模式? 资料引用:《Java高并发核心编程卷2》 目录 线程安全的单例模式 Master-Worker模式 工作窃取算法 …

Kubermetes 部署mysql pod

步骤 1: 创建 PersistentVolume 和 PersistentVolumeClaim 首先为 MySQL 创建一个 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 来确保数据的持久性。 mysql-pv.yaml: apiVersion: v1 kind: PersistentVolume metadata:name: mysql-pv-volume spec:cap…

【四.RAG技术与应用】【12.阿里云百炼应用(下):RAG的云端优化与扩展】

在上一篇文章中,我们聊了如何通过阿里云百炼平台快速搭建一个RAG(检索增强生成)应用,实现文档智能问答、知识库管理等基础能力。今天咱们继续深入,聚焦两个核心问题:如何通过云端技术优化RAG的效果,以及如何扩展RAG的应用边界。文章会穿插实战案例,手把手带你踩坑避雷。…

交叉编译openssl及curl

操作环境:Ubuntu20.04 IDE工具:Clion2020.2 curl下载地址:https://curl.se/download/ openssl下载地址:https://openssl-library.org/source/old/index.html 直接交叉编译curl会报错找不到openssl,所以需要先交叉编…

在笔记本电脑上用DeepSeek搭建个人知识库

最近DeepSeek爆火,试用DeepSeek的企业和个人越来越多。最常见的应用场景就是知识库和知识问答。所以本人也试用了一下,在笔记本电脑上部署DeepSeek并使用开源工具搭建一套知识库,实现完全在本地环境下使用本地文档搭建个人知识库。操作过程共…

HarmonyOS 应用程序包结构 (发布态)

每个应用中至少包含一个.hap文件,可能包含若干个.hsp文件、也可能不含,一个应用中的所有.hap与.hsp文件合在一起称为Bundle,其对应的bundleName是应用的唯一标识(详见app.json5配置文件中的bundleName标签)。 当应用发…

idea中的查看git历史记录,不显示详细信息

一、正常情况显示 1、idea中git查看history正常显示如下图: 二、非正常情况下显示 1、idea中git查看history,现在不显示提交的历史文件详细信息,如下图: 三、解决方式 1、找到如下窗口中画红色框的黑色线条,鼠标放在…

江科大51单片机笔记【9】DS1302时钟可调时钟(下)

在写代码前,记得把上一节的跳线帽给插回去,不然LCD无法显示 一.DS1302时钟 1.编写DS1302.c文件 (1)重新对端口定义名字 sbit DS1302_SCLKP3^6; sbit DS1302_IOP3^4; sbit DS1302_CEP3^5;(2)初始化 因为…

数学建模笔记——层次分析法(AHP)

本文借鉴了数学建模清风老师的视频和课件,如有错误欢迎大家批评指正。原视频地址:清风数学建模:https://www.bilibili.com/video/BV1DW411s7wihttps://www.bilibili.com/video/BV1DW411s7wi 1.预备知识 层次分析法: 层次分析法(The Analytic Hierarchy Process,AHP)是一…

阿里云扩容操作步骤

在快照中备份服务器快照,时间为1天 进入块存储模块进行扩容 付款完成后进入账单进行查询,确认成功后找售后确认挂载盘情况 [rootatcoin ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 1.8G 0 1.8G 0% /dev tmpfs…

【系统架构设计师】以数据为中心的体系结构风格

目录 1. 说明2. 仓库体系结构风格3. 黑板体系结构风格 1. 说明 1.以数据为中心的体系结构风格主要包括仓库体系结构风格和黑板体系结构风格。 2. 仓库体系结构风格 1.仓库(Repository)是存储和维护数据的中心场所。2.在仓库风格中,有两种不…

llamafactory大模型微调教程(周易大模型案例)

1.环境说明 操作系统:ubuntu 20 基础模型:Qwen2.5-1.5B-Instruct 工具:llamafactory GPU:四张4090 2、环境部署 2.1 下载基础模型 # 1、下载 modelscope pip install modelscope#2、模型下载 cd /data/ cat >> download…