iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >近期一些典型的Case
  • 345
分享到

近期一些典型的Case

case典型的一些 2022-11-30 23:11:06 345人浏览 八月长安
摘要

招行问题分析及建议 针对近期工作中出现的问题,我选取了一些典型案例并加上自己的分析。 1.       ftpdbn1-deadl

招行问题分析及建议

针对近期工作中出现的问题,我选取了一些典型案例并加上自己的分析。

1.       ftpdbn1-deadlock问题:

通过打开event monitor抓取的数据,发现是由一个存储过程大量执行同一个表的delete语句导致的死。存储过程定义如下:

CREATEPROCEDURE CIFDBO.SP_FRM_E_FMEVRFCA_LOG_ADD_V1 (

    IN pMDL_INS_COD CIFDBO.MDL_INS_COD_ARRAY,

    ......

    IN pREC_CNT     CIFDBO.INT_ARRAY,

    OUT pRtCode     INTEGER

 )

    SPECIFIC SP_FRM_E_FMEVRFCA_LOG_ADD_V1

P1: BEGIN

 

DECLARE vEVT_ID CHAR(20);

 

DECLARE i, n INTEGER;

 

DECLARE vTimestamp TIMESTAMP;

DECLARE vDateDelete TIMESTAMP;

 

DECLARE sqlCODE INTEGER;

 

DECLAREEXIT HANDLER FOR SQLEXCEPTioN

BEGIN

    SET pRtCode = SQLCODE;

END;

 

    SET pRtCode =-1;

 

    SET vTimestamp =CURRENT TIMESTAMP;

    SET vDateDelete = vTimestamp -3 MONTHS;

 

        DELETEFROM FRM.FMEVRFCA_LOG WHERE CRT_TIM < vDateDelete;

 

        SET n = CARDINALITY(pTBL_NAM);

 

    SET i =1;

 

    WHILE (i <= n) DO

 

            INSERTINTO  FRM.FMEVRFCA_LOG

            (

                MDL_INS_COD   ,

                SEQ_NO        ,

                TBL_NAM       ,

                OPR_COD       ,

                UPD_TIM       ,

                REM_KEY       ,

                REC_CNT       ,

                CRT_TIM

            )

            VALUES

            (

                pMDL_INS_COD[i],

                pSEQ_NO[i]     ,

                pTBL_NAM[i]    ,

                pOPR_COD[i]    ,

                pUPD_TIM[i]    ,

                pREM_KEY[i]    ,

                pREC_CNT[i]    ,

                vTimestamp

            );

 

        SET i = i +1;

 

    END WHILE;

 

    SET pRtCode =0;

 

END P1

优化建议: 为避免将delete语句移出存储过程,由一个单独的task定期执行!

 

2.       osfdb01-ORSDB 锁升级

造成锁升级的SQL语句(锁升级发生在表OWK.EMP_STAFF_ORG上):

SELECT tsk.RSP_TSK_CODE, tsk.PRJ_PUB_CODE, tsk.RSP_PRJ_CODE, prj.RSP_PRJ_NAME, tsk.RSM_ID, tsk.RSM_NAME, tsk.RSM_ORG, prj.RSP_FREQ, pub.BRANCH_ID,pub.BRANCH_NAME, tsk.CHK_OBJ, tsk.ATT_NAME, tsk.CHK_DATE, tsk.PLM_RSV, tsk.REMARK, tsk.DUE_DATE, tsk.UPDATE_USER, (case  when  (tsk.RSP_TSK_STATUS ='FINISHED'or tsk.RSP_TSK_STATUS='ODFINISHED')  then tsk.UPDATE_TIME elsenullend) as UPDATE_TIME, tsk.RSP_TSK_STATUS

FROM   OBS.RSP_TASK tsk left join OBS.RSP_PRJ_PUB pub on tsk.PRJ_PUB_CODE = pub.PRJ_PUB_CODE left join OBS.RSP_PRJ prj on tsk.RSP_PRJ_CODE = prj.RSP_PRJ_CODE

WHERE  1=1AND tsk.RSM_ID IN (

select sta_id from OWK.EMP_STAFF where sta_id='157495'uNIOn

select sta.sta_id from OWK.EMP_STAFF_ORG sta where sta.MFLAG=1andexists (select1from OWK.EMP_ORG org where sta.ORG_CODE = org.ORG_CODE and org.PTH like'100001/105990/106075%') union

select sta.sta_id from OWK.EMP_STAFF_ORG sta where sta.MFLAG=1andexists (select1from OWK.EMP_ORG org where sta.ORG_CODE = org.ORG_CODE and org.PTH like'100001/105990/106110%') union

select sta.sta_id from OWK.EMP_STAFF_ORG sta where sta.MFLAG=1andexists (select1from OWK.EMP_ORG org where sta.ORG_CODE = org.ORG_CODE and org.PTH like'100001/105990/112405%') union

select sta.sta_id from OWK.EMP_STAFF_ORG sta where sta.MFLAG=1andexists (select1from OWK.EMP_ORG org where sta.ORG_CODE = org.ORG_CODE and org.PTH like'100001/105990/116955%') union

select sta.sta_id from OWK.EMP_STAFF_ORG sta where sta.MFLAG=1andexists (select1from OWK.EMP_ORG org where sta.ORG_CODE = org.ORG_CODE and org.PTH like'100001/105990/106085%') union

select sta.sta_id from OWK.EMP_STAFF_ORG sta where sta.MFLAG=1andexists (select1from OWK.EMP_ORG org where sta.ORG_CODE = org.ORG_CODE and org.PTH like'100001/105990/106095%') )

AND tsk.DUE_DATE >='2017-07-01'

AND tsk.DUE_DATE <='2017-07-31'

ORDERBYYEAR(tsk.CREATE_TIME) DESC, pub.BRANCH_ID DESC

 

抓出关于表OWK.EMP_STAFF_ORG部分的SQL

select sta_id from OWK.EMP_STAFF where sta_id='157495'union

select sta.sta_id from OWK.EMP_STAFF_ORG sta where sta.MFLAG=1andexists

(select1from OWK.EMP_ORG org where sta.ORG_CODE = org.ORG_CODE and org.PTH like'100001/105990/106075%') union

select sta.sta_id from OWK.EMP_STAFF_ORG sta where sta.MFLAG=1andexists

(select1from OWK.EMP_ORG org where sta.ORG_CODE = org.ORG_CODE and org.PTH like'100001/105990/106110%') union

select sta.sta_id from OWK.EMP_STAFF_ORG sta where sta.MFLAG=1andexists

(select1from OWK.EMP_ORG org where sta.ORG_CODE = org.ORG_CODE and org.PTH like'100001/105990/112405%') union

select sta.sta_id from OWK.EMP_STAFF_ORG sta where sta.MFLAG=1andexists

(select1from OWK.EMP_ORG org where sta.ORG_CODE = org.ORG_CODE and org.PTH like'100001/105990/116955%') union

select sta.sta_id from OWK.EMP_STAFF_ORG sta where sta.MFLAG=1andexists

(select1from OWK.EMP_ORG org where sta.ORG_CODE = org.ORG_CODE and org.PTH like'100001/105990/106085%') union

select sta.sta_id from OWK.EMP_STAFF_ORG sta where sta.MFLAG=1andexists

(select1from OWK.EMP_ORG org where sta.ORG_CODE = org.ORG_CODE and org.PTH like'100001/105990/106095%')

用db2expln得到它的执行计划:

Optimizer Plan:

 

                                                                                Rows

                                                                              Operator

                                                                                (ID)

                                                                                Cost

 

                                                                              6.79546

                                                                              RETURN

                                                                               ( 1)

                                                                              6214.79

                                                                                |

                                                                              6.79546

                                                                              TBSCAN

                                                                               ( 2)

                                                                              6214.79

                                                                                |

                                                                              6.79546

                                                                               SORT

                                                                               ( 3)

                                                                              6214.79

                                                                                |

                                                                              41.2667

                                                                               UNION

                                                                               ( 4)

                                                                              6214.77

             +-----------------------+------------------------+-----------------+-----+-----------------------+---------------+-------------------+

           6.79546                 6.28938                  6.79546                 6.79546                 6.79546            1                6.79546

           HSJOIN                  HSJOIN                   HSJOIN                  HSJOIN                  HSJOIN          IXSCAN              HSJOIN

            ( 5)                    ( 8)                     (11)                    (14)                    (17)            (20)                (21)

           1034.53                 1034.53                  1034.53                 1034.53                 1034.53         7.58089             1034.53

          /       \               /       \                /       \               /       \               /       \          |                /       \

     102296     1.08021      102296     0.999762      102296     1.08021      102296     1.08021      102296     1.08021    101993        102296     1.08021

     TBSCAN     TBSCAN       TBSCAN      TBSCAN       TBSCAN     TBSCAN       TBSCAN     TBSCAN       TBSCAN     TBSCAN   Index:          TBSCAN     TBSCAN

      ( 6)       ( 7)         ( 9)        (10)         (12)       (13)         (15)       (16)         (18)       (19)    OWK              (22)       (23)

     293.6      735.957      293.6      735.957       293.6      735.957      293.6      735.957      293.6      735.957  P_STAFF_ID      293.6      735.957

      |           |           |           |            |           |           |           |           |           |                       |           |

    102296       16261      102296       16261       102296       16261      102296       16261      102296       16261                  102296       16261

 Table:         Table:   Table:         Table:    Table:         Table:   Table:         Table:   Table:         Table:               Table:         Table:

 OWK            OWK      OWK            OWK       OWK            OWK      OWK            OWK      OWK            OWK                  OWK            OWK

 EMP_STAFF_ORG  EMP_ORG  EMP_STAFF_ORG  EMP_ORG   EMP_STAFF_ORG  EMP_ORG  EMP_STAFF_ORG  EMP_ORG  EMP_STAFF_ORG  EMP_ORG              EMP_STAFF_ORG  EMP_ORG

Estimated Cost = 6214.787109

 

将SQL改编如下:

select sta_id from OWK.EMP_STAFF where sta_id='157495'union

select sta.sta_id from OWK.EMP_STAFF_ORG sta where sta.MFLAG=1andexists

(select1from OWK.EMP_ORG org where sta.ORG_CODE = org.ORG_CODE and

substr(org.PTH,1,20) in ('100001/105990/106075','100001/105990/106110','100001/105990/112405','100001/105990/116955','100001/105990/106085','100001/105990/106095'))

用db2expln得到新SQL的执行计划:

Optimizer Plan:

 

                     Rows

                   Operator

                     (ID)

                     Cost

 

                   40.2545

                   RETURN

                    ( 1)

                   1041.11

                     |

                   40.2545

                   TBSCAN

                    ( 2)

                   1041.11

                     |

                   40.2545

                    SORT

                    ( 3)

                   1041.11

                     |

                   41.2545

                    UNION

                    ( 4)

                   1041.09

                  /       \

           40.2545            1

           HSJOIN          IXSCAN

            ( 5)            ( 8)

           1033.51         7.58089

          /       \          |

     102296     6.39886    101993

     TBSCAN     TBSCAN   Index:

      ( 6)       ( 7)    OWK

     293.6      734.935  P_STAFF_ID

      |           |

    102296       16261

 Table:         Table:

 OWK            OWK

 EMP_STAFF_ORG  EMP_ORG

 Estimated Cardinality = 40.254482

         简单改写后,返回的结果集不变,但效率提高了很多。可见SQL语句

3.       didisrvdb02-逻辑读高问题:

逻辑读高的SQL:

update (select TRN_STATUS,REAL_SERIAL

from DPAY.TAB_OUSYS_INFO1

where TRN_STATUS=:L0 and CUST_ACCNO=:L1 and REAL_SERIAL=:L2 and ID>=:L3 and ID<=:L4

orderby id ascfetch first 5000 rows only)

set TRN_STATUS=:L5 ,REAL_SERIAL=:L6

 

查看表 DPAY.TAB_OUSYS_INFO1上的索引

索引名                                    索引包含的列

SQL160106192202630                      +MERCH_DATE+MERCH_SERIAL

OUSYS1_INDEX_1                          +ID+TRN_BATCH

OUSYS1_INDEX_2                          +TRN_STATUS+CUST_ACCNO+REAL_SERIAL+SEND_FLAG

OUSYS1_INDEX_3                          +TRN_STATUS+MERCH_DATE+ID

OUSYS1_INDEX_4                          +ID

 

表的行数及索引的键值情况如下:

db2 "select count(1) from DPAY.TAB_OUSYS_INFO1"

2685595

db2 "select count(distinct SEND_FLAG) from DPAY.TAB_OUSYS_INFO1"

1

db2 "select count(distinct TRN_STATUS) from DPAY.TAB_OUSYS_INFO1"

4

db2 "select count(distinct CUST_ACCNO) from DPAY.TAB_OUSYS_INFO1"

1

db2 "select count(distinct REAL_SERIAL) from DPAY.TAB_OUSYS_INFO1"

1247

db2 "select count(distinct ID) from DPAY.TAB_OUSYS_INFO1"

2685074

db2 "select count(distinct MERCH_DATE) from DPAY.TAB_OUSYS_INFO1"

6

db2 "select count(distinct MERCH_SERIAL) from DPAY.TAB_OUSYS_INFO1"

2685339

         从以上的数据可以看出,此表上的索引建立的很不合理。根据索引建立原则,我们应该选择强键值列作为索引列,而且越强的越要越放在前面,所以此表上的索引应该做如下优化:

l  对索引SQL160106192202630进行改造,使索引包含的列为+MERCH_SERIAL 或+MERCH_SERIAL+MERCH_DATE,这样根据MERCH_SERIAL检索时也可以用到此索引。

l  索引OUSYS1_INDEX_1可以保留,但意义不大,因为ID已经是强键值列。

l  对索引OUSYS1_INDEX_2进行改造,只保留REAL_SERIAL列,至少也应该将REAL_SERIAL列放在最前面。

l  索引OUSYS1_INDEX_3可以删除,至少也应该将ID列放在最前面。

l  保留OUSYS1_INDEX_4索引。

 

数据库活动时间为2016-01-06-20.19.41:

db2 "SELECT SUBSTR(DB_NAME, 1, 20) AS DB_NAME, DB_STATUS, SERVER_PLATFORM, DB_LOCATION, DB_CONN_TIME FROM SYSIBMADM.SNAPDB"

 

DB_NAME    DB_STATUS        SERVER_PLATFORM DB_LOCATION  DB_CONN_TIME

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

DIDIPRI      ACTIVE           aiX64            LOCAL        2016-01-06-20.19.41.644178

         检查数据库的索引使用情况:

db2 "SELECT VARCHAR(S.INDSCHEMA, 20) AS INDSCHEMA,VARCHAR(S.INDNAME, 20) AS INDNAME,T.DATA_PARTITION_ID, T.MEMBER,T.INDEX_SCANS,T.INDEX_ONLY_SCANS FROM TABLE(MON_GET_INDEX(null,null, -2)) as T, SYSCAT.INDEXES AS S WHERE T.TABSCHEMA = S.TABSCHEMA AND T.TABNAME = S.TABNAME AND T.IID = S.IID  and S.INDSCHEMA not like 'SYS%' ORDER BY INDEX_SCANS DESC"|more

数据库中非系统索引共336个:

db2 "SELECT count(*) FROM TABLE(MON_GET_INDEX(null,null, -2)) as T, SYSCAT.INDEXES AS S WHERE T.TABSCHEMA = S.TABSCHEMA AND T.TABNAME = S.TABNAME AND T.IID = S.IID  and S.INDSCHEMA not like 'SYS%'"

336

有99个索引自数据库激活以来从未使用:

db2 "SELECT count(*) FROM TABLE(MON_GET_INDEX(null,null, -2)) as T, SYSCAT.INDEXES AS S WHERE T.TABSCHEMA = S.TABSCHEMA AND T.TABNAME = S.TABNAME AND T.IID = S.IID  and S.INDSCHEMA not like 'SYS%' and T.INDEX_SCANS=0"

99

4.       问题分析及建议:

根据以上的问题分析,应用方面存在如下几个问题:

l  只考虑功能的实现,对是否会造成锁竞争,SQL语句执行效率是否底下考虑不足。

l  数据库存在大量的无效索引和不合理的索引。

几点建议如下:

l  在数据库报告中增加“从未使用的索引”项,并考虑删除以节省空间和提高效率。

l  对开发人员进行锁机制,SQL优化,建立高效索引方面的培训,以从源头解决问题,减少运维压力。

您可能感兴趣的文档:

--结束END--

本文标题: 近期一些典型的Case

本文链接: https://www.lsjlt.com/news/173686.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 近期一些典型的Case
    招行问题分析及建议 针对近期工作中出现的问题,我选取了一些典型案例并加上自己的分析。 1.       ftpdbn1-deadl...
    99+
    2022-11-30
    case 典型的 一些
  • 讨论Golang中的一些典型的内存错误
    Golang作为一门现代化的编程语言,其在内存管理方面拥有着出色的表现,但是即便如此,在使用过程中仍然难免会出现一些内存方面的错误。在本篇文章中,我们将讨论Golang中的一些典型的内存错误,以及解决这些问题的方法。内存泄漏内存泄漏是一种典...
    99+
    2023-05-14
  • python3-字典的一些常用方法
    # Auther: Aaron Fan#在dict_dict字典中包含字典那个脚本里介绍了这个方法的用法:'''print(av_catalog.setdefault('大陆',{'www.baidu.com':[1,2]}))  #如果a...
    99+
    2023-01-31
    字典 常用 方法
  • 典型的sql注入字符串有哪些
    典型的sql注入字符串方式有:sql注释语句,例如:–:表示单行注释/…/:用于多行(块)注释SELECT 查询语句,如:SELECT 列名称 FROM 表名称SELECT * FROM 表名称UNION操作符,如:...
    99+
    2024-04-02
  • JAVA的入门基础一些精典(转)
    JAVA的入门基础一些精典(转)[@more@]1.包package 在第一句引用package pkg1[.pkg2[.pkg3]];如果有一个例程Test.java:它的引用包:package hi; 先在当前目录下用javac -d ...
    99+
    2023-06-03
  • python中字典的键可以为哪些类型
    python中字典是一种可变容器模型,可以存储任意类型的对象,其中字典的值可以取任何数据类型,但字典的键必须是不可变类型,如字符串、数字和元组等。...
    99+
    2024-04-02
  • sql怎么插入一个日期型的数据
    sql要插入一个日期型的数据时,往往会想到simpledateformat: SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String date = sdf.for...
    99+
    2023-09-24
    mysql Powered by 金山文档
  • 浅谈Python的字典键名可以是哪些类型
    目录1 键的类型,列表/字典不可以,其它都可以2 多个对象可当作键名,顺序不同时是不同的键3 结论【有误】:今天看别人代码时发现一个事,就是把对象当作字典的键名,并且把两个对象(类的...
    99+
    2024-04-02
  • TensorFlow中的自然语言处理模型有哪些经典结构
    TensorFlow中的自然语言处理模型有以下经典结构: 循环神经网络(RNN):常用于处理序列数据,如文本数据。通过循环神经网...
    99+
    2024-03-01
    TensorFlow
  • Java常见的一些经典面试题(附答案解析)
    前言: 我想每个程序员比较头疼的事情都是:工作拧螺丝,面试造火箭吧。但是又必须经历这个过程,尤其是弄不清面试官问的问题,如果你准备的不是很充分,会导致面试的时候手足无措。今天这篇文章是从已工作5年的程序员面试几十次中挑选的面试概率比较大的一...
    99+
    2023-10-27
    java 面试 jvm mybatis mysql
  • css中一致的叙文类型有哪些
    小编给大家分享一下css中一致的叙文类型有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 一致的叙文类型 表达:序文类型...
    99+
    2024-04-02
  • 初识Java一些常见的数据类型
    目录1、Java是什么2、为什么总有人说Java是最好的语言3、一个简单的main函数4、运行Java程序5、Java书写 注意问题6、数据类型与运算符6.1变量和类型6.2 整型变...
    99+
    2024-04-02
  • ACCESS和SQL Server下Like日期类型查询的区别有哪些
    本篇内容主要讲解“ACCESS和SQL Server下Like日期类型查询的区别有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ACCESS和SQL Server下Like日期类型查询的区别...
    99+
    2023-06-08
  • YOLOV5-模型轻量化的一些常见方法
    欢迎关注、点赞、评论! YOLOv5是一个基于深度学习的目标检测算法,是YOLO系列算法的最新版本。YOLO是You Only Look Once的缩写,意味着只需要一次前向传递就可以完成...
    99+
    2023-10-03
    计算机视觉 python Powered by 金山文档
  • 高带宽的云服务器有哪些品牌型号和型号一样
    AWS Elastic Beanstalk:AWS Elastic Beanstalk是AWS 面向大型企业和数据中心的云服务器解决方案。AWS Elastic Beanstalk支持多节点和分布式部署,可以满足高性能和可靠性的要求,同时...
    99+
    2023-10-28
    型号 带宽 服务器
  • javaScript中一些常见的数据类型检查校验
    目录前言常见的几种数据校验方式typeof操作符instanceofconstructorcall && applyObject.prototype.toString...
    99+
    2024-04-02
  • 入门级云服务器有哪些型号的好一点
    存储容量:不同的云服务器支持的存储容量也不同,需要根据实际需要选择合适的存储容量。一般来说,云服务器可以支持数百个甚至数千个用户并发访问,而传统的物理服务器可能只能支持数百个甚至数十个用户。 数据备份和恢复:云服务器通常支持数据备份和恢复...
    99+
    2023-10-28
    入门级 型号 服务器
  • 阿里云一级代理有哪些产品类型的公司
    简介 在云计算领域,阿里云作为国内领先的云服务提供商,为各类企业提供了丰富多样的产品和服务。作为阿里云的一级代理,其主要职责是将阿里云的产品推广给潜在客户,并帮助他们选择最适合的产品和解决方案。本文将介绍一些典型的一级代理类型,以及它们与阿...
    99+
    2024-01-19
    阿里 一级代理 产品类型
  • 入门级云服务器有哪些型号好用一点的
    价格 价格是入门级云服务器最重要的考虑因素之一,因为它决定了你可以获得的服务质量和成本。MicroServer和MaxCompute是目前市场上最受欢迎的入门级云服务器,价格较为便宜。Solution和Azure Blob Stora...
    99+
    2023-10-27
    好用 入门级 型号
  • 入门级云服务器有哪些型号的好一点呢
    Amazon Elastic Web Services (ECS) Amazon Elastic Web Services(ECS)是一个全托管的云服务平台,为企业和开发者提供各种云计算服务。ECS提供弹性计算资源和存储资源,以及各种...
    99+
    2023-10-28
    入门级 型号 服务器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作