2010 年左右的时候,笔者曾服务于阿里旗下服装 ERP 公司。

该公司的 ERP 产品服务于全国 8W+ 零售店。当时用的语言是 Delphi(严重暴露自己的年龄了,估计现在的小朋友们都不知道 Delphi 是何物)。平时虽有些小流量,小卡顿倒也过得相当稳,技术部的开发们应付这些司空见惯的小问题还是多少有些把握的。

直到某天,上海已进入酷暑,特别热,人也燥,估计机器也燥。上午 10 点陆续有华东、华南地区的门店来电话,说结算特别慢,有些客户等得都发毛了,还都是星级老客户。要求技术部马上解决。技术经理马上召集大伙开会,意思是来活了,不一样的活。当然了老司机们是不当回事的,多吸两口烟,姗姗来迟。

当然,会议室的气氛相当凝重。

DBA 组老大谢工已经 OnCall 到位。这位团建时候都带着厚厚的从红门(Red Gate)打印的《 SQL Server Internals 》的中年男,给全场的威慑力是相当惊人的。他出现了,问题就严重了。当然姗姗来迟的老司机们也知道基本没他们什么事儿了,可死寂般的 16 平会议室却没给他们任何宽心的余地,紧盯着打着圈的 ERP 大屏一筹莫展。而另一屏的 ITIL 检测,已经显示数据库服务器 100% CPU利用率,横了近半小时,仍不见下去的表象。久横必跌,可惜真不是中国股市。

“周末有新上什么版本吗?” 显然谢工对之前的代码信心十足。

“没有大的动作,微调了下库存状态的查询接口。”

“涉及到了 SQL 的存储过程没?”

“我写了个查询,定义了一个参数,用来接收搜索条件?”

“调出来看看”

负责 UI 的小飞,抓过键盘,清脆的敲下了 sp_helptext.

“加了一个 @filter, 用来接收前端的各种组合查询条件,拼接成动态的 SQL ,灵活查询。”

“马上把这接口关了” 谢工没给一丝笑容,“你新来的吧,SQL 规范手册读了吗?”

“我刚进公司不久,上家公司也是做 ERP 的” 小飞似乎不满这种命令式的语气,说话间,修改了 web.xml.

"下来了,下来了...." 年轻的工程师瞬间喜笑颜开,似乎刚才就是一场短暂的地震。

“来来来,冰棍来了” 进入酷暑之后,技术经理每天的事情之一就是去买楼下的和路雪,“谢工,你给我们讲讲原理呗?”

“看在冰棍的面子上,就讲一句” 这谢工也是个贪食主义者,好吃!据说 IBM,EMC, HP(当年的三大咨询公司)努力挖,谢工也丝毫不动摇,宁愿在这里拿个基本工资,就是因为楼下的美食街。大嘴吃四方,是他的名言。每个星期还去锦江的自助旋转厅吃上一回,每次回去都被他老婆骂,但依然改不掉。“不抽烟,不喝酒,剩下的钱不得犒劳这张嘴么?” 谢工也经常在我们面前豪气的吹嘘自己怼媳妇儿的说辞。

"硬解析 SQL 文本将带来大量的 CPU 消耗!” 谢工本想留下这么句话就走,但经不住技术经理的满嘴妙语,“谢工,还是多讲讲吧,这句心法我都很难理解啊”

“一图胜千言,给大家留个图。再多说我也不会了,嘴笨!” 谢工神秘的从他的博客里挑出一张图,打在了 PPT 上

“谢工,你的意思是动态 SQL 引起了大量的硬解析,造成了 CPU 的紧张?” 小飞的眼神充满了悬疑。

“大量的 CPU 占用率阻塞了数据库的其他操作,挂起的操作,接连就会引起其他的等待。手册还是要看的,写的明白了,不要写动态 SQL”

猜你喜欢:

听说你们的数据库并发 2 万就跪了?

列出 SQL 数据库行数最多的前十张表,你要几秒?

BI, 数据仓库,ETL, 数据开发,有什么区别?

动态 SQL 你还敢用?相关推荐

  1. SQL Server-聚焦sp_executesql执行动态SQL查询性能真的比exec好?

    前言 之前我们已经讨论过动态SQL查询呢?这里为何再来探讨一番呢?因为其中还是存在一定问题,如标题所言,很多面试题也好或者有些博客也好都在说在执行动态SQL查询时sp_executesql的性能比ex ...

  2. mysql防注入pdo_mysql PDO和存储过程动态SQL注入

    正如我在许多文章中看到的那样,存储过程中的动态SQL容易受到SQL注入的攻击.但是,如果我们将先前的PDO与准备好的语句一起使用,这仍然不安全吗? 例: CREATE PROCEDURE my_sp( ...

  3. Mybatis Plus 是如何实现动态 SQL 语句的?原理你懂吗?

    作者 | 稻草江南 来源 | https://juejin.cn/post/6883081187103866894 Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,那么它是怎么 ...

  4. 为了熟练掌握动态SQL你必须要知道Mybatis中的OGNL表达式

    前言 OGNL是个什么东西?很多刚入门Java的同学会有点陌生.但是在Structs流行的时代OGNL可是必会的数据渲染技术.它全称Object Graph Navigation Language,作 ...

  5. Mybatis解析动态sql原理分析

    前言 废话不多说,直接进入文章. 我们在使用mybatis的时候,会在xml中编写sql语句. 比如这段动态sql代码: <update id="update" parame ...

  6. IBatis.net动态SQL语句

    在学习动态SQL语句之前,首先必须对条件查询有一定了解,先来学习如何向IBatis.Net的映射文件里传入参数. 一.条件查询 1.传递单个参数 如根据Id查询: <select id=&quo ...

  7. SQL Server-聚焦深入理解动态SQL查询(三十二)

    前言 之前有园友一直关注着我快点出SQL Server性能优化系列,博主我也对性能优化系列也有点小期待,本来打算利用周末写死锁以及避免死锁系列的接着进入SQL Server优化系列,但是在工作中长时间 ...

  8. MyBatis-11MyBatis动态SQL之【if】

    动态SQL概述 if概述 在WHERE条件中使用if 需求 1.UserMapper接口中增加接口方法 2.UserMapper.xml配置动态SQL 3.单元测试 在UPDATE条件中使用if 需求 ...

  9. MyBatis动态SQL底层原理分析

    前言 废话不多说,直接进入文章. 我们在使用mybatis的时候,会在xml中编写sql语句. 比如这段动态sql代码: <update id="update" parame ...

最新文章

  1. 为什么数据库连接池不采用IO多路复用?
  2. Python以表格、可视化图像的形式输出模型特征重要度(feature importances)并进行重要度归一化及排序
  3. mysql innodb文件_MySQL文件和Innodb引擎文件
  4. Could not load type 'System.Web.Mvc.ViewPagedynamic' in asp.net mvc2 after publishing the website
  5. 55种网页常用小技巧(javascript) (转)
  6. 为什么要把CV_8UC3(Vec3b)无符号整型转换成CV_32F(Vec3F)32位浮点数据类型?(在高精度下处理)
  7. 解题报告:51nod 加农炮
  8. Auto-Keras与AutoML:入门指南
  9. pycharm中文包:环境配置与编辑器使用(内附中文包地址)
  10. 训练日志 2019.9.15
  11. 用Python快速实现视频的人脸融合
  12. python能做什么工作-会python语言能做什么工作
  13. 电容的q值计算公式_(生活小贴士)一分钟了解“三星贴片电容的结构与材料特性”...
  14. HTTP代理socks5哪个快
  15. html登陆滑动验证,js实现登录时的滑动验证【原创】
  16. DeepFool论文翻译---DeepFool: a simple and accurate method to fool deep neural networks
  17. RedHat认证笔记-RH124
  18. 使用.NET Reflector
  19. 网络安全笔记-26-Linux-基础
  20. 14.C++读入一系列整数,统计出正整数个数i和负整数个数j,读入0则结束

热门文章

  1. 京麦消息中心业务模型分析(京东)
  2. minedata二维地图常用功能开发
  3. 小猫爪:S32K3学习笔记08-S32K3之MCAL中的FEE
  4. miui 7对应android系统,小米说MIUI 7和Android版本没有对应关系,你买账吗?
  5. 滚动截屏苹果_苹果为iPhone添加了“秘密”按钮,你学会使用了吗?
  6. RabbitMQ+PHP演示实例一
  7. 思科交换机【学习笔记】
  8. Python爬虫实例:爬取 viveport 上 1406 款VR游戏信息
  9. 通过拼数据库碎片的方式恢复虚拟机磁盘文件丢失问题
  10. java 判断对象是否为空_java怎么判断对象是否为空