- 浏览: 56846 次
- 性别:
- 来自: 北京
最近访客 更多访客>>
最新评论
-
yvonxiao:
这个的确好用,我记得我以前是自己写了个存储过程来解决这种递归问 ...
Oracle Start With Connect By
一条SQL让20个CPU都50% Busy
一、概述
GOTOTOP有两年多没有冲锋在技术第一线了,所以这篇文章也只是个没营养的案例而已,有经验的你完全可以跳过:)
硬件:20个CPU×2+128GB MEM×2
软件:AIX5.3+HACMP5.2+Oracle10g RAC
这段时间一直在做压力测试,昨晚客户通知昨天压力测试的结果不理想,今天开会分析结果,希望我们参加,客户的希望对我们就是命令,何况现在项目关键阶段,我高度重视,带工程师准时参加了今天的会议。
二、现象
接下来继续测试现场观察测试情况,监控结果发现一个节点的CPU整体消耗了50%多,可是20个CPU哦,而I/O不足10%,检查Oracle数据库监控结果发现如下现象:
SQL ordered by Elapsed Time
Elapsed Time (s) CPU Time (s) Executions Elap per Exec (s) % Total DB Time SQL Id SQL Text
3,469 105 7,036 0.49 8.63 67vjwqswg2zvy
SELECT formatid, globalid, b…
1,725 485 286,314 0.01 4.29 ddvghnq8kypm4
select SUBSID, REGION, CUSTID,…
1,142 1,052 15,685,884 0.00 2.84 0mbs4b6ujgmrn
select RTFEEID, SUBSID, ACCTID…
SQL ordered by CPU Time
CPU Time (s) Elapsed Time (s) Executions CPU per Exec (s) % Total DB Time SQL Id SQL Text
1,052 1,142 15,685,884 0.00 2.84 0mbs4b6ujgmrn
select RTFEEID, SUBSID, ACCTID…
485 1,725 286,314 0.00 4.29 ddvghnq8kypm4
select SUBSID, REGION, CUSTID,…
SQL ordered by Gets
Buffer Gets Executions Gets per Exec %Total CPU Time (s) Elapsed Time (s) SQL Id SQL Text
46,623,132 15,685,884 2.97 48.53 1052.44 1141.87 0mbs4b6ujgmrn
select RTFEEID, SUBSID, ACCTID…
10,673,101 118,925 89.75 11.11 196.59 200.56 3q32j6tdu8×3f
select VALIDBILLCYC, BILLMODEI…
SQL ordered by Executions
Executions Rows Processed Rows per Exec CPU per Exec (s) Elap per Exec (s) SQL Id SQL Text
15,685,884 0 0.00 0.00 0.00 0mbs4b6ujgmrn
select RTFEEID, SUBSID, ACCTID…
1,504,975 1,386,411 0.92 0.00 0.00 743vt34540cs0
select RTFEEID, SUBSID, ACCTID…
SQL ordered by Parse Calls
Parse Calls Executions % Total Parses SQL Id SQL Text
15,686,218 15,685,884 76.82 0mbs4b6ujgmrn
select RTFEEID, SUBSID, ACCTID…
1,504,983 1,504,975 7.37 743vt34540cs0
select RTFEEID, SUBSID, ACCTID…
三、分析结果
结果表明ID为0mbs4b6ujgmrn的SQL在处理变量解析时可能有问题,原因在于:
1、该SQL执行次数很多,而且解析次数基本和执行次数相同,解析该SQL占据所有SQL解析消耗CPU的76.8%;
2、该SQL读取数据量非常大,占所有SQL数据读的48.5%,但没有数据量返回
3、单独执行该SQL响应很快
下面是完整SQL语句:
select RTFEEID, SUBSID, ACCTID, VALIDBILLCYC, F_ACCTAMT, LASTUPDATETIME, F_LASTUPDATEAMT, DISCMINUTE, STATE from IB_CB_REALTIMEFEE where SUBSID=:1 and STATE=:2 and ACCTID=:3
SQL> select count(*) from IB_CB_REALTIMEFEE;
COUNT(*)
———-
248953
dido
Quote Monday, October 16th, 2006 at 11:43
看的不太清楚,是不是执行次数太多了点?
还有空回技术第一线体验一把?
boypoo1
Quote Monday, October 16th, 2006 at 12:51
既然是压力测试阶段,执行次数或许是要求的
该SQL已经使用了bind var,建议考虑下SESSION_CACHED_CURSORS
oracle documents对这个参数的解释是:
SESSION_CACHED_CURSORS specifies the number of session cursors to cache. Repeated parse calls of the same SQL statement cause the session cursor for that statement to be moved into the session cursor cache. Subsequent parse calls will find the cursor in the cache and do not need to reopen the cursor. Oracle uses a least recently used algorithm to remove entries in the session cursor cache to make room for new entries when needed.
This parameter also constrains the size of the PL/SQL cursor cache which PL/SQL uses to avoid having to reparse as statements are re-executed by a user.
我的建议是先看看这个值目前大小,把它设置为300看看,减少频繁open cursor带来的CPU 消耗
tommy
Quote Monday, October 16th, 2006 at 13:12
to dido:都是别人监控的,我只是看看结果,觉得这是个消耗CPU的典型案例就放上来了,呵呵
boypoo大师给的建议和Oracle一样,NB
wangxin
Quote Thursday, March 8th, 2007 at 00:23
1. 怀疑您截取的SQL语句来自工具(如trace)而非程序代码,原代码恐怕还是使用了literal sql。每秒执行15,685,884/(1052.44+1141.87 )/20=357 exections/second/avg_cpu, 不然我只能说IBM的cpu太慢了。
3. 虽然使用fast soft parse是比soft parse快点,但是空转(没有执行结果的操作)一样大量消耗cpu.
solution:
相信这是个多线程(并发)式的访问,只要控制线程数量,如并发执行该语句的线程(进程)为5个,那cpu资源就大大释放了。
不知道这个应用是什么行业的那类业务系统。
一、概述
GOTOTOP有两年多没有冲锋在技术第一线了,所以这篇文章也只是个没营养的案例而已,有经验的你完全可以跳过:)
硬件:20个CPU×2+128GB MEM×2
软件:AIX5.3+HACMP5.2+Oracle10g RAC
这段时间一直在做压力测试,昨晚客户通知昨天压力测试的结果不理想,今天开会分析结果,希望我们参加,客户的希望对我们就是命令,何况现在项目关键阶段,我高度重视,带工程师准时参加了今天的会议。
二、现象
接下来继续测试现场观察测试情况,监控结果发现一个节点的CPU整体消耗了50%多,可是20个CPU哦,而I/O不足10%,检查Oracle数据库监控结果发现如下现象:
SQL ordered by Elapsed Time
Elapsed Time (s) CPU Time (s) Executions Elap per Exec (s) % Total DB Time SQL Id SQL Text
3,469 105 7,036 0.49 8.63 67vjwqswg2zvy
SELECT formatid, globalid, b…
1,725 485 286,314 0.01 4.29 ddvghnq8kypm4
select SUBSID, REGION, CUSTID,…
1,142 1,052 15,685,884 0.00 2.84 0mbs4b6ujgmrn
select RTFEEID, SUBSID, ACCTID…
SQL ordered by CPU Time
CPU Time (s) Elapsed Time (s) Executions CPU per Exec (s) % Total DB Time SQL Id SQL Text
1,052 1,142 15,685,884 0.00 2.84 0mbs4b6ujgmrn
select RTFEEID, SUBSID, ACCTID…
485 1,725 286,314 0.00 4.29 ddvghnq8kypm4
select SUBSID, REGION, CUSTID,…
SQL ordered by Gets
Buffer Gets Executions Gets per Exec %Total CPU Time (s) Elapsed Time (s) SQL Id SQL Text
46,623,132 15,685,884 2.97 48.53 1052.44 1141.87 0mbs4b6ujgmrn
select RTFEEID, SUBSID, ACCTID…
10,673,101 118,925 89.75 11.11 196.59 200.56 3q32j6tdu8×3f
select VALIDBILLCYC, BILLMODEI…
SQL ordered by Executions
Executions Rows Processed Rows per Exec CPU per Exec (s) Elap per Exec (s) SQL Id SQL Text
15,685,884 0 0.00 0.00 0.00 0mbs4b6ujgmrn
select RTFEEID, SUBSID, ACCTID…
1,504,975 1,386,411 0.92 0.00 0.00 743vt34540cs0
select RTFEEID, SUBSID, ACCTID…
SQL ordered by Parse Calls
Parse Calls Executions % Total Parses SQL Id SQL Text
15,686,218 15,685,884 76.82 0mbs4b6ujgmrn
select RTFEEID, SUBSID, ACCTID…
1,504,983 1,504,975 7.37 743vt34540cs0
select RTFEEID, SUBSID, ACCTID…
三、分析结果
结果表明ID为0mbs4b6ujgmrn的SQL在处理变量解析时可能有问题,原因在于:
1、该SQL执行次数很多,而且解析次数基本和执行次数相同,解析该SQL占据所有SQL解析消耗CPU的76.8%;
2、该SQL读取数据量非常大,占所有SQL数据读的48.5%,但没有数据量返回
3、单独执行该SQL响应很快
下面是完整SQL语句:
select RTFEEID, SUBSID, ACCTID, VALIDBILLCYC, F_ACCTAMT, LASTUPDATETIME, F_LASTUPDATEAMT, DISCMINUTE, STATE from IB_CB_REALTIMEFEE where SUBSID=:1 and STATE=:2 and ACCTID=:3
SQL> select count(*) from IB_CB_REALTIMEFEE;
COUNT(*)
———-
248953
dido
Quote Monday, October 16th, 2006 at 11:43
看的不太清楚,是不是执行次数太多了点?
还有空回技术第一线体验一把?
boypoo1
Quote Monday, October 16th, 2006 at 12:51
既然是压力测试阶段,执行次数或许是要求的
该SQL已经使用了bind var,建议考虑下SESSION_CACHED_CURSORS
oracle documents对这个参数的解释是:
SESSION_CACHED_CURSORS specifies the number of session cursors to cache. Repeated parse calls of the same SQL statement cause the session cursor for that statement to be moved into the session cursor cache. Subsequent parse calls will find the cursor in the cache and do not need to reopen the cursor. Oracle uses a least recently used algorithm to remove entries in the session cursor cache to make room for new entries when needed.
This parameter also constrains the size of the PL/SQL cursor cache which PL/SQL uses to avoid having to reparse as statements are re-executed by a user.
我的建议是先看看这个值目前大小,把它设置为300看看,减少频繁open cursor带来的CPU 消耗
tommy
Quote Monday, October 16th, 2006 at 13:12
to dido:都是别人监控的,我只是看看结果,觉得这是个消耗CPU的典型案例就放上来了,呵呵
boypoo大师给的建议和Oracle一样,NB
wangxin
Quote Thursday, March 8th, 2007 at 00:23
1. 怀疑您截取的SQL语句来自工具(如trace)而非程序代码,原代码恐怕还是使用了literal sql。每秒执行15,685,884/(1052.44+1141.87 )/20=357 exections/second/avg_cpu, 不然我只能说IBM的cpu太慢了。
3. 虽然使用fast soft parse是比soft parse快点,但是空转(没有执行结果的操作)一样大量消耗cpu.
solution:
相信这是个多线程(并发)式的访问,只要控制线程数量,如并发执行该语句的线程(进程)为5个,那cpu资源就大大释放了。
不知道这个应用是什么行业的那类业务系统。
发表评论
-
oracle 命令
2009-02-05 20:30 1011一、ORACLE的启动和关闭 ... -
通过dbms_flashback找回误删除的数据收藏
2009-01-21 11:35 1346在使用DBMS_FLASHBACK时要首先注意以下几个事项: ... -
优化Oracle数据库性能收藏
2009-01-21 11:35 890优化策略 为了保 ... -
Oracle Start With Connect By
2009-01-21 11:33 1572Start With Connect By 是用来实现在一个 ... -
Oracle 表空间操作收藏
2009-01-21 11:32 1009创建表空间: 1、递增 ... -
移动数据文件收藏
2009-01-21 11:32 736移动数据文件: 1、首先使要移动数据文件的表空间离线. ... -
Oracle 死锁会话处理收藏
2009-01-21 11:31 1172--查询所有的死锁: SELECT * FROM V$LOCK ... -
Oracle 9i 打开autotrace on 查看执行计划收藏
2009-01-21 11:31 13331.创建表,通过utlxplan脚本 SQL> @? ... -
如何启用sqlplus的AutoTrace功能收藏
2009-01-21 11:31 847通过以下方法可以把Autotrace的权限授予Everyone ... -
user和schema的区别:
2009-01-21 11:30 1053说穿了其实user是控制权限的,而schema是个容器,非所有 ... -
解决Oracle数据文件和日志文件丢失的问题收藏
2009-01-21 11:29 2102今天不小心误删除了数据库的数据文件和日志文件,在启动数据库时报 ... -
Oracle表段中的高水位线HWM收藏
2009-01-21 11:28 2633在Oracle数据的存储中, ... -
深入了解oracle的高水位(HWM)收藏
2009-01-21 11:26 2273说到HWM,我们首先要简要的谈谈ORACLE的逻辑存储管理.我 ... -
ORACLE 日志文件相关查询收藏
2009-01-21 11:25 11931.查询系统使用的是哪一组日志文件: select * fro ... -
ORACLE热备份恢复手册收藏
2009-01-21 11:22 2332概要 1.1. 本文的目的 为了模拟测试oracle热备份的 ... -
(转)windows命令行下启动oracle
2009-01-21 09:56 1529--总结启动命令如下: lsnrctl [start|stop ... -
小议分析函数中排序对结果的影响(一)
2009-01-12 13:24 928分析函数中经常会包括O ... -
ORACLE10g新特性——全局HASH分区索引
2009-01-12 13:23 1764在10g以前,Oracle的全局索引分区方法只有一种,即范围分 ... -
深入认识Oracle Supplemental logging
2008-12-22 18:35 3144对于有过逻辑standby,streams搭建体验的朋友,肯定 ... -
深入分析Oracle数据库日志文件
2008-12-22 15:19 1000深入分析Oracle数据库日志文件 作者:程永新 发文时间: ...
相关推荐
通过初步排查发现,其中一个特定网站(以下简称“网站 A”)的运行与 CPU 占用率异常升高有关。当停止该网站的服务时,CPU 占用率会显著下降;反之,当恢复网站 A 的服务时,CPU 占用率又会上升至接近 100% 的水平。...
一条SQL计算扑克牌24点
现在,让我们深入探讨如何在一个程序中仅使用一条SQL语句实现CRUD操作: 1. **创建(Create)**: 创建新记录通常涉及INSERT INTO语句。一条SQL语句可能包含多个值,通过这种方式一次性插入多行数据。例如: ```sql...
在数据系统中,优化 CPU 性能是一个非常重要的方面。了解影响 CPU 利用率的因素、检查硬件性能、使用 PerfMon 跟踪数据库瓶颈、评估查询性能是解决数据库系统性能问题的关键步骤。 影响数据库服务器上的 CPU 利用率...
此脚本将返回 CPU 时间消耗最多的前 10 条 SQL 语句,便于我们针对性地进行优化。 ### 步骤四:检查工作线程 除了以上步骤,还需要关注工作线程的使用情况。使用以下脚本可以查看系统的工作线程数: ```sql SELECT ...
虽然这种解决方案可能不是最理想的,但在当前情况下不失为一个可行的方法。对于使用六核CPU的计算机,建议直接使用更新版本的数据库软件,如SQL Server 2012或更高版本,以避免类似的兼容性问题。
这个语句的优点是可以查询到当前数据库中消耗 CPU 最高的 TOP 50 个语句,并且可以查看每个语句的平均每次 CPU 消耗、最后执行时间、物理读取次数、执行次数等信息。 语句二:根据当前会话查询执行的语句 这个语句...
SQL查询当前数据上一条和下一条的记录,管用,仅供参考!!!
SQL Server 2008 R2 引入了一个重大改进,即资源控制器,这使得管理员能够更有效地管理和优化服务器的CPU及内存分配。相对于之前的版本,如SQL Server 2005,资源控制器提供了一种全新的策略来解决多数据库环境下...
### 使用单条SQL语句更新数据表中的某一列至另一表 #### 背景介绍 在数据库管理中,经常需要对数据进行更新操作来确保...对于Oracle 10g及以上版本的数据库系统而言,上述方法提供了一个实用的工具来解决这类问题。
如果3个字段都有营业员,则金额除三再分配到这三个人,如果有两个字段有营业员,另一个为空,则金额除2再平分到两个人上,如果只有一个则算他,如果都为空,则算到空值里,适用于SQL,VBA,oracle,Access等
- 在“高级选项”框中勾选“/NUMPROC”选项,并设置一个适当的数值。这个数值应该根据具体情况而定,一般建议设置为不超过16的核心数。 比如,在本例中,由于服务器的实际核心数为24个,可以尝试将`/NUMPROC`的...
运行以下查询,该查询将返回过去执行时间中CPU使用量最高的前20个SQL语句的相关信息,包括执行次数、总CPU时间、总耗时等: ```sql SELECT --TOP 20 total_worker_time / 1000 AS [自编译以来执行所用的CPU时间...
AWR报告,全称Automatic Workload Repository Report,是Oracle数据库中的一个重要工具,用于收集和分析数据库的性能数据。通过对AWR报告的分析,我们可以深入了解数据库的运行状况,尤其是在CPU负载方面的问题。 ...
### Access一次执行多条SQL语句 在Access数据库管理中,有时我们需要在同一事务中执行多条SQL语句来确保数据的一致性和完整性。例如,在更新某个记录后可能还需要执行其他操作,如增加日志记录等。本文将详细介绍...
2. **创建并执行批处理脚本**:编写一个批处理脚本,其作用是自动化更新并整合SP3补丁至原始安装文件。脚本内容包括: - 复制和更新服务器环境文件。 - 使用MSIExec命令静默安装并应用SP3补丁。 - 更新释放的文件...
50个常用SQL语句.zip50个常用SQL语句.zip50个常用SQL语句.zip50个常用SQL语句.zip50个常用SQL语句.zip50个常用SQL语句.zip50个常用SQL语句.zip50个常用SQL语句.zip50个常用SQL语句.zip50个常用SQL语句.zip50个常用...
50个经典sql语句总结50个经典sql语句总结50个经典sql语句总结50个经典sql语句总结
查询SQL中哪些语句执行最占用CPU.