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, 数据开发,有什么区别?