[20171102]测试大量子光标对性能影响2.txt

[20171102]测试大量子光标对性能影响2.txt

--//跟开发讲关于绑定变量的问题,总有人讲不是有一个参数cursor_sharing能快捷简单地解决问题,设置cursor_sharing=force,
--//实际上合理的使用绑定变量才是王道.
--//许多开发人员设置这个参数带来的各种bug,我第一次在8i下使用差点到处服务器cpu资源耗尽,好在我知道我当时的改动,修改回来一些正常.
--//我当时还记得设置这个参数报ora-00600错误.

--//我想起以前10g下遇到设置cursor_sharing=force的一个bug,正好拿来测试产生大量子光标的情况.

1.环境:
SCOTT@test> @&r/ver1

PORT_STRING                    VERSION        BANNER
------------------------------ -------------- ----------------------------------------------------------------
x86_64/Linux 2.4.xx            10.2.0.4.0     Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi

SCOTT@test> CREATE PUBLIC DATABASE LINK loopback USING '192.168.100.33:1521/test';
Database link created.

--//建立一个loopback的dblink,实际上还是使用原来的服务器,这样可以简单模拟dblink的情况.
--//关于遇到bug的一些细节,参考链接 http://blog.itpub.net/267265/viewspace-1985215/=>[20160201]db_link与子光标问题.txt

2.建立测试环境:
CREATE TABLE t (n NUMBER);
INSERT INTO t VALUES (1);
COMMIT;
create unique index p_t on t(n);
execute dbms_stats.gather_table_stats(user,'t');

--//建立执行脚本tt1.sql,tt2.sql

$ cat tt1.sql
DECLARE
    l_count PLS_INTEGER;
BEGIN
    FOR i IN 1..1e5
    LOOP
    EXECUTE IMMEDIATE 'SELECT count(*) FROM t@loopback where n = '||i  into l_count ;
    END LOOP;
END;
/

$ cat tt2.sql
DECLARE
    l_count PLS_INTEGER;
BEGIN
    FOR i IN 1..1e5
    LOOP
        EXECUTE IMMEDIATE 'SELECT count(*) FROM t@loopback,dual where n = '|| i  into l_count ;
    END LOOP;
END;
/
--//注:如果加入一张本地表dual,就不会出现大量子光标的情况.

$ cat tt3.sql
DECLARE
    l_count PLS_INTEGER;
BEGIN
    FOR i IN 1..1e5
    LOOP
    EXECUTE IMMEDIATE 'SELECT count(*) FROM t@loopback where n = :x '  into l_count using i;
    END LOOP;
END;
/

3.测试一:
SCOTT@test> alter system set cursor_sharing=force scope=memory;
System altered.

--//注:测试一定要在system级别打开这个参数,因为dblink是本地服务器,这样如果cursor_sharing=force仅仅在会话级别设置,
--//远程的sql语句会按照原样执行,而不是如下,结果更慢....
--//SELECT COUNT(*) FROM "T" "A1" WHERE "A1"."N"=:"SYS_B_0"

alter system flush shared_pool;
set timing on
@ tt1.sql
commit

SCOTT@test> @ tt1.sql
PL/SQL procedure successfully completed.
Elapsed: 00:03:48.46

--//需要3:48.46.

SCOTT@test> select count(*),sql_text from v$sql where sql_id='f5z89fqpdz81t' group by sql_text;
  COUNT(*) SQL_TEXT
---------- ------------------------------------------------------------
      5861 SELECT count(*) FROM t@loopback where n = :"SYS_B_0"
--//可以发现产生大量子光标.

SCOTT@test> select count(*),sql_text,executions from v$sql where sql_id='2s6ybj0r4ukpb' group by sql_text,executions;
  COUNT(*) SQL_TEXT                                                     EXECUTIONS
---------- ------------------------------------------------------------ ----------
         1 SELECT COUNT(*) FROM "T" "A1" WHERE "A1"."N"=:"SYS_B_0"          100000

4.测试二:

alter system flush shared_pool;
set timing on
@ tt2.sql
commit

SCOTT@test> @ tt2.sql
PL/SQL procedure successfully completed.
Elapsed: 00:01:03.10
--//需要3:48.46.

SYS@test> select count(*),sql_text,executions  from v$sql where sql_id='5xjj10nkpcpgx' group by sql_text,executions;
  COUNT(*) SQL_TEXT                                                     EXECUTIONS
---------- ------------------------------------------------------------ ----------
         1 SELECT count(*) FROM t@loopback,dual where n = :"SYS_B_0"        100000

SYS@test> select count(*),sql_text,executions  from v$sql where sql_id='7gvf1y78qrx48' group by sql_text,executions;
  COUNT(*) SQL_TEXT                                                     EXECUTIONS
---------- ------------------------------------------------------------ ----------
         1 SELECT "N" FROM "T" "T" WHERE "N"=:1                             100000

--//远程执行语句与上面不同.

5.测试三:

alter system flush shared_pool;
set timing on
@ tt3.sql
commit

SCOTT@test> @ tt3.sql
PL/SQL procedure successfully completed.
Elapsed: 00:00:44.07

SYS@test> select count(*),sql_text,executions  from v$sql where sql_id='1s79mgdrcs29m' group by sql_text,executions;
  COUNT(*) SQL_TEXT                                                     EXECUTIONS
---------- ------------------------------------------------------------ ----------
         1 SELECT count(*) FROM t@loopback where n = :x                     100000

SYS@test> select count(*),sql_text,executions  from v$sql where sql_id='g8ug1c1cr255j' group by sql_text,executions;
  COUNT(*) SQL_TEXT                                                     EXECUTIONS
---------- ------------------------------------------------------------ ----------
         1 SELECT COUNT(*) FROM "T" "A1" WHERE "A1"."N"=:X                  100000

--//改用绑定变量44秒.

6.测试四:
--//补充测试,不使用dblink看看.
$ cat tt4.sql
DECLARE
    l_count PLS_INTEGER;
BEGIN
    FOR i IN 1..1e5
    LOOP
    EXECUTE IMMEDIATE 'SELECT count(*) FROM t where n = :x '  into l_count using i;
    END LOOP;
END;
/

alter system flush shared_pool;
set timing on
@ tt3.sql
commit

SCOTT@test> @ tt4.sql
PL/SQL procedure successfully completed.
Elapsed: 00:00:02.03

SYS@test> select count(*),sql_text,executions  from v$sql where sql_id='5duc59nwpqpfj' group by sql_text,executions;
  COUNT(*) SQL_TEXT                                                     EXECUTIONS
---------- ------------------------------------------------------------ ----------
         1 SELECT count(*) FROM t where n = :x                              100000

--//不知道为什么通过dblink连接会这么慢,除了产生少量事务外,语句多执行1倍外.也许更多的消耗在网络上.

时间: 2024-08-17 07:23:04

[20171102]测试大量子光标对性能影响2.txt的相关文章

[20171028]测试大量子光标对性能影响.txt

[20171028]测试大量子光标对性能影响.txt --//做一个测试例子说明存在大量子光标对性能影响. 1.环境: SCOTT@test01p> @ ver1 PORT_STRING                    VERSION        BANNER                                                                               CON_ID ------------------------------

盘点 Oracle 11g 中新特性带来的10大性能影响

盘点 Oracle 11g 中新特性带来的10大性能影响 原创 2017-08-02 盖国强 数据和云 Oracle的任何一个新版本,总是会带来大量引人瞩目的新特性,但是往往在这些新特性引入之初,首先引起的是一些麻烦,因为对于新技术的不了解.因为对于旧环境的不适应,从Oracle产品到技术服务运维,总是要走过一个磨合的长期过程. 请注意:我们并不推荐大家盲目的关闭和摒弃Oracle的新特性,我们建议大家在遇到问题时,做出适合自己的调整. 就此盘点一下 Oracle 11g 中,那些新特性带来的新

双通道还是高主频 实测内存对A10-7890K性能影响

  众所周知,双通道.高主频内存对APU性能的发挥有着比较大的影响,尤其是在游戏体验中表现明显.今天我们就来测试一下AMD新款旗舰APU A10-7890K在不同内存频率和通道数量下的性能表现,看看内存对APU性能影响有多大. 关于 A10-7890K 处理器 A10-7890K是AMD今年推出的新款旗舰APU处理器,采用了四核设计,默认主频为4.1GHz,加速可达4.3GHz. 图形方面,A10-7890K内置Radeon R7 GPU,具备512个流处理器,核心频率866MHz,官方内存频率

SqlServer(索引)--创建复合索引时,复合索引列顺序对查询的性能影响[转]

http://www.cnblogs.com/wy123/p/5604400.html SQL Server创建复合索引时,复合索引列顺序对查询的性能影响 说说复合索引 写索引的博客太多了,一直不想动手写,有一下两个原因: 一是觉得有炒剩饭的嫌疑,有兄弟曾说:索引吗,只要在查询条件上建索引就行了,真的可以这么暴力吗? 二来觉得,索引是个非常大的话题,很难概括出所有的情况,你不整出点新意来,倒是有抄袭照搬的嫌疑 既然写了,就写一点稍微不一样的东西出来, 好了,废话打住, /* 20160814备注

MSSQL · 实现分析 · Extend Event实现审计日志对SQL Server性能影响

背景 在上一篇月报分享中,我们介绍了SQL Server实现审计日志功能的四种方法,最终的结论是使用Extend Event(中文叫扩展事件)实现审计日志方法是最优选择,详情参见MSSQL · 实现分析 · SQL Server实现审计日志的方案探索.那么,使用Extend Event实现审计日志的方案会面对如下疑问: Extend Event是否满足可靠性要求 Extend Event是否满足吞吐量要求 Extend Event对SQL Server本身语句查询性能影响到底有多大 这篇文章就是

SQL Server创建复合索引时,复合索引列顺序对查询的性能影响

原文:SQL Server创建复合索引时,复合索引列顺序对查询的性能影响    说说复合索引 写索引的博客太多了,一直不想动手写,有一下两个原因: 一是觉得有炒剩饭的嫌疑,有兄弟曾说:索引吗,只要在查询条件上建索引就行了,真的可以这么暴力吗? 二来觉得,索引是个非常大的话题,很难概括出所有的情况,你不整出点新意来,倒是有抄袭照搬的嫌疑 既然写了,就写一点稍微不一样的东西出来, 好了,废话打住,开搞   搭建测试环境: 创建一张表,模拟实际业务中的一个表,往里面填入数据, 时间字段上,相对按照时间

[20151203]关于grd对性能影响.txt

[20151203]关于grd对性能影响.txt --前几天写了1篇,统计分析对grd的影响,提到一些大表在晚上分析后会出现资源重新分配,参考链接 --blog.itpub.net/267265/viewspace-1851145/ --我们的生产系统业务并不是很忙,今天做一点"危险"的测试,让另外1个实例掌控某些另外实例经常访问的对象. --先看看没有切换的awr报表(昨天的10-11点)rac部分: RAC Statistics  DB/Inst: xxxx/xxxx1  Snap

测试应用定价对收入的影响:应用收入和定价无关?

文章描述:应用收入跟定价无关? 编者按:本文作者Oliver Reichenstein是一位应用开发者,最近他在对一款由他所开发的应用进行调价测试,并对这一价格测试结果进了描述,以下是它在Google+上发表的内容. 最近我们在测试应用定价对收入的影响,而一次又一次的测试表明无论应用被定以何种价格,我们最后的收入是一样的. 下面我附上了两张图来说明这一结论,最近我降低了iA Write iPad版应用的价格,从5美元降低到了1美元.起初它的销量猛增,但最后收入又回到了先前的水品.价格降低到原来5

DX12对CPU要求高吗 CPU对DX12游戏性能影响

  Win10内置的DX12有利于提升游戏体验,不过高版本的DX也对CPU与显卡提出了更高的要求.微软的DirectX一路走来,已经经历了12个版本,无论是硬件还是游戏,也都发生了天翻地覆的变化,先进的技术也给我们带来了更好的游戏体验. DX12对CPU要求高吗?老司机实测CPU对DX12游戏性能影响 早在2014年,微软在GDC上正式发布了新一代的API DirectX12(简称DX12),DX12最重要的变化就是更底层API,具体包括:应用可追踪GPU流水线.控制资源状态转换.控制资源重命名