>>与软件开发有关的知识:操作系统,数据库,网络通信等 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 18249 个阅读者 刷新本主题
 * 贴子主题:  一条垃圾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开发-->使用Session(Ⅱ)
  JSP与Hibernate开发-->映射对象标识符
  Java网络编程-->非阻塞通信
  精通Spring-->绑定CSS样式
  Vue3开发-->Vue CLI脚手架工具
  实战:上亿数据如何秒查
  SQL查询语句练习题
  MySQL全面优化实战总结!
  服务器排障 之 nginx 499 错误的解决
  构建高大上的MySQL监控平台
  Mysql启报错报的解决办法:The server quit without updatin...
  MySQL——mmm(Master-Master replication managerfor Mysql)...
  mysql启动报错的解决:Starting MySQL... ERROR! The server...
  打开黑盒:从 MySQL架构设计出发,看它是如何执行一条SQL语句...
  MySQL 事务
  MySQL 删除数据表
  SQL的SUM() 函数 的用法
  XML的DTD定义
  常见的加密算法及详解都总结在这里!
  Mysql备份与恢复
  更多...
 IPIP: 已设置保密
树形列表:   
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


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