`
qcyycom
  • 浏览: 182041 次
社区版块
存档分类
最新评论

一条Select语句导致瓶颈

    博客分类:
  • sql
阅读更多

 

情况 上周,公司一项目新上线,刚上线的第2天,在后台发现数据库服务器与IIS服务器的网络IO出现瓶颈,1GB的网络带宽,占用了70%-100%,也就是每秒传输数据700MB-1GB,数据库使用内存高达21GB。

IIS服务器CPU使用率时常爆至80%-90%,导致网站频频出现连接超时。

 

原因 晚上只好暂时关闭网站,进行服务器维护,作全面的检查跟踪,发现是一句Select语句导致:

 

Select  *  From  Table1

 

这条语句,语法是没问题的,但在应用上出了问题。Table1存储的是10多万行数据,表数据每天都会上万的增长。

为了统计总行数,频频调用这语句,每秒刷新不低于1000次。

也因此导致网络出现瓶颈。

 

解决: 后面把Select语句改成

 

Select  Count (1from  Table1 

 

 即可解决问题,网络 IO数据马上降至10MB以下,数据库使用内存也保持在预计范围12GB。

 

看似非常简单的问题,其实不然。解决这问题,所花的时间周期是6小时,检查问题使用1小时,修改代码使用5小时。 

 

  小结:

  java进阶 做事要细心,不要犯低级错误,有时候成功取决于细节。

更多信息请查看 java进阶网 http://www.javady.com

28
46
分享到:
评论
56 楼 jiaoronggui 2012-06-10  
遇到过一模一样的问题
55 楼 cookcoffee 2012-05-18  
1GB的带宽不是意味著最大传输速度约128MB每秒?
54 楼 zouzou 2012-05-16  
成功取决于细节
53 楼 mikixiyou 2012-05-16  
哈哈,好多人都看出来了。java进阶的广告贴啊。。。
52 楼 ifox 2012-05-16  
最后一句是个亮点。
51 楼 sunjiyun26 2012-05-16  
无语,统计行数有用 select * 的吗,刚学的也知道 count(*) 吧,
50 楼 fantasyeye 2012-05-16  
看到这贴~我顿时无语了~~~
人才年年有~今年特别多~~
49 楼 bing_zz 2012-05-16  
爪哇岛岛主 写道
楼猪达到了目的,亮点是最后的‘小结’的链接~

原来是广告,引用上面的兄弟的话:Select * From Table1 ,  Select Count(1) from Table1 这两条语句压根不是一路的啊。
我说呢,谁会这样查数据总量的。
48 楼 爪哇岛岛主 2012-05-16  
楼猪达到了目的,亮点是最后的‘小结’的链接~
47 楼 zhangchang 2012-05-16  
说实话真是够低级的错误,说明从一开始就对系统性能没有什么考虑。对于系统整体数据量根本就没有人清楚。开发人员只是用几条数据测试,所以会觉得 select * 和 select count(1)处理速度没有差别。
46 楼 ShorenG 2012-05-16  
为什么大家都一边倒的都不屑于这个错误呢?
45 楼 whking2003 2012-05-15  
shhyuhan 写道
这个也能上首页?看来我要离开ITEYE了

+1
44 楼 vb2005xu 2012-05-15  
无奈了 .... 做下缓存不就行了 .....

43 楼 joehe 2012-05-15  
什么公司,请了你这样的员工。混成这样,也算是神人了。
42 楼 cao_z_c 2012-05-15  
这篇文章也为推荐,我表示非常无语。
41 楼 unique.wu 2012-05-15  
从百草园到三味书屋 写道
笑而不语,楼主啊!Select * From Table1 ,  Select Count(1) from Table1 这两条语句压根不是一路的啊



呵呵
40 楼 istend 2012-05-15  
从学生的角度来说, 这不是问题,  从我的角度来说,写*的人,是刚毕业的,    从大家的回答来说,菜鸟还是那么多。。。     大家对数据库真正了解多少?数据库
39 楼 liuyuantp 2012-05-15  
如果我要查很多的字段而不是数据的数量呢?
38 楼 lwclover 2012-05-15  
我表示写这段代码的人 很脑残
37 楼 泡咖啡 2012-05-15  
哎。。。...

相关推荐

    一条select语句引起的瓶颈问题思考

    原因:晚上只好暂时关闭网站,进行服务器维护,作全面的检查跟踪,发现是一句Select语句导致: Select * From Table1 这条语句,语法是没问题的,但在应用上出了问题。Table1存储的是10多万行数据,表数据每天都会...

    ecplain详解和索引最佳实战.doc

    MySQL索引优化,explain语法的使用详解和实战。 使用EXPLAIN关键字可以模拟优化器执行...在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是执行这条SQL。

    详解mysql中explain的type

    很多情况下,有很多人用各种select语句查询到了他们想要的数据后,往往便以为工作圆满结束了。 这些事情往往发生在一些学生亦或刚入职场但之前又没有很好数据库基础的小白身上,但所谓闻道有先后,只要我们小白好好...

    Explain详解与索引实践.pdf

    使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈 在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返 回执行计划的信息,而不是执行这条SQL

    MySQL中主键与rowid的使用陷阱总结

    前言 大家在MySQL中我们可能听到过rowid的概念,...记得有一天统计备份数据的时候,写了一条SQL,当看到执行结果时才发现SQL语句没有写完整,在完成统计工作之后,我准备分析下这条SQL语句。 mysql> select backup_da

    支持多数据库的ORM框架ef-orm.zip

    例如:数据库查询条件的传入问题是所有ORM框架都不能回避的一个问题,所以我经常在想——既然我们可以用向DAO传入一个Entity来实现插入操作,为什么就不能用同样的方法来描述一个不以主键为条件的update/select/...

    MySQL性能优化的最佳20+条经验

    今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时...

    asp.net知识库

    如何解决ACCESS中SELECT TOP语句竟然返回多条记录的问题? Asp.net 利用OleDb的GetOLEDBSchemaTable方法得到数据库架构信息 用于 Visual Studio .Net 的 IBM DB2 开发外接程序 第2章 并发操作的一致性问题 (2) Using...

    MySQL 的 20+ 条最佳实践

    数据库操作是当今 Web 应用程序中的主要瓶颈。 不仅是 DBA(数据库管理员)需要为各种性能问题操心,程序员为做出准确的结构化表,优化查询性能和编写更优代码,也要费尽心思。 在本文中,我列出了一些针对程序员的 ...

Global site tag (gtag.js) - Google Analytics