>>与软件开发有关的知识:操作系统,数据库,网络通信等 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 23658 个阅读者 刷新本主题
 * 贴子主题:  一条垃圾SQL,把 64 核 CPU 快跑崩了! 回复文章 点赞(0)  收藏  
作者:Jacky    发表时间:2020-07-13 00:07:06     消息  查看  搜索  好友  邮件  复制  引用

  
     最近系统出了一个严重问题,应用程序卡崩导致不可用,把 Oracle 数据库服务器 64 核 CPU 快被跑满了:

                点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

一条垃圾SQL,把 64 核 CPU 快跑崩了!

     经定位,是因为一条垃圾 SQL 引起的!!

     其实也就是一条很简单的 SQL:
  select .. from xxx where xx_no = 20200400001
为了信息安全,以上 SQL 经过处理。

     其实就是根据 XX_NO 查询一 条数据,然后查询条件和字段数据类型不一致,结果隐式转换导致索引失效而全表扫描……
  • 字段类型为:NVARCHAR2
  • 查询条件类型为:NUMBER
这也是老生常谈的问题了,MySQL 也有同样的问题,SQL很简单,问题很严重!!!

     来看下数据类型不一致时的 Oracle 的查询解释计划:
  select .. from xxx where xx_no = 20200400001
            点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

一条垃圾SQL,把 64 核 CPU 快跑崩了!

     结果:导致隐式转换,全表扫描

     当字段类型和查询条件数据类型不一致的时候,如果没有转换函数,就会默认隐式转换,当数据类型不能隐式转换时就会报错。

     再看下数据类型一致时的 Oracle 的查询解释计划:
  select .. from xxx where xx_no = '20200400001'
            点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

一条垃圾SQL,把 64 核 CPU 快跑崩了!

     结果:唯一索引扫描

     再看下两个 SQL 的 IO、CPU 耗费,全表扫描和走唯一索引时的效率真是差距太大,全表扫描是大忌!

     还好这个表的数据不是很大,不然后果会不堪设想。。

     所以在工作中,应该要避免隐式转换,要使用显式转换(转换函数,),遵循 "字段是什么类型,就用什么类型的" 的原则,多用查询分析器检查下。
  转载自公众号:Java技术栈
----------------------------
原文链接:https://www.jianshu.com/p/e24a4778de86

程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-08-23 21:37:22 重新编辑]
  Java面向对象编程-->集合(上)
  JavaWeb开发-->JSP中使用JavaBean(Ⅱ)
  JSP与Hibernate开发-->Java应用分层架构及软件模型
  Java网络编程-->用Spring整合CXF发布Web服务
  精通Spring-->绑定CSS样式
  Vue3开发-->计算属性和数据监听
  Mysql启报错报的解决办法:The server quit without updatin...
  SQL ROUND() 函数
  SQL 通用数据类型汇总
  SQL ISNULL()、NVL()、IFNULL() 和 COALESCE() 函数
  SQL 撤销索引、表以及数据库
  SQL的创建表(CREATE TABLE) 语句的用法
  SQL SELECT INTO 语句
  比较XML的子元素和属性
  CentOS7.5使用mysql_multi方式安装MySQL5.7.28多实例
  Mysql提升效率的神器: 索引
  linux系列之常用运维命令整理
  程序员必须掌握的核心算法有哪些?
  数据库设计(一)——数据库设计-生命不息,奋斗不止
  为什么要分库分表?用过哪些分库分表中间件?
  消息队列、消息代理和消息中间件的区别和联系
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。