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

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

--//做一个测试例子说明存在大量子光标对性能影响.

1.环境:
SCOTT@test01p> @ ver1

PORT_STRING                    VERSION        BANNER                                                                               CON_ID
------------------------------ -------------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0           12.1.0.1.0     Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production              0

CREATE TABLE t (n NUMBER);
INSERT INTO t VALUES (1);
COMMIT;
execute dbms_stats.gather_table_stats(user,'t')

2.建立测试脚本:
> cat tt1.sql
DECLARE
    l_count PLS_INTEGER;
BEGIN
    FOR i IN 1..100
    LOOP
    EXECUTE IMMEDIATE 'ALTER SESSION SET optimizer_index_caching = '||i;
    FOR j IN 1..1000
    LOOP
        EXECUTE IMMEDIATE 'ALTER SESSION SET optimizer_index_cost_adj = '||j;
        EXECUTE IMMEDIATE 'SELECT count(*) FROM t' into l_count;
    END LOOP;
    END LOOP;
END;
/

> cat tt2.sql
DECLARE
    l_count PLS_INTEGER;
BEGIN
    FOR i IN 1..100
    LOOP
    EXECUTE IMMEDIATE 'ALTER SESSION SET optimizer_index_caching = '||0;
    FOR j IN 1..1000
    LOOP
        EXECUTE IMMEDIATE 'ALTER SESSION SET optimizer_index_cost_adj = '||100;
        EXECUTE IMMEDIATE 'SELECT count(*) FROM t' into l_count;
    END LOOP;
    END LOOP;
END;
/
--//注:第2个例子使用常量.

3.测试一:
SCOTT@test01p> set timing on
SCOTT@test01p> @ spid

       SID    SERIAL# SPID                     PID  P_SERIAL# C50
---------- ---------- -------------------- ------- ---------- --------------------------------------------------
       251         37 4912                      22          5 alter system kill session '251,37' immediate;

SCOTT@test01p> @ d:\temp\tt1.sql
--//等待...

SCOTT@test01p> @ wait
P1RAW            P2RAW            P3RAW                    P1         P2         P3        SID    SERIAL#       SEQ# EVENT                STATE               WAIT_TIME_MICRO SECONDS_IN_WAIT
---------------- ---------------- ---------------- ---------- ---------- ---------- ---------- ---------- ---------- -------------------- ------------------- --------------- ---------------
000000000AC62B80 000000000000018E 00                180759424        398          0        251         37         69 latch: shared pool   WAITED SHORT TIME                21               0
--//等待时间是latch: shared pool

SCOTT@test01p> select count(*) from v$sql where sql_id='5tjqf7sx5dzmj';
  COUNT(*)
----------
      1225

SCOTT@test01p> select count(*) from v$sql where sql_id='5tjqf7sx5dzmj';
  COUNT(*)
----------
      1247

SCOTT@test01p> select count(*) from v$sql where sql_id='5tjqf7sx5dzmj';
  COUNT(*)
----------
      1671

SCOTT@test01p> select count(*) from v$sql where sql_id='5tjqf7sx5dzmj';
  COUNT(*)
----------
      1550
--//可以发现子光标数量在发生变化.

SCOTT@test01p> @ d:\temp\tt1.sql
PL/SQL procedure successfully completed.
Elapsed: 00:03:04.36
--//需要3分钟以上.

4.测试二:
SCOTT@test01p> alter system flush shared_pool;
System altered.
Elapsed: 00:00:00.08

SCOTT@test01p> @ d:\temp\tt2.sql
PL/SQL procedure successfully completed.
Elapsed: 00:00:09.96
--//很快9秒就执行完成了.

SCOTT@test01p> @ wait
no rows selected

SCOTT@test01p> select count(*) from v$sql where sql_id='5tjqf7sx5dzmj';
  COUNT(*)
----------
         1

--//另外11g以后增加一个参数_cursor_obsolete_threshold,限制产生子光标的数量.缺省1024.从前面的测试看瞬间还是存在超过1024的可能性.
--//注:前面的测试曾经达到16XX.

SYS@test01p> @ hide %cursor%threshold
NAME                                     DESCRIPTION                                                        DEFAULT_VALUE          SESSION_VALUE          SYSTEM_VALUE
---------------------------------------- ------------------------------------------------------------------ ---------------------- ---------------------- ----------------------
_cursor_obsolete_threshold               Number of cursors per parent before obsoletion.                    TRUE                   1024                   1024
_cursor_reload_failure_threshold         Number of failed reloads before marking cursor unusable            TRUE                   0                      0

5.继续测试三:
--//修改_cursor_obsolete_threshold =64看看.

SYS@test> alter system set "_cursor_obsolete_threshold"=64 scope=spfile;
System altered.

--//重新启动数据库看看.

SYS@test> @ hide %cursor%threshold
NAME                                     DESCRIPTION                                                        DEFAULT_VALUE          SESSION_VALUE          SYSTEM_VALUE
---------------------------------------- ------------------------------------------------------------------ ---------------------- ---------------------- -------------------
_cursor_obsolete_threshold               Number of cursors per parent before obsoletion.                    FALSE                  64                     64
_cursor_reload_failure_threshold         Number of failed reloads before marking cursor unusable            TRUE                   0                      0

SCOTT@test01p> set timing on
SCOTT@test01p> @spid

       SID    SERIAL# SPID                     PID  P_SERIAL# C50
---------- ---------- -------------------- ------- ---------- --------------------------------------------------
       369         65 976                       55          6 alter system kill session '369,65' immediate;

SYS@test01p> @ wait
P1RAW            P2RAW            P3RAW                    P1         P2         P3        SID    SERIAL#       SEQ# EVENT                STATE               WAIT_TIME_MICRO SECONDS_IN_WAIT
---------------- ---------------- ---------------- ---------- ---------- ---------- ---------- ---------- ---------- -------------------- ------------------- --------------- ---------------
000000000B0C2B80 000000000000018E 00                185346944        398          0        369         65        397 latch: shared pool   WAITED SHORT TIME                 5               0

SYS@test01p> select count(*) from v$sql where sql_id='5tjqf7sx5dzmj';
  COUNT(*)
----------
       268

SYS@test01p> select count(*) from v$sql where sql_id='5tjqf7sx5dzmj';
  COUNT(*)
----------
       532

SYS@test01p> select count(*) from v$sql where sql_id='5tjqf7sx5dzmj';
  COUNT(*)
----------
       564
--//密集的调用执行,还是超过限制许多...

SCOTT@test01p> @ d:\temp\tt1.sql
PL/SQL procedure successfully completed.
Elapsed: 00:02:01.87

--//需要2分钟以上.但是还是比前面3分钟快许多.


目录
相关文章
|
5天前
|
设计模式 测试技术 持续交付
深入白盒测试:提升软件质量与性能的关键策略
【4月更文挑战第20天】 在软件开发的复杂世界中,确保产品的质量和性能始终是至关重要的任务。白盒测试,作为软件测试领域的重要分支,提供了对程序内部结构和逻辑的深入分析手段。本文将探讨如何通过有效的白盒测试策略来优化软件性能,减少缺陷,并最终提高用户满意度。通过剖析代码检查、单元测试、集成测试等白盒测试技术,我们将了解这些方法如何揭示潜在的问题点,并为改进提供方向。
|
1月前
|
安全 测试技术
BOSHIDA DC电源模块的安全性能评估与测试方法
BOSHIDA DC电源模块的安全性能评估与测试方法
 BOSHIDA DC电源模块的安全性能评估与测试方法
|
1月前
|
安全
DC电源模块的安全性能评估与测试方法
DC电源模块的安全性能评估与测试方法 DC电源模块的安全性能评估与测试方法应包括以下几个方面: 1. 输入安全性测试:包括输入电压范围、输入电压稳定性、输入电流范围、输入电流保护等方面的测试。测试方法可以是逐步增加输入电压或输入电流,观察模块的工作状态和保护功能。
DC电源模块的安全性能评估与测试方法
|
4月前
|
存储 测试技术 Linux
添加E1000网卡进行测试,只有VMXNET3性能的四分之一
添加E1000网卡进行测试,只有VMXNET3性能的四分之一
|
4月前
|
存储 测试技术 区块链
阿里云、百度云及移动云对象存储横向性能对比测试
在企业的数字化转型进程中,我们观察到越来越多的公司将其IT基础设施迁移到云端。随着企业业务的持续运营,无论是储存、处理、分享还是删除,都会产生大量的数据,这就要求有一个既可靠又高效的系统来管理和存储这些信息。对象存储产品在这个场景中扮演了至关重要的角色。它们以一种可扩展、安全、持久的方式,有效地满足了对大规模非结构化数据存储的需求。 尽管市场上云计算提供商众多,各自都有自己独特的对象存储产品,面对这样的丰富选择,如何寻找最符合企业需求的产品呢?这正是企业今天寻求解答的问题。 在本篇文章中,我们将深入进行一项横向对比测试,专门对阿里云OSS、百度云BOS和移动云EOS这三大云服务提供商的对象
1371 0
|
1天前
|
监控 NoSQL 测试技术
MongoDB性能最佳实践:如何制定更有效的基准测试?
感谢你与我们一起走过这段MongoDB性能最佳实践之旅,希望你能从中获取一些有用的信息
1557 2
|
19天前
|
测试技术
深入白盒测试:提升软件质量与性能的关键策略
【4月更文挑战第6天】 在软件开发的生命周期中,确保代码质量和性能始终是至关重要的环节。白盒测试作为一种深入代码内部的测试方法,提供了对程序结构、逻辑路径和内部功能的全面评估。本文将探讨白盒测试的核心概念、技术及其在提升软件质量与性能方面的应用。通过分析控制流测试、数据流测试和静态代码分析等关键技术,我们揭示了白盒测试如何有效发现潜在缺陷,优化代码效率,并增强系统稳定性。
|
1月前
|
算法 Java 测试技术
性能工具之代码级性能测试工具ContiPerf
【2月更文挑战第23天】性能工具之代码级性能测试工具ContiPerf
269 1
性能工具之代码级性能测试工具ContiPerf
|
2月前
|
测试技术 BI
性能基准测试基本流程
性能基准测试基本流程
|
4月前
|
NoSQL 测试技术 Redis
Redis【性能 02】Redis-5.0.14伪集群和Docker集群搭建及延迟和性能测试(均无法提升性能)
Redis【性能 02】Redis-5.0.14伪集群和Docker集群搭建及延迟和性能测试(均无法提升性能)
151 0

热门文章

最新文章