[20211217]滑稽可笑的程序代码2.txt

[20211217]滑稽可笑的程序代码2.txt

–//实在不知道如何取标题..感觉很无奈无语…

–//昨天上午快下班的时候我使用ashtop看等待事件,无意中发现生产系统的一条sql语句执行时间有点长,但是快下班没有仔细看,下
–//午又因为别的时间下班了才仔细看该sql语句,我实在无法表达我昨天当时的心情,开发怎么能这样写程序代码。
–//下面仔细展开分析,分析有点繁琐,主要记录我自己整个的分析过程:

1.环境:
xxxx1> @ ver1
PORT_STRING VERSION BANNER
367u7411u9krd 0 YES :SYS_B_09 10 22 2021-12-17 02:00:35 NUMBER 301
YES :SYS_B_10 11 22 2021-12-17 02:00:35 NUMBER 0
YES :SYS_B_13 14 22 2021-12-17 02:00:35 NUMBER 302
YES :SYS_B_14 15 22 2021-12-17 02:00:35 NUMBER 0
YES :SYS_B_22 23 22 2021-12-17 02:00:35 NUMBER 0
YES :SYS_B_23 24 22 2021-12-17 02:00:35 NUMBER 1
YES :SYS_B_24 25 22 2021-12-17 02:00:35 NUMBER 794000
YES :SYS_B_25 26 22 2021-12-17 02:00:35 NUMBER 793000
8 rows selected.

–//查询B.CYPB in (0,1) 的相关数据,CYPB出院判别 0在院病人 1出院证明 2预结出院 8正常出院 9终结出院 99注销出院,也就是在
–//院病人的信息,有时候也需要了解一些业务信息。

–//我当时想那个用户有这么大的耐心在临晨时刻在电脑前翻页查询到794页,每次显示1000条。再仔细想想也许界面上有一个可以输入
–//查询页码的地方,再仔细看不对,查询里面没有order by,这样程序无法控制每次显示的一致性的,除非没人往表中输入数据,即使
–//没人做DML操作,每次显示也有可能出现不一致的,开发为什么这样写代码,在做什么,不理解?

–//参考链接:http://blog.itpub.net/267265/viewspace-2763181/=>[20210316]为什么刷新缓存后输出记录顺序发生变化.txt

–//看看awr记录这条语句的执行历史,我使用Tanel Poder的tpt scripts包,可以在https://tanelpoder.com/downloads/找到下载。
xxxx1> @awr/awr_sqlstats_per_exec.sql 367u7411u9krd % &100day
BEGIN_INTERVAL_TIME SQL_ID PLAN_HASH_VALUE EXECUTIONS ELA_MS_PER_EXEC CPU_MS_PER_EXEC ROWS_PER_EXEC LIOS_PER_EXEC BLKRD_PER_EXEC IOW_MS_PER_EXEC AVG_IOW_MS CLW_MS_PER_EXEC APW_MS_PER_EXEC CCW_MS_PER_EXEC
840 .0 23% 2021-12-16 01:00:00 2021-12-16 01:00:12 2021-12-16 01:59:33
830 .0 22% 2021-12-15 01:00:00 2021-12-15 01:00:17 2021-12-15 01:59:46
750 .0 20% 2021-12-17 01:00:00 2021-12-17 01:00:21 2021-12-17 01:59:51
310 .0 8% 2021-12-15 02:00:00 2021-12-15 02:00:07 2021-12-15 02:17:38
250 .0 7% 2021-12-16 02:00:00 2021-12-16 02:00:03 2021-12-16 02:14:02
250 .0 7% 2021-12-17 02:00:00 2021-12-17 02:00:22 2021-12-17 02:12:40
160 .0 4% 2021-12-16 00:00:00 2021-12-16 00:36:16 2021-12-16 00:58:41
130 .0 4% 2021-12-17 00:00:00 2021-12-17 00:33:23 2021-12-17 00:59:00
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
100 .0 3% 2021-12-15 00:00:00 2021-12-15 00:32:08 2021-12-15 00:59:46
30 .0 1% 2021-12-15 01:00:00 cell single block physical read 2021-12-15 01:04:20 2021-12-15 01:08:53
30 .0 1% 2021-12-17 01:00:00 cell single block physical read 2021-12-17 01:09:48 2021-12-17 01:11:39
10 .0 0% 2021-12-16 01:00:00 cell single block physical read 2021-12-16 01:09:39 2021-12-16 01:09:39
10 .0 0% 2021-12-16 01:00:00 gc cr grant 2-way 2021-12-16 01:07:48 2021-12-16 01:07:48
13 rows selected.

–//找到这台主机的machine,看看这段时间到底执行了什么?为了减少查询范围,加入条件session_id=14344.

xxxx1> @dashtop sql_id “MACHINE=’ZDFW\DELL56′ and to_char(sample_time,’hh24′) in (’00’,’01’,’02’) and session_id=14344” date’2021-12-17′ “timestamp’2021-12-17 02:30:00′”
Total
Seconds AAS %This SQL_ID FIRST_SEEN LAST_SEEN
1160 .1 98% 367u7411u9krd 58605 2021-12-17 00:33:23 2021-12-17 02:12:40
20 .0 2% g8usxst7f41xb 58605 2021-12-17 00:02:11 2021-12-17 00:03:22
–//SESSION_SERIAL#不变,基本可以确定同一个会话执行的。中间有30分钟做什么,或者没有抓到。

xxxx1> @awr/sqlh g8usxst7f41xb % &100day
BEGIN_INTERVAL_TIME SQL_ID PLAN_HASH_VALUE EXECUTIONS ELA_MS_PER_EXEC CPU_MS_PER_EXEC ROWS_PER_EXEC LIOS_PER_EXEC BLKRD_PER_EXEC IOW_MS_PER_EXEC AVG_IOW_MS CLW_MS_PER_EXEC APW_MS_PER_EXEC CCW_MS_PER_EXEC
2021-12-17 00:00:39 367u7411u9krd 2094450556 305 431 429 1000.0 73006 0 0 1.4 0 0 0
2021-12-17 01:00:44 367u7411u9krd 2094450556 491 1720 1650 998.0 333590 85 63 0.7 7 0 0
2021-12-17 02:00:48 367u7411u9krd 2094450556 91 2496 2489 1010.3 496449 0 0 0.0 0 0 1
3 rows selected.

–//305431 = 131455 =131秒
–//491
1720 = 844520 =845秒
–//91*2496 = 227136 =227秒
–//其他时间在做怎么,如果取1000条记录处理.每次处理一条,循环执行次数很多,我应该能看到内循环执行的sql语句.显然不是这样.

–//如果批量处理,这样每次执行能看到1次执行,如果处理很快,ash无法抓取倒是正常的.

–//难道还有另外的可能取出1000条,交给另外的机器处理数据吗?

–//我测试关闭statistics_level=typical,大约3秒传输完成(注意不是很精确).

–//3000*305 = 915000
–//915000+131455 = 1046455 ,1046 秒. (30分钟=1800秒).

–//看来只能使用10046跟踪看看.另外写blog以及脚本跟踪看看到底在做什么.

3.总结:
–//总结实在不知道什么写,以及当时的心情,我真心不明白开发做这样的查询为什么,如何保证查询数据一致性.

–//我们团队的代码如何管理的,这样的代码怎么能提交到生产系统使用.

–//语句除了写法存在问题外,应该放存储过程之类的,采用批量处理方式,并且在服务端执行减少网络往返.

Original: https://www.cnblogs.com/lfree/p/15761389.html
Author: lfree
Title: [20211217]滑稽可笑的程序代码2.txt

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/606224/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 【Linux】CMake源码编译安装教程

    步骤: 卸载旧版本 官网下载安装包 CMake源码编译安装 检查是否安装成功 Linux下,默认安装方式: sudo apt install cmake 如果使用默认的安装方式,这…

    Linux 2023年6月13日
    0105
  • SpringCloud gateway自定义请求的 httpClient

    本文为博主原创,转载请注明出处: 引用 的 spring cloud gateway 的版本为 2.2.5 ; SpringCloud gateway 在实现服务路由并请求的具体过…

    Linux 2023年6月14日
    097
  • 面试复盘(1)

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月7日
    0103
  • Java常见知识点总结

    1 重载 && 重写 重载: 发生在同一个类中, 方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。 重写: 发生在父…

    Linux 2023年6月7日
    099
  • 阿里云Linux-Centos8安装mysql8

    1. 安装MySQL 依次执行以下&#x…

    Linux 2023年6月14日
    093
  • 试吃香甜可口的《程序员面试指南》

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月6日
    077
  • openssl 签署SAN证书

    openssl, x509, SAN 1、Prepare openssl config file. cat > my-openssl.cnf << EOF [ c…

    Linux 2023年6月6日
    083
  • MIT6.824 Lab2调试过程

    2021-12-12 21:50 测试了5次,通过了并发用例。运行并发的用例的时候,会报第6个entry没有被三个节点中的任意一个apply。 看了看日志,发现第6个entry一直…

    Linux 2023年6月7日
    099
  • Redis16个常见使用场景

    目录 缓存 数据共享分布式 分布式锁 全局ID 计数器 限流 位统计 购物车 用户消息时间线timeline 消息队列 抽奖 点赞、签到、打卡 商品标签 商品筛选 用户关注、推荐模…

    Linux 2023年5月28日
    0111
  • Golang 实现 Redis(4): AOF 持久化与AOF重写

    AOF 持久化是典型的异步任务,主协程(goroutine) 可以使用 channel 将数据发送到异步协程由异步协程执行持久化操作。 在 DB 中定义相关字段: type DB …

    Linux 2023年5月28日
    0103
  • tcp 连接 time-wait 状态过多问题解释

    前言 两条竖线分别是表示: 主动关闭(active close)的一方 被动关闭(passive close)的一方 网络上类似的图有很多,但是有的细节不够,有的存在误导。有的会把…

    Linux 2023年6月16日
    0201
  • Redis主从复制、哨兵、Cluster三种模式

    Redis作为缓存的高效中间件,在我们日常的开发中被频繁的使用,今天就来说一说Redis的四种模式,分别是 「单机版、主从复制、哨兵、以及集群模式」。 可能,在一般公司的程序员使用…

    Linux 2023年5月28日
    0100
  • 增加Apache响应时间

    在apache的配置文件 httpd.conf 最下面加上下面代码,增加响应时间 FcgidProcessLifeTime 8200 FcgidIOTimeout 8200 Fcg…

    Linux 2023年6月7日
    0101
  • [ Linux ] 设置服务器开机自启端口

    https://www.cnblogs.com/yeungchie/ 需要用到的工具: crontab iptables crontab.set SHELL=/bin/bash P…

    Linux 2023年6月7日
    0111
  • Question08-查询没学过”张三”老师授课的同学的信息

    * SELECT * FROM Student WHERE SID NOT IN ( SELECT DISTINCT Student.SID FROM Student , SC ,…

    Linux 2023年6月7日
    098
  • MySQL注入与informantion_schema库

    只可读 自动开启 和MySQL注入有关的3个表 手动注入的使用案例 表介绍 查询一个表中全部字段的过程 MySQL V5.0安装完成会默认会生成一个库(informantion_s…

    Linux 2023年6月6日
    0114
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球