[20180810]exadata--豆腐渣系统的保护神.txt

--//最近一段时间,一直在看exdata方面的书籍,我个人的感觉exadata并非善长oltp系统,能通过OLTP获得好处的就算exadata的闪存(也叫
--//智能闪存).当然大部分系统负载类型都是混合型的,但是如果你系统OLTP占的比例越大,使用exadata带来的受益越小.
--//如同你买了一辆豪华平跑车,却跑在乡间的小道上.
--//一次开会,跟一位同行闲聊,我跟他提到我们使用exadata更多的是掩盖应用系统拙劣的设计,拙劣sql语句,保证业务能正常运行.^_^.
--//因为没有exadata,会频繁出现性能问题.

--//我拿一个我们生产系统的例子来说明,最近看awr报表发现(自己好久没看生产系统的awr报表):

IOStat by Function/Filetype summary
'Data' columns suffixed with M,G,T,P are in multiples of 1024 other columns suffixed with K,M,G,T,P are in multiples of 1000
Ordered by (Data Read + Write) desc for each function
Function/File Name              Reads: Data   Reqs per sec    Data per sec     Writes: Data  Reqs per sec   Data per sec Waits: Count Avg Tm(ms)
Smart Scan                      267.9G         77.60          76.622M                    0M          0.00             0M           0   
Smart Scan (Data File)          267.9G         77.60          76.622M                    0M          0.00             0M           0   
Buffer Cache Reads              11.4G         359.56          3.235M                     0M          0.00             0M     1228.4K     0.50
Buffer Cache Reads (Data File)  11.4G         359.56          3.235M                     0M          0.00             0M     1228.4K     0.50
....

--//我注意到以前Smart Scan,Buffer Cache Reads基本一样,当然排除一些开发执行的一些sql.而现在Smart Scan高出许多倍.有时候更
--//高.明显不正常
--//即使这样:
Event Waits %Time -outs Total Wait Time (s) Avg wait (ms) Waits /txn % DB time
log file sync 412,930 0 866 2 0.90 7.56
cell single block physical read 549,727 0 756 1 1.19 6.60
enq: TX - row lock contention 88 0 286 3248 0.00 2.50
SQL*Net more data to client 13,886,052 0 180 0 30.18 1.58
reliable message 394,893 0 140 0 0.86 1.22
cell list of blocks physical read 37,672 0 64 2 0.08 0.56
cell multiblock physical read 41,216 0 52 1 0.09 0.45
cell smart table scan 28,895 44 22 1 0.06
--//cell smart table scan Total Wait Time (s)也就22秒.

--//查询:
select count(*),sql_id from v$active_session_history where event='cell smart table scan' group by sql_id order by 1 desc;
...

--//当我拿看到的这些sql_id查询awr报表时,发现这些sql语句根本不出现在awr报表?
--//而我执行如下:
select * from v$active_session_history where sql_id='&sql_id' order by 2 desc;

--//我发现这些语句10分钟调用1次.而awr报表10秒取样一次,这些语句被漏掉了.仅仅存在v$active_session_history视图.
--//我拿其中一条语句分析:

/* Formatted on 2018/8/10 9:34:52 (QP5 v5.269.14213.34769) */
SELECT a.zyh presno
      ....
      ,a.jfrq oderDatetime
      ,'''''' AS diagnosis
  FROM yf_zyfymx a
      ,yk_typk c
      ,ms_brda d
      ,gy_ksdm g
      ,yf_yflb l
      ,yk_cddz m
      ,zy_brry n
 WHERE     a.zyh = n.zyh
       AND n.mzhm = d.mzhm
       AND a.ypxh = c.ypxh
       AND a.lybq = g.ksdm
       AND a.yfsb = l.yfsb
       AND a.ypcd = m.ypcd
       AND a.yfsb = 4
       AND a.ypsl > 0
       AND a.jfrq > TO_DATE ('2017-09-20', 'yyyy-mm-dd')
       AND NOT EXISTS
              (SELECT  jlxh
                 FROM YF_ZY_LY_UPLOAD
                WHERE jlxh = a.jlxh AND fy = 1)
              
--//注:语句输出字段很多,我省略了.
--//很明显a.kfrq查询范围很大,导致yf_zyfymx表走全表扫描(表大小10g).走直接路径读.类似这样的语句有4条.
--//仅仅fy = 1 变成别的字段 = 1.

--//还有的问题就是不应该写成NOT EXISTS,注:fy 仅仅有2个取值.而应该写成如下:
AND EXISTS (SELECT  jlxh FROM YF_ZY_LY_UPLOAD WHERE jlxh = a.jlxh AND fy = 0)
--//这样建立fy建立索引,如果fy=0很少的话,也可以加快查询.但是问题的本质还是前面的查询时间范围太大.
--//要修改必须2个都要,这样效果就很明显了.

--//实际上正是exadata运行太快,我估计存储索引在这里发挥很大作用,导致这样的语句没有出现在awr报表导致这个语句到现在才发现,我
--//甚至估计a.kfrq > TO_DATE('2017-09-20', 'yyyy-mm-dd')时间是某个衔接项目的上线时间.开发写这样代码我自己真心很无语..

--//结果集随着时间流逝,变得越来越大....真心不知道开发为什么要这样写....

--//查询Segments by Physical Reads部分:

Segments by Physical Reads
Total Physical Reads: 36,791,770
Captured Segments account for 93.1% of Total
Owner      Tablespace Name Object Name                Subobject Name Obj. Type Physical Reads %Total
xxxxxx_yyy xxxxxx_yyy      MS_CF01                                   TABLE         17,796,271 48.37
xxxxxx_yyy xxxxxx_yyy      YF_ZYFYMX                                 TABLE         15,197,689 41.31
xxxxxx_yyy xxxxxx_yyy      IDX_ZY_FYMX_FYRQ                          INDEX            642,671 1.75
xxxxxx_zzz xxxxxx_zzz      I_EMR_BL_BASYSJ_JZHM_XMXH_QZ              INDEX            144,043 0.39
xxxxxx_yyy xxxxxx_yyy      BQ_TJ02                                   TABLE            101,577 0.28

--//从这里也相互验证.前面2个占了48.37,41.31.

15197689*8192/1024/1024/1024 = 115.94916534423828125000 = 116G
17796271*8192/1024/1024/1024 = 135.77477264404296875000 = 136G
116+136 = 252 G
--//与前面看到IOStat by Function/Filetype summary 的Smart Scan= 267.9G很接近.

总结:
正是exadata的特性掩盖问题的本质.如果这样的系统迁移到非exadata设备,系统根本没法用.换一句话讲,上了贼床根本下不来.
也正是我要表达的思想:exadata--豆腐渣系统的保护神.
总而言之,写好sql语句.优化sql语句才是关键.合理的设计才是最重要的.
在加上exadata的特性才能如虎添翼.

实际上我们团队的态度更加让人感到沮丧,不去查找问题的本质...而是等待问题的出现....

--//后记:开发修改代码后YF_ZYFYMX从Segments by Physical Reads消失.上班在看看a.kfrq 的查询范围.

Segments by Physical Reads
Total Physical Reads: 4,605,265
Captured Segments account for 76.4% of Total
Owner      Tablespace Name Object Name                Subobject Name Obj. Type Physical Reads %Total
xxxxxx_yyy xxxxxx_yyy      MS_CF01                                   TABLE         13,165,929 88.75
xxxxxx_yyy xxxxxx_yyy      ZY_FYMX                                   TABLE             86,625 1.88
xxxxxx_yyy xxxxxx_yyy      BQ_TJ02                                   TABLE             53,719 1.17
xxxxxx_zzz xxxxxx_zzz      I_EMR_BL_BASYSJ_JZHM_XMXH_QZ              INDEX             40,006 0.87
xxxxxx_yyy xxxxxx_yyy      I_ZY_FYMX_JFRQ                            INDEX             25,916 0.56

Event Waits %Time -outs Total Wait Time (s) Avg wait (ms) Waits /txn % DB time
cell smart table scan 5,882 48 3 0 0.01 0.02
--//cell smart table scan Total Wait Time (s)也就3秒.换一句话讲仅仅带来不到20秒的受益.
--//甚至可以这么讲,可能走直接路径读使用cell smart table scan可能还更快.^_^.我估计可能a.kfrq查询范围应该是几天之前的.
--//这样走索引效率也不会太高(因为返回记录多),优化感觉还是很矛盾...
--//顺便提一下表MS_CF01也是一样的问题.类似语句如下:

SELECT a.cfhm presno
....
      ,k.sfrq oderDatetime
      ,'''''' AS diagnosis
  FROM ms_cf01 a
      ,ms_cf02 b
      ,yk_typk c
      ,ms_brda d
      ,gy_ksdm g
      ,zy_ypyf h
      ,gy_sypc i
      ,ms_mzxx k
      ,yf_yflb l
      ,yk_cddz m
 WHERE     a.cfsb = b.cfsb
       AND b.ypxh = c.ypxh
       AND d.brid = a.brid
       AND a.ksdm = g.ksdm
       AND b.gytj = h.ypyf(+)
       AND b.ypyf = i.pcbm(+)
       AND a.fphm = k.fphm
       AND a.yfsb = l.yfsb
       AND m.ypcd = b.ypcd
       AND a.yfsb IN (1, 4, 5)
       AND a.kfrq > TO_DATE ('2017-06-26', 'yyyy-mm-dd')
       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       AND a.zfpb = 0
       AND a.fphm IS NOT NULL
       AND a.mzxh <> DECODE (a.upload_ly_sf, '', 0, a.upload_ly_sf)
       AND a.mzxh <> 0
ORDER BY cfsb DESC;

转载于:https://www.cnblogs.com/lfree/p/9458407.html

[20180810]exadata--豆腐渣系统的保护神.txt相关推荐

  1. windows和linux系统之间的txt文档兼容问题

    windows和linux系统之间的txt文档兼容问题 在给公司做自动化文件同步的测试时,出现的这个问题,因为本地开发的从外网拿同步路径列表的脚本文件没有svn上传.就在windows机器上生成了文件 ...

  2. phpems考试系统如何处理word txt题库并导入系统

    基本系统安装不说了,直接说如何处理题库数据成csv格式 假如有如下题库: 关于查询.冻结,下列说法错误的是( ).答案是:A A.向金融机构查询犯罪嫌疑人的存款,应当经办案部门负责人批准 B.犯罪嫌疑 ...

  3. Python通过Kivy-Buildozer打包apk时,如何在安卓系统下读写txt文件

    在通过Kivy-Buildozer打包成apk在安卓手机运行. 按之前存放图片和字体,音乐文件的方法,在根目录下建立一个log文件夹,里面存放txt文件做为程度的日志记录.log文件夹里的txt文件无 ...

  4. win系统excel、txt文件传到linux,行列数对不齐,乱码的的问题

    问题描述:因为自己研究需要经常跨win和linux两个平台,由于两个平台下txt编码方式不一样,经常会出现穿过去txt文件数据对不齐,无法读取的情况. 自己遇到的一个案例是,我需要把excel的气象数 ...

  5. srttrail txt无法开机_win10系统如何修复srttrail.txt错误提示 srttrail不能开机的解决方法...

    如何修复windows 10上的srttrail.txt bsod错误?最近有不少win10正式版系统用户在开机的时候,反映说遇到了无法开机的现象,并提示日志文件srttrail.txt,是什么原因造 ...

  6. Win10日语中文系统语言切换及txt、Excel宏乱码原因分析

    最近需要共享一些文件,日语系统的.txt和中文带宏的Excel.日语系统无法打开Excel的宏,会提示已损坏:中文系统打开txt会乱码,无法读取. 经过一番测试,得出大致原因是:由于txt创建时使用的 ...

  7. python最简单选课系统作业_python之路——作业:学生选课系统

    一.作业要求: 选课系统: 角色:学校.学员.课程.讲师 要求: 1. 创建北京.上海 2 所学校 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go ...

  8. C语言餐馆点菜系统设计,order-system 使用c语言设计的餐厅点菜系统 - 下载 - 搜珍网...

    餐厅点菜系统/Menu/凉菜类.txt 餐厅点菜系统/Menu/家常小炒.txt 餐厅点菜系统/Menu/干锅.火锅.txt 餐厅点菜系统/Menu/投诉建议.txt 餐厅点菜系统/Menu/机密文件 ...

  9. windows系统无法保存文件的解决方案

    ❤关注我,不迷路❤ 点击进入PC常见故障汇总专栏 近期收到部分反馈,在windows的电脑上保存一个文件的时候(另存为),选择完目标文件夹后无法保存,点击系统的保存按钮(有些系统展示为打开按钮)后文件 ...

最新文章

  1. 蓝桥杯:算法提高 9-2 文本加密
  2. 高等数学、线性代数、概率论数理统计书籍推荐
  3. 国际化的Struts的开发步骤简介
  4. Dapr 客户端 搭配 WebApiClientCore 玩耍服务调用
  5. 一个大数据应用是如何炼成的?
  6. 一起了解和成为“敏捷个人”(为参加5.29活动预热)
  7. RoboWare studio学习笔记
  8. ZOOM 无法登入怎么办
  9. 好好编程-物流项目02【tomcat插件启动web项目】
  10. java 验证码图片不显示图片_验证码图片生成及无法显示问题的解决
  11. 使用讯飞tts实现安卓语音中文合成播报
  12. 创建Date对象的几种方式
  13. 苹果电脑Chrome浏览器截网页长图
  14. IPSEC协议及当中IKE协商加解密原理
  15. HazelEngine 学习记录 - 2D Renderer Transforms and 2D Renderer Textures
  16. 对邮件服务器的一点思考
  17. 我们是创业团队,实习前两月没钱,全栈每月800块!
  18. 安卓学习底层开发学习方法?
  19. pycharm 破解方法
  20. 如何证明服从卡方分布_卡方分布的重要定理x拔与s∧2相互独立

热门文章

  1. qt 5.0中HeaderView的setResiziMode无法使用的问题
  2. python版:装饰器模式
  3. Java知识系统回顾整理01基础03变量03字面值
  4. 增加VirtualBox虚拟机的磁盘空间大小(Host:Win7 VirtualBox5.0.16 VM:Win10)
  5. LSSS线性秘密共享方案详细构造方法与原理解释试读
  6. 微软打脸,Windows 7 再次成为微软的头号桌面操作系统
  7. 安徽中职计算机专业对口高考,安徽对口高考和普通高考有什么区别?
  8. python箴言_Python高效率编程的8条箴言
  9. python合并两个excel文件_利用Python将多个excel文件合并为一个文件
  10. 某厂面试:如何优雅使用 SPI 机制