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

一条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`语句如何引发了严重的性能瓶颈,并如何通过优化SQL查询来解决。首先,我们来看一下原始的`SELECT`语句:`Select * From Table1`。这个语句的作用是从`Table1`中选取所有的列,...

    SQL Server 2000优化SELECT语句方法

    在SQL Server 2000中,优化SELECT语句对于提升数据库性能至关重要。本文主要探讨了几个关键的优化方法和工具,旨在帮助开发者和DBA理解如何改进查询效率。 首先,SET STATISTICS IO是一个用于检查查询I/O活动的实用...

    Oracle性能分析——使用set_autotrace_on和set_timing_on来分析select语句的性能.doc

    Oracle 提供了多种方式来获得一条 SQL 语句的查询计划,例如使用 explain plan 命令,在 SQLDeveloper 里面按 F6 快捷键等。但是,在 sqlplus 工具下,使用 set autotrace on 和 set timing on 的方式是比较简便的...

    2个SQL优化语句,查询出来哪条SQL语句占据资源最多.rar

    这有助于我们识别并解决可能导致系统瓶颈的问题,提升整体数据库性能。 首先,让我们看看"Script 4-6 查找CPU最高消耗的10个语句.sql"这个脚本。这个脚本的目标是列出最近执行的SQL语句中,CPU消耗最大的前10个。...

    oracle监听执行sql语句

    这条SQL语句通过连接`v$session`和`v$sqlarea`两个视图来获取当前会话中执行的SQL语句及其完整文本。其中`v$session`包含了所有活动会话的信息,而`v$sqlarea`则存储了最近执行过的SQL语句的元数据。通过`a.sql_...

    SQL 语句完全优化

    比如,通过一次执行多个INSERT或UPDATE语句来替代单条语句的多次执行。 #### 5. 使用工具增强性能 - **SQL*Plus、SQL*Forms等工具**:这些工具提供了丰富的特性来帮助开发者更好地管理和优化SQL语句。例如,调整...

    DB2 SQL语句性能分析方法

    以下是一个示例输出片段,展示了一条SELECT语句的执行情况: ```plaintext 5) Statement Event ... Appl Handle: 12 Appl Id: *LOCAL.DB2.030421054225 Appl Seq number: 0001 Record is the result of a flush: ...

    Oracle常用性能监控SQL语句

    ### Oracle常用性能监控SQL语句知识点详解 #### 1. 监控高磁盘读取的SQL区域 ...每一条SQL语句都针对特定的问题进行了设计,通过对这些SQL语句的理解和应用,可以有效地提升数据库的性能并解决各种性能问题。

    abap 关于SQL语句的性能

    使用循环中的SELECT语句会随着数据量的增加而呈现出线性增长的性能下降趋势,而采用一次性查询的方式则可以有效地避免这种性能瓶颈,尤其是在处理大规模数据时,其优势更加明显。 ### 结论 总之,优化ABAP中的SQL...

    oracle查看执行最慢与查询次数最多的sql语句

    本文将详细介绍如何查看Oracle数据库中执行最慢和查询次数最多的SQL语句,以帮助DBA(数据库管理员)识别潜在的性能瓶颈。 首先,我们来看如何查询执行最慢的SQL语句。在Oracle中,可以使用`v$sqlarea`视图来获取...

    提升MYSQL查询效率的10个SQL语句优化技巧.doc

    你可能会去的一条十分独特的记录,或者只是刚好检查了任何存在的记录数,他们都满足了你的 WHERE 子句。在这种情况下,增加一个 LIMIT 1 会令你的查询更加有效。 4. 索引中的检索字段 索引不仅是主键或唯一键。...

    解决 MySQL 服务器进程 CPU 占用 100%25的技术笔记.doc

    - 第一个 SQL 语句涉及三个表的连接操作: ```sql SELECT t1.pid, t2.userid, t3.count, t1.date FROM _mydata AS t1 LEFT JOIN _myuser AS t3 ON t1.userid=t3.userid LEFT JOIN _mydata_body AS t2 ON t1....

    sql最全的常用命令语句

    第一条命令返回 `sys.dm_os_wait_stats` 动态管理视图中的前10条记录,这些记录按照等待时间 (`wait_time_ms`) 降序排列。 2. 第二条命令则专门筛选出等待类型为 `PAGELATCH` 和 `LAZYWRITER_SLEEP` 的记录。 ###...

    oracle 查看前数据库中: 谁在运行什么 SQL语句

    由于一条SQL语句可能跨越多个块,所以按`address`和`piece`排序可以确保语句的完整性和顺序。 4. **SQL查询的执行**: - 在SQL*Plus或任何支持Oracle的开发工具中,你可以直接输入这个查询来获取结果。这将列出...

    Mysql查询最近一条记录的sql语句(优化篇)

    本文将探讨如何在MySQL中查询最近一条记录,并提供不同级别的查询优化策略。 首先,我们来分析一下基础的SQL语句。一个简单的查询最近一条记录的方法是通过`ORDER BY`和`LIMIT`结合,如下所示: ```sql SELECT * ...

    SQL语句优化原则

    游标的使用应当非常谨慎,因为它可能会导致性能瓶颈。 #### 26. 避免循环中的游标使用 如果可以在游标之前找到更高效的解决方案,则应优先考虑。 #### 27. 避免使用不可前进游标 除非必要,否则应避免使用不可...

    高效SQL语句编写(how-to-write-efficient-sql)

    特别是在高并发环境下,一条不合理的SQL语句就可能导致整个数据库系统的性能瓶颈,甚至引发故障。 #### 二、提高SQL效率的方法 为了编写出高效的SQL语句,可以从以下几个方面入手: ##### 1. 合理运用新特性 随着...

    删除锁表语句

    1. 使用第一条SQL语句找到被锁定的表和会话。 2. 查看锁定的详细信息,确认锁定的类型和原因。 3. 如果确认需要解除锁定,执行 `ALTER SYSTEM KILL SESSION` 命令终止相关会话。 4. 验证锁定是否已经解除。 通过...

Global site tag (gtag.js) - Google Analytics