Oracle执行计划突变,我是软件测试人员,我们有遇到好几次oracle执行计划突变引起的性能问题没有被测试出

Oracle执行计划突变,我是软件测试人员,我们有遇到好几次oracle执行计划突变引起的性能问题没有被测试出,第1张

多个表或者数据源进行关联查询而得出我们需要的结果集。那么Oracle到底存在着哪几种连接方式?优化器内部又是怎样处理这些连接的?哪种连接方式又是适合哪种查询需求的?只有对这些问题有了清晰的理解后,我们才能针对特定的查询需求选择合适的连接方式,开发出健壮的数据库应用程序。选择合适的表连接方法对SQL语句运行的性能有着至关重要的影响。下面我们就Oracle常用的一些连接方法及适用情景做一个简单的介绍。

31 嵌套循环连接(nested loop)

嵌套循环连接的工作方式是这样的:

1、 Oracle首先选择一张表作为连接的驱动表,这张表也称为外部表(Outer Table)。由驱动表进行驱动连接的表或数据源称为内部表(Inner Table)。

2、 提取驱动表中符合条件的记录,与被驱动表的连接列进行关联查询符合条件的记录。在这个过程中,Oracle首先提取驱动表中符合条件的第一条记录,再与内部表的连接列进行关联查询相应的记录行。在关联查询的过程中,Oracle会持续提取驱动表中其他符合条件的记录与内部表关联查询。这两个过程是并行进行的,因此嵌套循环连接返回前几条记录的速度是非常快的。在这里需要说明的是,由于Oracle最小的IO单位为单个数据块,因此在这个过程中Oracle会首先提取驱动表中符合条件的单个数据块中的所有行,再与内部表进行关联连接查询的,然后提取下一个数据块中的记录持续地循环连接下去。当然,如果单行记录跨越多个数据块的话,就是一次单条记录进行关联查询的。

3、 嵌套循环连接的过程如下所示:

Nested loop

Outer loop

Inner loop

我们可以看出这里面存在着两个循环,一个是外部循环,提取驱动表中符合条件的每条记录。另外一个是内部循环,根据外循环中提取的每条记录对内部表进行连接查询相应的记录。由于这两个循环是嵌套进行的,故此种连接方法称为嵌套循环连接。

嵌套循环连接适用于查询的选择性强、约束性高并且仅返回小部分记录的结果集。通常要求驱动表的记录(符合条件的记录,通常通过高效的索引访问)较少,且被驱动表连接列有唯一索引或者选择性强的非唯一索引时,嵌套循环连接的效率是比较高的。

嵌套循环连接驱动表的选择也是连接中需要着重注意的一点,有一个常见的误区是驱动表要选择小表,其实这是不对的。假如有两张表A、B关联查询,A表有1000000条记录,B表有10000条记录,但是A表过滤出来的记录只有10条,这时候显然用A表当做驱动表是比较合适的。因此驱动表是由过滤条件限制返回记录最少的那张表,而不是根据表的大小来选择的。

在外连接查询中,如果走嵌套循环连接的话,那么驱动表必然是没有符合条件关联的那张表,也就是后面不加(+)的那张表。这是由于外连接需要提取可能另一张表没符合条件的记录,因此驱动表需要是那张我们要返回所有符合条件记录的表。比如下面这个查询,

嵌套循环连接返回前几行的记录是非常快的,这是因为使用了嵌套循环后,不需要等到全部循环结束再返回结果集,而是不断地将查询出来的结果集返回。在这种情况下,终端用户将会快速地得到返回的首批记录,且同时等待Oracle内部处理其他记录并返回。如果查询的驱动表的记录数非常多,或者被驱动表的连接列上无索引或索引不是高度可选的情况,嵌套循环连接的效率是非常低的

-- 删除原表

drop table t1;

-- 建立测试表

create table t1(

f1 varchar2(10),

f2 varchar2(1000)

)

tablespace CTL

pctfree 98;

-- 填充测试内容

insert into t1(f1,f2)

select rownum, lpad(rownum,700,'0')

from dba_tables a, dba_tab_cols b

where aowner = bowner

and rownum < 10000;

commit;

-- 检查测试内容格式

select sysdbms_rowidrowid_block_number(rowid), f1, f2 from t1;

-- 每条记录都存储在单独的数据块中

select count( distinct sysdbms_rowidrowid_block_number(rowid)) from t1;

/

用同样的方式建立表t2

/

-- 删除原表

drop table t2;

-- 建立测试表

create table t2(

f1 varchar2(10),

f2 varchar2(1000)

)

tablespace CTL

pctfree 98;

-- 填充测试内容

insert into t2(f1,f2)

select rownum 10, lpad(rownum 10,700,'0')

from dba_tables a, dba_tab_cols b

where aowner = bowner

and rownum < 1000;

commit;

-- 检查测试内容格式

select sysdbms_rowidrowid_block_number(rowid), f1, f2 from t2;

-- 每条记录都存储在单独的数据块中

select count( distinct sysdbms_rowidrowid_block_number(rowid)) from t2;

create index ind_t1_f1 on t1(f1);

create index ind_t2_f1 on t2(f1);

--首先我们来看使用nested loop关联方式, 不同表作为驱动时的情况

1, 表t2作为驱动表

select /+ ordered use_nl(t1 , t2)/

t1f1, t2f1

from ctlt2 t2,ctlt1 t1

where t1f1 = t2f1

and t1f1 < 1000;

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=84 Card=4 Bytes=56)

1 0 NESTED LOOPS (Cost=84 Card=4 Bytes=56)

2 1 TABLE ACCESS (FULL) OF 'T2' (Cost=2 Card=82 Bytes=574)

3 1 INDEX (RANGE SCAN) OF 'IND_T1_F1' (NON-UNIQUE) (Cost=1 C

ard=1 Bytes=7)

Cost = outer access cost + (inner access cost outer cardinality)

Cost = 2 + 1 82 = 84;

Statistics

----------------------------------------------------------

0 recursive calls

0 db block gets

2020 consistent gets

23 physical reads

0 redo size

2650 bytes sent via SQLNet to client

721 bytes received via SQLNet from client

8 SQLNet roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

99 rows processed

2, t1作为驱动表

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=6 Card=4 Bytes=56)

1 0 NESTED LOOPS (Cost=6 Card=4 Bytes=56)

2 1 TABLE ACCESS (FULL) OF 'T1' (Cost=2 Card=4 Bytes=28)

3 1 INDEX (RANGE SCAN) OF 'IND_T2_F1' (NON-UNIQUE) (Cost=1 C

ard=1 Bytes=7)

Cost = outer access cost + (inner access cost outer cardinality)

Cost = 2 + 1 4 = 84;

Statistics

----------------------------------------------------------

0 recursive calls

0 db block gets

11123 consistent gets

3 physical reads

0 redo size

2650 bytes sent via SQLNet to client

721 bytes received via SQLNet from client

8 SQLNet roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

99 rows processed

32, 哈希连接(hash join)

哈希连接分为两个阶段,如下。

1、 构建阶段:优化器首先选择一张小表做为驱动表,运用哈希函数对连接列进行计算产生一张哈希表。通常这个步骤是在内存(hash_area_size)里面进行的,因此运算很快。

2、 探测阶段:优化器对被驱动表的连接列运用同样的哈希函数计算得到的结果与前面形成的哈希表进行探测返回符合条件的记录。这个阶段中如果被驱动表的连接列的值没有与驱动表连接列的值相等的话,那么这些记录将会被丢弃而不进行探测

哈希连接比较适用于返回大数据量结果集的连接。

使用哈希连接必须是在CBO模式下,参数hash_join_enabled设置为true,

哈希连接只适用于等值连接。从Oracle9i开始,哈希连接由于其良好的性能渐渐取代了原来的排序合并连接。

SQL> select /+ ordered use_hash(t1 , t2) /

t1f1, t2f1

from ctlt1 t1,ctlt2 t2

where t1f1 = t2f1 2 3 4 ;

999 rows selected

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=5 Card=82 Bytes=1148

)

1 0 HASH JOIN (Cost=5 Card=82 Bytes=1148)

2 1 TABLE ACCESS (FULL) OF 'T1' (Cost=2 Card=82 Bytes=574)

3 1 TABLE ACCESS (FULL) OF 'T2' (Cost=2 Card=82 Bytes=574)

Statistics

----------------------------------------------------------

0 recursive calls

0 db block gets

11113 consistent gets

0 physical reads

0 redo size

23590 bytes sent via SQLNet to client

1381 bytes received via SQLNet from client

68 SQLNet roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

999 rows processed

33, 排序合并连接(merge join)

排序合并连接的方法非常简单。在排序合并连接中是没有驱动表的概念的,两个互相连接的表按连接列的值先排序,排序完后形成的结果集再互相进行合并连接提取符合条件的记录。相比嵌套循环连接,排序合并连接比较适用于返回大数据量的结果。

排序合并连接在数据表预先排序好的情况下效率是非常高的,也比较适用于非等值连接的情况,比如>、>=、<=等情况下的连接(哈希连接只适用于等值连接)。由于Oracle中排序 *** 作的开销是非常消耗资源的,当结果集很大时排序合并连接的性能很差,于是Oracle在73之后推出了新的连接方式——哈希连接。

1, rbo模式;

2, 不等于关联(> < >= <= <>)

3, hash_join_enabled = false;

4, 数据源已排序

开发过程需要注意的问题有下面这些:\x0d\\x0d\1 服务器端必须提供输入数据正确性的验证,客户端的Javascript验证可以没有。这是基于安全性的考虑,因为Javascript是很容易被绕过的,增加客户端验证只是为了减少服务器压力、界面更加容易使用。 \x0d\\x0d\2 适度使用Session,尽量不要在Session里放很大的集合对象,以免内存消耗过大,因为很多用户访问的时候会产生很多的Session。参数传递应该尽量通过Request。熟悉>

从字面上说,ASP包含三方面含义:

1、Active:ASP使用了Microsoft的ActiveX技术。ActiveX(COM)技术是现在Microsoft软件的重要基础。它采用封装对象,程序调用对象的技术,简化编程,加强程序间合作。ASP本身封装了一些基本组件和常用组件,有很多公司也开发了很多实用组件。只要你可以在服务器上安装这些组件,通过访问组件,你就可以快速、简易地建立自己的WEB应用。

2、Server:ASP运行在服务器端。这样就不必担心浏览器是否支持ASP所使用的编程语言。ASP的编程语言可以是VBSCRIPT和 JSCRIPT。VBSCRIPT是VB的一个简集,会VB的人可以很方便的快速上手。然而Netscape浏览器不支持客户端的VBSCRIPT,所以最好不要在客户端使用VBSCRIPT。而在服务器端,则无需考虑浏览器的支持问题。Netscape浏览器也可以正常显示ASP页面

3、Pages:ASP返回标准的HTML页面,可以正常地在常用的浏览器中显示。浏览者查看页面源文件时,看到的是ASP生成的HTML代码,而不是ASP程序代码。这样就可以防止别人抄袭程序。

由此我们可以看出,ASP是在IIS下开发WEB应用的一种简单、方便的编程工具。在了解了VBSCRIPT的基本语法后,只需要清楚各个组件的用途、属性、方法,就可以轻松编写出自己的ASP系统。

二、ASP能干什么?

ASP是基于WEB的一种编程技术,可以说是CGI的一种。它可以完成以往CGI程序的所有功能,如计数器、留言簿、公告板、聊天室等等。ASP可以轻松地实现对页面内容的动态控制,根据不同的浏览者,显示不同的页面内容。而浏览者一点觉察不出来,就像为他专门制作的页面一样。使用各种各样的组件,ASP 可以完成无比强大的功能。使用FileSystemObject,可以对服务器上的文件进行 *** 作,浏览、复制、移动、删除等。有ADO(Active Database Object,动态数据库对象)的支持,ASP对数据库的 *** 作非常得心应手。你甚至可以像使用本地数据库那样,管理远程主机上的数据库,对表格、记录进行各种 *** 作。使用CDONTS(Collaboration Data Objects for NTS,NTS协作数据对象),可以发送、查看邮件,实现WEBMAIL的功能。结合WSH(Windows Scripting Host),可以实现对NT主机的管理,如NT用户管理、IIS虚拟主机设置、EXCHANGE邮箱设置等等,就像管理本地机一样方便。

PHP,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:Hypertext Preprocessor)的缩写。PHP 是一种 HTML 内嵌式的语言,PHP与微软的ASP颇有几分相似,都是一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,现在被很多的网站编程人员广泛的运用。PHP 独特的语法混合了 C、Java、Perl 以及 PHP 自创新的语法。它可以比 CGI 或者 Perl 更快速的执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的 CGI要高许多;与同样是嵌入HTML文档的脚本语言JavaScript相比,PHP在服务器端执行,成分利用了服务器的性能;PHP执行引擎还会将用户经常访问的PHP程序驻留在内存中,其他用户在一次访问这个程序时就不需要诚信编译程序了,只要直接执行内存中的代码就可以了,这也是PHP高效率的体现之一。PHP具有非常强大的功能,所有的CGI或者JavaScript的功能PHP都能实现,而且支持几乎所有流行的数据库以及 *** 作系统。

PHP 最初是1994年Rasmus Lerdorf创建的,刚刚开始只是一个简单的用Perl语言编写的程序,用来统计他自己网站的访问者。后来又用C语言重新编写,包括可以访问数据库。在 1995年以Personal Home Page Tools (PHP Tools) 开始对外发表第一个版本,Lerdorf写了一些介绍此程序的文档,并且发布了PHP10。在这早期的版本中,提供了访客留言本、访客计数器等简单的功能。以后越来越多的网站使用了PHP,并且强烈要且增加一些特性,比如循环语句和数组变量等等,在新的成员加入开发行列之后,在1995年中, PHP20发布了。第二版定名为PHP/FI(Form Interpreter)。PHP/FI加入了对mSQL的支持,从此建立了PHP在动态网页开发上的地位。到了1996年底,有15000个网站使用 PHP/FI;时间到了1997年中,使用PHP/FI的网站数字超过五万个。而在1997年中,开始了第三版的开发计划,开发小组加入了 Zeev Suraski 及 Andi Gutmans,而第三版就定名为PHP3。2000年,PHP40又问世了,其中增加了许多新的特性。

PHP的特性包括:

开放的源代码:所有的PHP源代码事实上都可以得到。

PHP是免费的。

基于服务器端:由于PHP是运行在服务器端的脚本,可以运行在UNIX、LINUX、WINDOWS下。

嵌入HTML:因为PHP可以嵌入HTML语言,所以学习起来并不困难。

简单的语言:PHP坚持脚本语言为主,与Java以C++不同。

效率高:PHP消耗相当少的系统资源。

图像处理:用PHP动态创建图像

PHP 3与PHP 4的比较

PHP3跟Apache服务器紧密结合的特性;加上它不断的更新及加入新的功能;而且几乎支持所有主流与非主流数据库;再以它能高速的执行效率,使得 PHP在1999年中的使用站点已经超过了150000万。加上它的源代码完全公开,在 Open Source意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新的活力,使得PHP无论在UNIX、LINUX或是 Windows的平台上都可以有更多新的功能。它提供丰富的函数,使得在程序设计方面有着更好的支持。

PHP40整个脚本程序的核心大幅更动,让程序的执行速度,满足更快的要求。在最佳化之后的效率,已较传统CGI或者ASP等程序有更好的表现。而且还有更强的新功能、更丰富的函数库。无论您接不接受,PHP 都将在 Web CGI 的领域上,掀起巅覆性的革命。对于一位专业的Web Master 而言,它将也是必修课程之一。

PHP 40是更有效的,更可靠的动态Web页开发工具,在大多数情况运行比 PHP 30要快,其脚本描述更强大并且更复杂, 最显著的特征是速率比的增加。PHP40这些优异的性能是PHP 脚本引擎重新设计产生的结果:引擎由 AndiGutmans 和 Zeev Suraski从底层全面重写。PHP40 脚本引擎 ——Zend 引擎,使用了一种更有效的编译——执行方式, 而不是PHP 30 采用的执行 ——当解析时模型。

PHP4在30版的基础上增加或增强了许多有用的特征,主要如下:

(1)别名:在PHP4中,可以利用引用为变量赋值,这给编程带来了很大的灵活性。

(2)扩充了API 模块:PHP 40 为扩展的 API 模块的提供了扩展PHP接口模块, 它比旧的 API 版本显著地快。 PHP 模块已有的及最常用的接口多数被转换到使用这个扩展的接口。

(3)自动资源释放:PHP4增加了引用计数功能,这种新技术的引入使PHP4具有了自动内存管理功能,减轻了开发人员的负担。

(4)布尔类型:PHP 40 支持布尔类型。

(5)进程生成:在 UNIX 环境下的 PHP 40 提供了一个很智能和通用的生成进程, 使用了一种名为基于automake/libtool的系统生成技术。

(6)COM/DCOM 支持:PHP 40 提供 COM/DCOM 支持 ( 仅用于Windows 环境 ) 可以无缝地存取和访问 COM 对象。

(7)与PHP 30 兼容性很好:PHP 40 是与 PHP 30 代码向后兼容性接近100% 。由于 PHP 4 的改进的体系结构,两者有一些细微的差别,但是大多数人将可能永远不可能遇上这种情况。

PHP介绍

(8)配置:PHP4重新设计和增强了PHP。ini文件,这使得用PHP。ini来配置PHP显得极为容易,这个文件可以在运行时被Apache(unix系统)或由Windows 注册(Windows 环境)。

(9)加密支持:PHP4实现了完整的加密, 这些加密功能是一个完整的mycrypt库,并且 PHP 40 支持哈希函数。Blowfish,TripleDES,MD5,并且SHA1 也是可使用的一些加密算法。

(10)类型检查:PHP 40 支持同一 *** 作符用于评类型检查:===( 3 等号运算符 ), 为在两个值和其类型之间作检查。例如, 3 ===3 将视为假 ( 类型是不同的 ), 而 3 ==3 ( 相等判断 ) 将视为真。

(11)FTP 支持:PHP 40 支持 FTP 。通常, 你会为通过一个调制解调器连接下载一个大文件提供一个接口。然而, 如果你确实有需要,可以使用PHP 。

(12)PHP4新增函数或功能增强函数:PHP 40 新增了许多函数,同时也将许多现有的函数功能进行了增强,以下是一些例子。 array_count_values() eval() foreach() nclude() ob_end_clean() ob_end_flush() ob_get_contents() ob_start() strip_tags() unset()

(13)here打印:PHP 40 的Here打印是与Perl类似的, 尽管完全不相同。Here是打印大容量文章的一个有用的方法,例如在 HTML文件中,不会漏掉任何一个字符,例如目录标记。

(14)>

这是我在网上找到的我现在也在学习zencart祝你马到功成!

如何修改Zen-cart模板

DIR_WS_CATALOG // zent cat目录 这些在includes/configurephp定义

meta_tagsphp //定义网站的meta信息。这些是从数据库中取出来的。在includes/modules/下面

HTML_PARAMS //模板语言常量文件定义的。

$current_page_base 在includes/init_inicludes/init_sanitizephp $_GET['main_page']

manufacturers_id 生产厂商ID

product_id 产品ID

$tmp_pagename index_home

有加载modules/pages

======================

首页加载的文件

html_headerphp

tpl_index_defaultphp {indeXDefaultMainContent 首页可以编辑}

tpl_modules_featured_productsphp -> tpl_columnar_displayphp

bannerOne banners [后台bannner控制]

logo 修改 tpl_headerphp 页面 在模板的images/logogif

id=”mainwrapper”

common/tpl_headerphp 功能:所有页面的页眉 基本可以不用或者广告用

id=”headerwrapper”

navColumnOnewrapper

navEZpagesTOp 简易页面的连接

左边分类在 templates/模板/sideboxes/下面 sql参数在categoriesphp

=============================

1 在首页顶部增加连接的方法。

找到模板文件夹下面的zcen/tpl_headerphp

在#topbarwrap与#topbar 增加一个<div>连接</div> 里面写上你要的连接

2 Logo的替换。这个在后台是没有的。在语包的文件里定义。

找到languages/english/zcen/headerphp 找到Header_logo_image 常量 修改

或者 替换 模板下面的 logogif文件/includes/templates/zcen/images/logogif

3 导航栏的东西〔这个后台的设计的)

样式调节#navEZPagesTop

后台的 参数调整:0 1 2

后台的 ezpage设置

4 首页分类名称的修改

打开 /templates/languages/englishphp

找到:define(”BOX_HEADING_CATEGORIES”,”CATEGORIES”)

改为:define(”BOX_HEADING_CATEGORIES”,”Select you game”);

主`

D:\WEB\zen-cart\includes\templates\classic\css\stylesheetcss

整个页面组织

D:\WEB\zen-cart\includes\templates\template_default\common\tpl_main_pagephp

网页左右栏width源代码:<td id=”navColumnOne” class=”columnLeft” style=”width: 150px;”>

动态调用width: <php echo COLUMN_WIDTH_LEFT; >”>,

在后台-configuration-layout里可以更改Column Width/

Column Width – Left Boxes

商品分类名称Categories更改:BOX_HEADING_CATEGORIES,

“D:\WEB\zen-cart\includes\languages\englishphp”(78,11): define(’BOX_HEADING_CATEGORIES’, ‘Categories’);

spooer名称更改:define(’BOX_HEADING_BANNER_BOX’,’Sponsors’)

默认模板,左spooner对应’BOX_HEADING_BANNER_BOX’ 右上spooer对’BOX_HEADING_BANNER_BOX_ALL’

右下spooer对应BOX_HEADING_BANNER_BOX2

左边栏处理:只保留includes\templates\template_default\sideboxes\tpl_categoriesphp,在里面增加

链接

右边栏的处理:

1后台设置为保留who’s onlie(sideboxes/whos_onlinephp),

与之对应的 tpl_box_default_rightphp,查找<php echo $title; >进行替换

2添加左边栏目内容,对tpl_box_default_rightphp更改:

中部修改:

===========

\includes\templates\template_default\templates\tpl_index_defaultphp

去掉顶部说明:<php if (SHOW_CUSTOMER_GREETING == 1) { >

<h2 class=”greeting”><php echo zen_customer_greeting(); ></h2>

<php } >

去掉欢迎信息:

<h1 id=”indexDefaultHeading”><php echo HEADING_TITLE; ></h1>

去掉顶部导航:

\includes\templates\template_default\common\tpl_main_pagephp

<div id=”navBreadCrumb”><php echo $breadcrumb->trail(BREAD_CRUMBS_SEPARATOR); ></div>

模板顶部修改:

==========

\zen-cart\includes\templates\template_default\common

\tpl_headerphp

<div id=”navMain”></div>内可增加链接

<php

/

prepares and displays header output

/

if (CUSTOMERS_APPROVAL_AUTHORIZATION == 1 && CUSTOMERS_AUTHORIZATION_HEADER_OFF == ‘true’ and ($_SESSION['customers_authorization'] != 0 or

$_SESSION['customer_id'] == ”)) {

$flag_disable_header = true;

}

require($template->get_template_dir(’tpl_headerphp’,DIR_WS_

TEMPLATE, $current_page_base,’common’) ‘/tpl_headerphp’);>

上段从<div id=”mainWrapper”>抽出,放在它前面做全屏导航版块

顶部搜索按钮修改:

\includes\templates\template_default\common\tpl_headerphp :

<div id=”navMainSearch”><php require(DIR_WS_MODULES ’sideboxes/search_headerphp’); ></div>

自动生成导航栏:

\includes\templates\template_default\templates\

tpl_modules_categories_tabsphp

将其代码掏空,重新添加导航代码:

~~~~~~~~~~~~~~~~~~~~~~~~~

<php

/

Module Template – categories_tabs

Template stub used to display categories-tabs output

@package templateSystem

@copyright Copyright 2003-2005 Zen Cart Development Team

@copyright Portions Copyright 2003 osCommerce

@license >

session是服务器对象,javascript是客户端脚本,你能做的 *** 作就是把这个值用<%=%>输出到页面的javascript中参与运算,而无法直接用js调用的。

具体的应用一般都是这样:

< script>

function do(){

var a='<%=sessiongetAttribute("userName")%>';

//或者用var a="${sessionScopeuserName}"

}

< /script>

此方法在静态页面中不可用,在javascript文件下不可用,用于jsp页面中嵌套的脚本中。

解决:

1修改webconfig中timeout的时效时间

2建议让网站使用独立的应用程序池

3iis设置Session超时时间(默认为20分钟)

4在应用程序池上打开网站对应的应用程序池属性,将web数量改为1 重启iis

5在主页里面嵌套一个框架页iframe,设置宽度高度为0在里面的加载页面里的

<head>里面加入<meta >

以上就是关于Oracle执行计划突变,我是软件测试人员,我们有遇到好几次oracle执行计划突变引起的性能问题没有被测试出全部的内容,包括:Oracle执行计划突变,我是软件测试人员,我们有遇到好几次oracle执行计划突变引起的性能问题没有被测试出、JAVA开发过程中需要注意那些问题、用php编写一个页面(index.php),要求能连接数据库,并能实现添加、修改和删除数据表的内容。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9528690.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存