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

一条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
分享到:
评论
16 楼 mazzystar 2012-05-14  
sunzhiqiang1984 写道
楼主的意思是不是这样?

第一次 是用select * from TB, 然后得到 List<T> objects, 然后计算count;
第二次 直接用 select count(1) 得到 count;

这样就优化了?

楼主修改代码用了5小时,肯定是修改原来的逻辑了。
15 楼 sunzhiqiang1984 2012-05-14  
楼主的意思是不是这样?

第一次 是用select * from TB, 然后得到 List<T> objects, 然后计算count;
第二次 直接用 select count(1) 得到 count;

这样就优化了?
14 楼 哈包祥明 2012-05-14  
额。。。。
13 楼 从百草园到三味书屋 2012-05-14  
笑而不语,楼主啊!Select * From Table1 ,  Select Count(1) from Table1 这两条语句压根不是一路的啊
12 楼 swallow_pulm 2012-05-14  
1. 真是数据的问题,通过数据执行就能看到问题;
2. 两天就发现这个问题,说明预发环节做的不到位。
11 楼 kxscr 2012-05-14  
改这代码怎么能用5个小时呢?
10 楼 zengjz88 2012-05-14  
是这问题? count(索引列)不是更快? 既然这么高访问次数应该处理好数据库迸发
9 楼 lovewinner 2012-05-14  
额。。。 被忽悠了。。
8 楼 丶枫肆 2012-05-14  
2个sql结果集都不一样,换一下就OK了?
7 楼 silence1214 2012-05-14  
是select count(*)  吧
6 楼 EXvision 2012-05-14  
表示原来有一个兄弟也是这样的,取count的时候直接整个表搞下来了,然后一个size(),想死的心都有了。后来果断开了。

只能说你们项目组管理松散,人员参差不齐。
5 楼 zxf_noimp 2012-05-14  
只能说被忽悠进来了
4 楼 aa87963014 2012-05-14  
毫无借鉴价值
3 楼 天下智能 2012-05-14  
这么大数据量竟敢这么写!
2 楼 lostyue 2012-05-14  
Select * From Table1 改成  Select Count(1) from Table1
前面是查数据的,后面是查条数的。这个不行吧? 还是压根不是这个问题?
1 楼 vendow 2012-05-14  
我只能说,你们为什么没有代码审查环节呢?
如此逻辑的代码怎可发布。

相关推荐

    一条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. 索引中的检索字段 索引不仅是主键或唯一键。...

    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. 验证锁定是否已经解除。 通过...

    oracle中sql语句的优化日记

    6. **避免使用通配符(*)**:使用`SELECT *`会导致数据库解析所有列,降低性能。最好只选择你需要的特定列,以减少解析时间和数据传输量。 7. **替代优化**: - **用`&gt;=`替代`&gt;`**:在某些情况下,`&gt;=`可能比`&gt;`更...

Global site tag (gtag.js) - Google Analytics