- 浏览: 101088 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
j2eemylove:
是“恋舞OL”,给班同学做个广告
解码为中文 -
j2eemylove:
你当时有没有想到可能是不同字符间的转换问题了?!
解码为中文 -
everne:
唉,问题还没解决www.einverne.tk
重新设置ubuntu的用户密码
背景:维护反映客户现场的一个页面打开的速度非常慢,把该功能执行的sql语句输出到日志文件导回本地。
现象:
- 在本地执行非常快,查看执行计划,有五张表是全表扫描。
- 在客户现场查看执行,有七张表是全表扫描,逻辑读是9000多,执行时间为5秒左右,下面是客户现场的执行计划。
------------------------------------------------------------------------------ | Id | Operation | A-Rows | A-Time | Buffers | ----------------------------------------------------------------------------- | 1 | SORT GROUP BY | 1 |00:00:05.05 | 9154 | |* 2 | FILTER | 10060 |00:00:05.17 | 9154 | |* 3 | HASH JOIN | 60710 |00:00:05.11 | 9072 | |* 4 | FILTER | 60710 |00:00:05.15 | 5558 | |* 5 | HASH JOIN OUTER | 61672 |00:00:05.03 | 5558 | |* 6 | HASH JOIN | 61672 |00:00:06.92 | 3166 | | 7 | MERGE JOIN CARTESIAN | 4368 |00:00:00.03 | 18 | | 8 | MERGE JOIN CARTESIAN | 728 |00:00:00.01 | 16 | | 9 | TABLE ACCESS BY INDEX ROWID| 28 |00:00:00.01 | 3 | |* 10 | INDEX RANGE SCAN | 28 |00:00:00.01 | 2 | | 11 | BUFFER SORT | 728 |00:00:00.01 | 13 | | 12 | VIEW | 26 |00:00:00.01 | 13 | | 13 | UNION-ALL | 26 |00:00:00.01 | 13 | |* 14 | TABLE ACCESS FULL | 0 |00:00:00.01 | 3 | |* 15 | FILTER | 26 |00:00:00.01 | 10 | | 16 | TABLE ACCESS FULL | 26 |00:00:00.01 | 7 | |* 17 | TABLE ACCESS FULL | 0 |00:00:00.01 | 3 | | 18 | BUFFER SORT | 4368 |00:00:00.01 | 2 | |* 19 | TABLE ACCESS BY INDEX ROWID| 6 |00:00:00.01 | 2 | |* 20 | INDEX RANGE SCAN | 9 |00:00:00.01 | 1 | |* 21 | TABLE ACCESS FULL | 55658 |00:00:00.11 | 3148 | | 22 | TABLE ACCESS FULL | 183K|00:00:00.18 | 2392 | | 23 | TABLE ACCESS FULL | 144K|00:00:00.14 | 3514 | |* 24 | TABLE ACCESS FULL | 17 |00:00:00.01 | 82 | ------------------------------------------------------------------------------
解决办法:
- 通过加hits,建议数据库用索引来访问数据(注意:只是建议,数据库有权拒绝)。
- 执行时间由5秒降到了0.5秒,这不是重点,让人惊讶的是逻辑读由9000上升到了15000,为什么会这样?逻辑读增加了1.5倍,执行时间却降到了原来的1/10,这是以前没遇到过的现象。
下面是加了hits之后的执行计划
------------------------------------------------------------------------------ | Id | Operation | A-Rows | A-Time | Buffers | ------------------------------------------------------------------------------ | 1 | SORT GROUP BY | 1 |00:00:00.53 | 14946 | |* 2 | FILTER | 10060 |00:00:01.03 | 14946 | | 3 | MERGE JOIN CARTESIAN | 60710 |00:00:03.04 | 14864 | |* 4 | FILTER | 2335 |00:00:01.44 | 14851 | | 5 | NESTED LOOPS OUTER | 2372 |00:00:00.29 | 14851 | | 6 | NESTED LOOPS | 2372 |00:00:00.21 | 7899 | |* 7 | HASH JOIN | 2372 |00:00:00.16 | 3153 | | 8 | MERGE JOIN CARTESIAN | 168 |00:00:00.01 | 5 | | 9 | TABLE ACCESS BY INDEX ROWID | 28 |00:00:00.01 | 3 | |* 10 | INDEX RANGE SCAN | 28 |00:00:00.01 | 2 | | 11 | BUFFER SORT | 168 |00:00:00.01 | 2 | |* 12 | TABLE ACCESS BY INDEX ROWID| 6 |00:00:00.01 | 2 | |* 13 | INDEX RANGE SCAN | 9 |00:00:00.01 | 1 | |* 14 | TABLE ACCESS FULL | 55897 |00:00:00.11 | 3148 | | 15 | TABLE ACCESS BY INDEX ROWID | 2372 |00:00:00.04 | 4746 | |* 16 | INDEX UNIQUE SCAN | 2372 |00:00:00.02 | 2374 | | 17 | TABLE ACCESS BY INDEX ROWID | 2036 |00:00:00.06 | 6952 | |* 18 | INDEX RANGE SCAN | 2036 |00:00:00.02 | 4748 | | 19 | BUFFER SORT | 60710 |00:00:00.07 | 13 | | 20 | VIEW | 26 |00:00:00.01 | 13 | | 21 | UNION-ALL | 26 |00:00:00.01 | 13 | |* 22 | TABLE ACCESS FULL | 0 |00:00:00.01 | 3 | |* 23 | FILTER | 26 |00:00:00.01 | 10 | | 24 | TABLE ACCESS FULL | 26 |00:00:00.01 | 7 | |* 25 | TABLE ACCESS FULL | 0 |00:00:00.01 | 3 | |* 26 | TABLE ACCESS FULL | 17 |00:00:00.01 | 82 | ------------------------------------------------------------------------------
通过观察这俩个执行计划,发现未加hits的时候,HASH JOIN 后的行数是61672行,加了hits之后,HASH JOIN 后的行数是2372行,而且HASH JOIN 的时间也大大缩短,由此推断,
虽然没加hits之前,逻辑读少,但是产生的中间数据太多,消耗内存和cpu,而加了hits之后,虽然逻辑读多了1.5倍,但产生的中间数据却少了很多,既节省内存,又节省cpu。这也给我提供了一个新的优化sql思路,并不像一些博文说的,优化的终极目标就是降低逻辑读,除此之外,还要关注sql执行的中间过程。
发表评论
-
使用push_subq优化SQL
2013-08-19 15:40 2150需要优化的SQL SELECT * FROM (SE ... -
hints的push_pred应用
2013-04-15 14:34 983前俩年在项目中优化了一条SQL,当时从40多秒减少到了2秒, ... -
抽取sequence的创建语句
2012-12-06 19:44 1029select 'create sequen ... -
强制删除用户
2012-11-02 13:22 966强制删除关联的session DECLARE ... -
druid配置
2012-11-01 16:01 13215web.xml配置,监控jsp和do请求,exclusions ... -
导入导出
2012-07-17 10:53 0SELECT * FROM All_Directo ... -
Oracle诊断事件列表
2012-06-07 16:49 1278来自http://www.eygle.com/internal ... -
记一次页面无响应调式过程
2011-10-12 09:15 1748现象 在发文节点,点击确定,页面没有响应. 调 ... -
ORACLE备份&恢复案例
2011-08-27 11:26 538ORACLE备份&恢复案 ... -
创建视图需要注意的问题
2011-08-23 15:35 1594创建视图报错 SQL> create or re ... -
获取执行计划的4种方式
2011-08-20 10:26 1314获取执行计划的4种方式 1:从计划表中获取,计划表名默 ... -
DBMS_STATS包使用
2011-08-19 09:53 2408有时候,想查看一下表中数据的增删改次数,可以使用视图USER_ ... -
获取运行时执行计划和统计信息
2011-08-03 13:26 1514在sql语句中加入提示/*+ gat ... -
hints
2011-08-01 13:58 9091:索引 SELECT /*+ index(e(ENT ... -
SQL Plus使用入门
2011-07-31 12:40 1086转载自: http://blog.csdn.net/wj ... -
sqlplus
2011-07-27 10:06 11091:输出结果到文件 spool c:\zhj.txt; ... -
c3p0配置参数
2011-07-23 13:31 1082c3p0配置参数: acquireIncreme ... -
记一次数据库优化
2011-07-20 16:46 834背景:电子政务系统显示公文数据列表打开的时候速度非常慢 ... -
sql_trace
2011-07-19 15:51 12501:设置sql_trace SQL>alter ... -
重建用户下的所有索引
2011-06-10 16:59 1305重建用户下的所有索引 DECLARE STR V ...
相关推荐
性能优化并非一次性工作,而是一个持续的过程。以下是一些基本步骤: ##### 3.1 分析现有系统 - **性能测试**: 使用工具如LoadRunner、JMeter等进行压力测试,找出瓶颈所在。 - **日志分析**: 通过分析系统日志来...
SQL性能优化是一个重要的主题,尤其是在使用像SQL Server 2000这样的早期版本时,由于资源有限,优化显得更为关键。本系列课程主要关注通过理解并应用锁和事务管理来提升SQL查询的效率。 首先,我们要了解【锁和锁...
性能优化不是一次性任务,而是持续的过程。随着业务发展和数据增长,需要不断评估和改进系统性能,确保系统的健壮性和响应速度。 总之,SQLSERVER的性能优化涵盖了系统设计、开发、运维等多个环节,需要全面考虑...
2. **DataGrid控件优化**:DataGrid控件在展示大量数据时,应启用分页功能,只在用户请求时加载当前页数据,避免一次性加载所有记录,从而减少服务器负载。 3. **垃圾回收机制**:理解.NET Framework中的垃圾回收...
1. **优化`READ_TEXT`等函数模块**:如果在循环中频繁调用标准函数模块,考虑将其拆分为两部分:一部分用于一次性加载数据,另一部分处理业务逻辑。这可以显著减少每次循环中的数据加载时间。 #### 五、良好的ABAP...
2. 合并I/O操作:尽量减少I/O调用,例如一次读取或写入大量数据,而不是多次小规模操作。 3. 使用NIO(非阻塞I/O):在处理大量并发连接时,NIO能提供更好的性能。 四、Servlet Servlet是J2EE中的核心组件,优化其...
2. **联合查询(Eager Fetching)**:通过`<select>`标签的`useCache="true"`和`@ResultMap`注解,我们可以执行一次嵌套查询,一次性获取User和其关联的Orders。这种方式减少了数据库访问次数,但增加了单条SQL的...
【uni-app】是一款多端开发框架,它允许开发者编写一次代码,就能运行在iOS、Android、Web等不同平台上。然而,由于其非原生的特性,可能会遇到性能问题,这在React Native、Flutter等框架中也同样存在。本文将探讨...
在J2EE(Java 2 Platform, Enterprise Edition)应用程序开发中,性能优化是至关重要的一个环节,它关乎到系统...每一次优化都应以不影响系统稳定性和可维护性为前提,确保性能提升的同时,系统的整体质量也得到提升。
1. **列表数据分页处理**:避免一次性加载大量数据,通过分页机制提高响应速度。 2. **缓存加速**:缓存常用数据,减少数据库访问次数,提高响应速度。 3. **缓存一致性维护**:根据数据变更频率和业务一致性要求...
总的来说,监控和优化逻辑读与物理读是Oracle数据库性能调优的重要环节。通过上述SQL语句,我们可以有效地定位高消耗资源的SQL,从而有针对性地进行性能优化工作,确保数据库系统的高效运行。在日常运维中,定期执行...
这个时候我们可以通过产品逻辑的方式来优化,比如,在用户点击查询之后将“按钮置灰”,或者通过 JS 控制 xx 秒只能只能提交一次请求等,有效的拦截了 80% 的无效流量。 四、服务化 服务化是将系统拆分成多个独立...
2. **使用绑定变量**:绑定变量可以减少解析开销,避免硬解析,因为相同的SQL语句只需解析一次,后续的执行将复用解析计划。 3. **避免在WHERE子句中使用函数**:函数会阻止索引的使用,可能导致全表扫描。如果必须...
### JavaScript性能优化技巧详解 #### 引言 随着Web应用的日益复杂,JavaScript作为前端开发的核心语言之一,其运行效率直接影响着用户体验与整体性能。因此,掌握一定的JavaScript性能优化技巧对于提升应用程序...
例如,尽量避免使用如“From TableName”这样的无条件查询,这可能导致一次性加载大量数据,特别是当存在Clob类型的大数据时,可能会引发内存溢出的风险。 内存溢出分为缓慢溢出和快速溢出,主要由内存分配不合理或...
- **无状态知识会话**:这类会话类似于函数调用,接受输入数据并返回处理后的结果,适用于一次性处理任务。 - 示例用例: - 校验:例如判断一个人是否有资格申请抵押贷款。 - 计算:例如计算抵押贷款的保费。 - ...
### 前端性能优化指南 #### 概述 前端性能优化是指通过对网站或Web应用的前端部分进行改进,以提升用户体验的过程。优秀的前端性能优化能够显著提高网页加载速度、减少资源消耗、增强用户交互体验,进而提升整体的...