TUXEDO超时控制全功略

【软路由】旁路由使用配置教程 【软路由】旁路由使用配置教程简介旁路由好处旁路由配置步骤1、修改管理地址网段 简介 我们都知道,软路由一般有两种使用方式,一种是作为承担DHCP分配的主路由,而另一种就是作为不承担DHCP分配功能的旁路由使用。今天就来介绍如何将软路由配置成为旁路由。 旁路由好处 旁路由最大的好处就是它不承担DHCP分配任务,这意味着它的对网络的影响极小。即使突然故障也不会导致整个网络瘫痪。更别提软路由的配置复杂,用户可能还经常修改上面的网络配置,一旦出错就是整个网络瘫痪,如果家中还有其他人使用网络,影响实在是不好。 建议有 阅读详情

 本《功略》集中了TUXEDO应用中,可能涉及到的所有时间参数,并分别对其进行详细描述,不但对其出处、取值等基本属性进行查证,而且,通过分析其内在的控制机制,给出设置建议,以期能够达到透彻理解、方便查阅、准确使用的目的。

1 前言

金融、电信等众多行业的综合营业系统中,广泛使用了TUXEDO交易中间件,用来处理大量并发的联机事务处理(OLTP)业务。典型的OLTP业务,每笔业务的信息量较小,而且,具有一定的实时性,对时间的要求非常严格。

TUXEDO,联系着DATABASE和客户端软件,凭借其多层次的超时控制机制,达到客户端快速响应,服务器端稳定可靠的效果。

TUXEDO的多层次的超时控制机制中,涉及到的时间参数不少于10个,再加上与之紧密联系的DATABASE中的几个超时参数,确实比较复杂。遗憾的是,目前还没有的专门的文档对它们进行详细说明,而是分散在不同的专题中分别说明,而且,不同的专题中,解释的详细程度也不一样,在查阅过程中,多有不便。

本文试图将这些参数集中起来,对每一个都加以详细说明,并试图解释每个参数存在的原因。大部分参数时间长短的设置,除个别外,基本没有固定的模式,只要了解它们的具体含义,并结合具体应用系统的实际要求,相信大家都能够作出合理的配置。

2 全功略解读

2.1 SCANUNIT

2.1.1 参数出处

UBBCONFIG配置文件 -> RESOURCES -> SCANUNIT 。

2.1.2 时间单位

秒,且必须为5的倍数。

2.1.3 取值范围

大于0小于等于60中5的倍数,即{5,10,15,20,25,30,35,40,45,50,55,60}。

2.1.4 默认取值

10 。

2.1.5 用途解释 ⑴

这个参数大家都会用,比较好理解,TUXEDO中,BBL是用来对Bulletin Board进行管理和监控的系统进程,它基于时间片的轮询方式,时间片的大小就是SCANUNIT的值,SCANUNIT是Tuxedo对系统进行管理的最基本时间单位。每隔SCANUNIT,BBL对Bulletin Board进行一次检查,看看有没有超时的事务或阻塞的服务请求。后面讲到的很多时间参数都是以SCANUNIT为单位。

2.1.6 超时后果

仅仅是个轮询时间单位而已,到时间就轮询,如此而已。

2.1.7 设置考虑

作为一个涉及到整个TUXDO系统的基本单位时间,如果业务需要,对时间参数控制比较严格,设置为5也不算小。如果系统业务对时间要求不严格,那就大点儿,60也没什么不可以;毕竟频繁轮询是要耗费更多系统资源的,而任何对资源的不必要的消耗都是浪费。

2.2 SANITYSCAN

2.2.1 参数出处

UBBCONFIG配置文件 -> RESOURCES -> SANITYSCAN 。

2.2.2 时间单位

SCANUNIT 。

2.2.3 取值范围

1 ~32767 。

2.2.4 默认取值

大约120/SCANUNIT。

2.2.5 用途解释 ⑵

进行系统健全性检查,主要包括Server进程状态和Bulletin Board数据结构,检查Server进程是否存活,如果已经不存在,会清理Bulletin Board中相应的数据项及IPC资源,并根据参数配置决定是否重新启动,如果设了RESTART=Y,所占的Message Queue不会被清除,Queue中的Request得到保留,仍会被处理。如果是MP模式,BBL还会给DBBL发状态消息。

2.2.6 超时后果

仅仅是个系统健康检查的间隔时间而已,到时间就检查,如此而已。

2.2.7 设置考虑

作为一个涉及到整个TUXDO系统健康检查的间隔时间,如果系统处在一个稳定的运行环境中,网络、数据库、应用都很稳定,那这个参数可以大一些;如果运行环境不稳定,系统繁忙,而且Server进程经常因异常(如超时)而死掉,那就设置小一些。设置的原则和SCANUNIT一样:不要随意浪费系统资源。

2.3 BBLQUERY

2.3.1 参数出处

UBBCONFIG配置文件 -> RESOURCES -> BBLQUERY。

2.3.2 时间单位

SCANUNIT

2.3.3 取值范围 ⑶

BBLQUERY必须大于等于SANITYSCAN,tmloadcf 时会强制检查,如果设的值小于SANITYSCAN,tmloadcf会自动调整为SANITYSCAN。

2.3.4 默认取值

大约300/SCANUNIT。

2.3.5 用途解释 ⑷

BBL检查,在MP模式下,BBL会每隔一段时间都发送了" I am ok "心跳信息给DBBL,这个间隔就是BBLQUERY。

2.3.6 超时后果 ⑸

如果DBBL在规定时间间隔内没有收到某个BBL的信息,DBBL它会主动发送Request给那个BBL,判断其是否正常。(如果等了DBBLWAIT后仍然没有回复,DBBL会认为那台机器有问题,然后,将其隔离。)

2.3.7 设置考虑

此设置仅仅在MP模式下才起作用。

在MP模式下,如果TUXEDO系统需要对不稳定的运行环境可能发生的故障作出快速的反应,那么BBLQUERY要设置小一些,让系统快速的自我检查。考虑网络传输时间、系统反应速度等因素,网络速度越慢,系统负载越重,取值越大;反之亦然。

如果系统运行环境很稳定,利用其默认值即可,甚至可以更大数值。

2.4 DBBLWAIT

2.4.1 参数出处

UBBCONFIG配置文件 -> RESOURCES -> DBBLWAIT。

2.4.2 时间单位

SCANUNIT。

2.4.3 取值范围

大于0。

2.4.4 默认取值

1和20/SCANUNIT中的较大者 。

2.4.5 用途解释 ⑹

如果DBBL在规定时间间隔BBLQUERY内没有收到某个BBL的"I AM OK"信息,它会发Request给那个BBL,其等待回复的时间就是DBBLWAIT。

2.4.6 超时后果 ⑺

DBBL等了DBBLWAIT后仍然没有回复,DBBL会认为相关BBL的机器有问题,然后,将其隔离(partation)。

2.4.7 设置考虑

此设置仅仅在MP模式下才起作用。

在MP模式下,考虑网络传输时间、系统反应速度等因素,网络速率越大,系统负载越轻,此数值越小;反之亦然。

2.5 BLOCKTIME

2.5.1 参数出处

UBBCONFIG配置文件 -> RESOURCES -> BLOCKTIME。

2.5.2 时间单位

SCANUNIT。

2.5.3 取值范围

大于0。

2.5.4 默认取值

大约60/SCANUNIT。

2.5.5 用途解释

Client端阻塞请求(Blocking call)服务的超时值,BBL发现有超时的Request时,会给相应的Client端发超时信息。

此参数仅仅在"阻塞请求"的情况下起作用,因此,理解它,关键要理解什么是阻塞请求(Blocking call)?习惯上,我们将"阻塞请求"理解为"同步请求",将"异步请求"理解为"非阻塞请求",是源于将"<发送请求-得到结果>"这一过程看成为一个整体。如果是整体的同步操作,就认为是"阻塞请求";如果是分开异步的操作,就认为是"非阻塞请求"。

其实,异步操作中,同样存在"阻塞请求",tuxedo中,tpacall和tpgetrply这两个异步操作各自本身就是"阻塞请求",tpacall是将请求发送到请求队列,tpgetrply是将从结果队列中取出结果,如果没有特殊的设置,这两个操作本身都是阻塞的,BLOCKTIME将起作用。

以Request/Reply方式为例,将成功发送请求的时长设置为T1,将请求处理的时长(含排队等待)设置为T2,将成功取得结果的时长设置为T3,那么在下面不同的情况下,将触发BLOCKTIME,引起超时:

(1) tpcall()不在transaction中,flag为0,当T1+T2+T3 > BLOCKTIME时,发生超时 ;

(2) tpcall()不在transaction中,flag为TPNOBLOCK,只有当一次调用即成功完成T1阶段发送请求的任务后,T2+T3 > BLOCKTIME时,发生超时 ;

(3) tpacall()不在transaction中,flag为0,当T1 > BLOCKTIME时,发生超时 ;

(4) tpgetrply()不在transaction中,flag为0,当T2+T3 > BLOCKTIME时,发生超时 ;

(5) tpcall,tpacall,tpgetrply,在其他任何情况,BLOCKTIME都将不起作用。

(6) 如果请求处于事务交易(transaction)中,此参数不起作用,取代它的是 TransactionTimeOut。

2.5.6 超时后果

在上面描述的四种情况下,Server端 BBL返回Client端超时错误:tperrno = 13 (TPETIME)。同时,client端和Server端已经建立的联接不受任何影响,继续保持联接。

2.5.7 设置考虑

此参数涉及整个TUXEDO系统,不能够直接适应业务系统中不同场合的不同时间等待要求,而且在应用过程中,存在误差,不适合进行精确到秒的时间控制。

准确有效的使用这个参数,需要考虑好以下几个问题:

(1) 应用中是否完全依赖这个参数进行时间控制?

(2) 有哪些业务依赖这个参数进行时间控制?

(3) 平衡各种业务,此参数设置为多少?

(4) 除此参数外,是否需要利用其他的超时控制机制?

2.6 WSL CLOPT [-T Client_timeout]

2.6.1 参数出处

UBBCONFIG配置文件 -> SERVERS -> WSL -> CLOPT "-T"。

2.*** 默认取值

0 ,意味着无限等待时间。

2.6.5 用途解释 ⑻

系统允许的Client静默时长,即Client和WSH建立联接后,如果在此指定的时间内客户端没有发送任何请求,WSH会自动回收与此Client端相关的资源。

2.6.6 超时后果 ⑼

WSH会自动释放和这个Client端的联接,并将此Client在Bulletin Board中的数据项清空,RollBack它未完成的事务 。

2.6.7 设置考虑

此参数的设置目的,主要是从Server的角度进行考虑,防止在Client端意外失效的情况下仍然耗费Server端的资源。

如果设置太小,那么频繁的检测同样要消耗Server端一定的资源,而且,在使用长联接的系统中,系统空闲时,容易造成已经建立的长联接频繁的释放,影响正常业务的提供。

如果设置为0,不管发生什么状况,哪怕是Client端系统真的崩溃了,也不会触发此超时,这将造成Server端资源的无谓浪费。

建议:在业务负载不均衡的长联接业务系统中,根据业务实际空闲时间,适当加大此数值。

2.7 WSL CLOPT [-t timeout]

2.7.1 参数出处

UBBCONFIG配置文件 -> SERVERS -> WSL -> CLOPT "-t"。

2.7.2 时间单位

SCANUNIT。

2.7.3 取值范围

大于0。

2.7.4 默认取值

非安全应用为3,安全应用为6 。

2.7.5 用途解释

建立联接时长,指workstation Client建立与server端WSH建立联接允许的最长时间,因为非安全应用建立联接时不需要进行用户校验等步骤,因此,建立联接需要的时间较短。同理,安全应用需要的时间较长。

2.7.6 超时后果

建立联接失败。

2.7.7 设置考虑

设置此参数,要分析业务系统中,网络带宽因素、用户验证的复杂程度等。






2.8 WSL CLOPT [-I init_timeout]

2.8.1 参数出处

UBBCONFIG配置文件 -> SERVERS -> WSL -> CLOPT "-I"。

2.8.2 时间单位

秒。

2.8.3 取值范围

大于0。

2.8.4 默认取值

60 。

2.8.5 用途解释 ⑽

WorkStation Client端和后台建立联接的超时参数值。

(注:感觉上此参数和 WSL CLOPT [-t timeout]功能类似)

2.8.6 超时后果

不确定,现有的文档没有一点儿解释。按照字面解释,应该是tpinit的超时时间,但是,在tpinit所有的错误中,只有TPESYSTEM可能承担这个超时后果,而且仅仅是可能。

2.8.7 设置考虑

在使用过程中,没有感觉到这个参数的存在,也从来没有专门设置过。

2.9 WSL CLOPT [-N network_timeout]

2.9.1 参数出处

UBBCONFIG配置文件 -> SERVERS -> WSL -> CLOPT "-N"。

2.9.2 时间单位

秒。

2.9.3 取值范围

大于等于0。

2.9.4 默认取值

0 。

2.9.5 用途解释

网络超时,指Workstation client利用网络接收数据(receive data)的等待时间。

我们同样需要分析触发Network Timeout的不同条件。

以Request/Reply方式中的tpcall为例,将成功发送请求的时长设置为T1,将请求处理的时长(含排队等待)设置为T2,将成功取得结果的时长设置为T3,那么在如下情况下,将触发Network Timeout,引起超时:

(1) tpcall()不在transaction中,flag为0,当 BLOCKTIME> T1+T2+T3 > NetworkTimeout时,触发此超时 ;

(2) tpcall() 在transaction中,flag为0,当TranactionTimeout> TI+T2+T3 > NetworkTimeout时,触发此超时 ;

(3) tpcall()不在transaction中,flag为TPNOBLOCK,只有当一次调用即成功完成T1阶段发送请求的任务后,当 BLOCKTIME> T2+T3 > NetworkTimeout时,触发此超时 ;

(4) tpcall()在transaction中,flag为TPNOBLOCK,只有当一次调用即成功完成T1阶段发送请求的任务后,当 TranactionTimeout> T2+T3 > NetworkTimeout时,触发此超时 ;

(5) tpcall()不在transaction中,flag为TPNOTIME,当 T1+T2+T3 > NetworkTimeout时,触发此超时 ;

(6) tpcall()在transaction中,flag为TPNOTIME,当 TranactionTimeout> TI+T2+T3 > NetworkTimeout时,触发此超时 ;

(7) tpcall在其他任何情况,NetworkTimeout都将不起作用。

(8) 同理,可以确定NetworkTimeout在tpacall和tpgetrply中起的作用。

2.9.6 超时后果

在上面描述的六种情况下, Client端操作失败,同时,client端断开与Server端已经建立的联接。Server端已经为此Client完成的操作和分配的资源不能立刻回滚和释放,Server端需要等待前面介绍过的Client_timeout时间后,再释放相关的资源。

2.9.7 设置考虑

此参数的设置目的,主要是从Client的角度进行考虑,防止在Server端意外失效的情况下,仍然消耗Client端的资源。

设置参数,必须避免小于BLOCKTIME或TransactionTimeout的情况,因为在这种情况下,会出现业务正常等待中,联接却中断的现象,这是一定要避免的。

同时,由于此超时触发的联接中断,并不能立刻释放Server端的资源,带来业务执行过程中的不确定性,因此,此参数要谨慎使用。

2.10 SVCTIMOUT

2.10.1 参数出处

UBBCONFIG配置文件 -> SERVICES -> SVCTIMEOUT 。

2.10.2 时间单位

秒

2.10.3 取值范围

大于等于0。

2.10.4 默认取值

0,表示无限时长 。

2.10.5 用途解释

服务处理时长(Service Processing Time),表示系统允许服务处理请求的时间长度。

此参数主要是维护Server端系统安全的角度,防止由于系统异常引起的失控服务占据系统资源,阻碍正常的后续业务请求。它起到了一个清道夫的作用,将不能有效提供服务的Services清除出系统,并依靠系统的其他机制,重新产生具有活力的Services。

2.10.6 超时后果

超时后,此Service所属的Server将被系统的SIGKILL信号清除;此操作不会影响与此Server相关的其他正在运行的副本Servers。

如果系统设置SERVERS->RESTART=Y,那么,被清除的Server将立刻自动重新启动。重新启动的次数受随后介绍的MAXGEN和GRACE两个参数联合限制。

如果系统设置SERVERS->RCMD为有效命令文件,那么,在重启此Server时,将同时执行此命令,如向管理员发送通知邮件等。

如果SERVER没有RESTART=Y设置,那么Server将不会自动重新启动。

2.10.7 设置考虑

此参数不是系统全局参数,而是涉及到单个Service,可以根据不同的Service的处理时间进行设置。由于其主要起到系统清道夫的角色,因此,建议设置为正常Service处理时长的3倍较合适,以避免清除正常运行的Service,使正常运行的业务受到影响。

如果系统运行环境基本稳定,一旦出现底层网络或数据库系统故障,不是在短时间内能够恢复,建议将此参数增大,至少为平均恢复时间,甚至可以利用默认值0,无限等待,避免此自动机制,而用人工介入的方法进行服务恢复。因为系统自动的、频繁的SIGKILL将影响到整个TUXEDO系统的稳定。

2.11 GRACE

2.11.1 参数出处

UBBCONFIG配置文件 -> SERVERS -> GRACE 。

2.11.2 时间单位

秒。

2.11.3 取值范围

0-2147,483,647。

2.11.4 默认取值

86400(24小时)。

2.11.5 用途解释

此时间参数与其他两个参数紧密相关RESTART, MAXGEN。

关联起来解释就是,当Server异常终止时,如果RESTART=Y,那么此SERVER可立即自动重新启动,这个重新启动的次数被限制为在GRACE指定的时间间隔内,重启不超过MAXGEN-1 次。

如果RESTART这个参数为N,其他的相关参数将都无效。

2.11.6 超时后果

此参数不仅仅是时间的限制,如果在GRACE时间段内,此SERVER重启次数已经达到MAXGEN-1,后续重启将不能执行。

2.11.7 设置考虑

此组参数设置的综合目的是避免运行Server无限的重启,重启次数说明了系统目前异常状况的严重程度,如果在一定时间内,Server重启次数达到了一定的数量,说明这个Server相关的资源已经出现较严重的故障,需要人工进行干预了。

另外,经过调优的生产系统是不需要自动重启的,因此,RESTART这个参数更多是应用在系统测试版本中,在正常运行的生产系统中,应该有不同参数设置,谨慎使用,因为过多的重启将有可能严重影响Server端的整体稳定性。

2.12 Transaction TimeOut

2.12.1 参数出处

tpbegin(timeout,0)。

2.12.2 时间单位

秒,且必须为SCANUINT的倍数。

2.12.3 取值范围

大于等于0。

2.12.4 默认取值

无,使用时必须明确指定。

2.12.5 用途解释

交易时长,确定交易(transaction)的持续时间,如果超过此时间,系统将返回超时错误。

分析其触发条件,分两种情况:

(1) Server端发起交易,

对Client而言,因为Client不在交易范围内,即使BLOCKTIME设置小于此参数,起有效作用的仍然将是BLOCKTIME,而不是此参数。

(2) Client端发起交易。

对Client而言,因为Client在交易范围内,此时,BLOCKTIME将失效,此参数取而代之。只要处理时间超过此参数,将触发此超时,交易处理将随时中断。

2.12.6 超时后果

相关交易将被标识为abort only。注意,仅仅是标识为abort only,而不是系统自动执行tpabort进行交易恢复。随后必须主动执行tpabort,恢复交易,保障交易完整性。如果没有执行tpabort,系统将通过其他机制,恢复交易,保障交易完整性。

2.12.7 设置考虑

此参数的主要目的是将交易处理过程限制在合理的时间范围内,如果确实是完成交易的条件不具备,系统也能够作出反应,避免系统资源的长时间占用。因此,不管交易由Client还是由Server发起,此参数都要按照业务的实际状况进行设置。如果设置为0,就基本相当于无限时长。(系统unsigned long数据类型的最大值)

2.13 TRANTIME

2.13.1 参数出处

UBBCONFIG配置文件 -> SERVICES -> TRANTIME/AUTOTRAN。

2.13.2 时间单位

秒,且必须为SCANUNIT的倍数。

2.13.3 取值范围

0-2147,483,647。

2.13.4 默认取值

30 。

2.13.5 用途解释

此参数必须与AUTOTRAN配合使用,表示不需要调用tpbegin,就可自动发起的隐含交易(AUTOTRAN implicitly transactions)处理持续时长。其实,起到与tpbegin(timeout,0)中的timeout相同的作用。

其实,AUTOTRAN这个参数更为重要,其默认值为N, 其作用描述如下:

(1) 请求发起方不在交易模式,AUTOTRAN=Y,Service将自动发起一个交易,TRANTIME将起作用;

(2) 请求发起方在交易模式,而且,其中的标记参数(flags)不是TPNOTRAN,那么,无论AUTOTRAN如何,Service将自动加入请求方交易中,TRANTIME将不起作用;

(3) 请求发起方在交易模式,而且,其中的标记参数(flags)是TPNOTRAN,如果AUTOTRAN=N,Service将自动加入请求方交易中,TRANTIME将不起作用;

(4) 请求发起方在交易模式,而且,其中的标记参数(flags)是TPNOTRAN,如果AUTOTRAN=Y,Service将不加入请求方交易中,而是产生一个新的交易,TRANTIME将在新交易中起作用;

2.13.6 超时后果

与tpbegin(timeout,0)中的timeout相同。

2.13.7 设置考虑

与tpbegin(timeout,0)中的timeout相同。

2.14 ORACLE XA OPENINFO参数:SESTM

2.14.1 参数出处

UBBCONFIG配置文件 -> GROUPS -> OPENINFO ->SESTM 。

2.14.2 时间单位

秒。

2.14.3 取值范围

大于等于0,0表示无限时长。

2.14.4 默认取值

无,使用时必须明确设置 。

2.14.5 用途解释

会话静默等待时长,即全局交易中,作为资源管理器(resource manager)已经参与交易并完成相应的数据操作的数据库,等待全局交易中的其他参与方操作完成的时间长度。

举例说明:

假设一个全局交易由以下几个部分组成:

(1)tpbegin(T,0) ->

(2)tpcall(S1) -> DB1 完成耗时 T1;

(3)tpcall(S2) -> DB2 完成耗时 T2;

(4)其他操作 耗时 T3

(5)tpcommit()

其中,tpcall(S1)访问数据库DB1, tpcall(S2)访问数据库DB2。

对DB1而言,如果T-T1> T2+T3 > SESTM1,则触发超时;

对DB2而言,如果T-T1-T2 > T3 > SESTM2,则触发超时;

由此可以看出,此参数的主要目的是对数据库进行资源保护,避免在全局交易中,已经完成任务的数据库,为等待其他参与方耗费过多的资源,毕竟ORACLE中并发全局交易的数量是很有限的。

2.14.6 超时后果

触发此超时后,数据库将自己主动回滚已经完成的任务,释放全局交易资源。TUXEDO控制的全局交易进行TPCOMMIT时,如果总时间仍没有超过Transaction TimeOut,那么TPCOMMIT将失败,XALOG会记录下ORACLE错误:"ORA-24756: Transaction does not exist"。确实如此,拿上面的例子来说,等到最后TPCOMMIT的时候,DB1已经主动回滚了所有的数据,不难理解,对DB1而言,它好像根本没有参加过这个全局交易,自然就会有这样的错误提示。

2.14.7 设置考虑

这个参数是从数据库自我保护的角度设计的,对数据库而言,是不得已的办法。最好的措施还是TUXEDO能够控制时间,赶在SESTM之前,进行TPABORT,主动通知数据库进行数据回滚。

用一个简单的比方:冬天,客人出门时没有关门,SESTM时间后,客人还没有回来,主人感觉到冷了,只好自己去关门,不管什么理由,这样总是不太好。如果在SESTM时间内,客人能及时回来关门,主人就不会感觉那么差。

从前面的超时触发分析,我们也能发现,只要设置SESTM 能够大于 TransactionTimeOut的话,就能够尽量的不触发此超时机制,达到较好的效果。

2.15 ORACLE XA OPENINFO参数:SESWT

2.15.1 参数出处

UBBCONFIG配置文件 -> GROUPS -> OPENINFO -> SESWT。

2.15.2 时间单位

秒。

2.15.3 取值范围

大于0。

2.15.4 默认取值

60 。

2.15.5 用途解释

会话繁忙等待时长,指全局交易中的一个交易分支(transaction branch)正在一个会话(session)中处理数据过程中,如果第二个会话也要对此交易分支进行操作,那么第二个会话必须等待第一个会话完成,如果在等待SESWT后,第一个会话仍然没有完成,那么第二个分支将触发此超时。

举例说明:

假设一个全局交易由以下几个部分组成:

(1)tpbegin(T,0) ->

(2)tpcall(S1) -> DB1 完成数据操作耗时 T1;

(3)tpcall(S2) -> DB2 完成数据操作耗时 T2;

(4)其他操作 耗时 T3

(5)tpcommit()

其中,tpcall(S1)访问数据库DB1, tpcall(S2)访问数据库DB2,任何操作失败后,将调用tpabort。

假设 T1+T2 > T > T1,也就是说,在成功执行第二步tpcall(S1)后,应用执行到第三步tpcall(S2),在执行过程中,将触发TransactionTimeout,tpcall(S2)将返回错误,应用将立即调用tpabort进行交易回滚,DB1的数据将立刻回滚;而DB2并不能中断tpcall(S2)引起的数据操作,对于ORACLE DB2而言,tpcall(S2)引起的数据操作属于第一个会话,而tpabort引起的数据库回滚操作是通过XA接口,属于第二个会话,所以,tpabort作用到DB2上,只有等待第一个会话完成,如果等待SESWT后,第一个会话仍然没有完成,即SESTM

2.15.6 超时后果

系统将返回XA_RETRY错误,提示TMS此操作不能完成,需再试一次。如果应用程序对此没有再次尝试的话,仍以上例说明,DB2只能利用SESTM2,触发超时,自动回滚。

2.15.7 设置考虑

查阅ORACLE相关资源,发现oracal9.2与以前版本效果不同,以前的版本都是第二个会话在等待SESWT后,如果第一个会话操作仍然没有结束,第二个会话能够使第一个会话操作立即进行有效的回滚,使第一个会话返回错误:ORA-24761。

不难理解,两者的区别是,打个简单比方说,A正在用杯子喝水时,B要A放下杯子,B等待SESWT后:

oracle9.2的做法很民主,A还没有用完,通知B,A还在用杯子,不能放下,还想让A放下杯子,可以,再来一次;也就是说,只要A在用,B就不能让人家放下杯子,某种程度上,A代表了强权。

Oracle9.2之前版本的做法很粗暴,通知A不能使用这个杯子了,必须放下,因为B让你放下,而且已经等很久了,某种程度上,B代表了强权。

因此,如果是ORACLE9.2后的版本,SESWT适当放长一些,毕竟还是希望能够等到能做事的时候,把想做的事情做了。如果是以前的版本,SESWT适当放短一些,反正一定能等到,为什么不少等一会儿呢?

2.16 ORACLE sqlnet.expire_time

2.16.1 参数出处

$ORACLE_HOME/network/admin/sqlnet.ora -> expire_time 。

2.16.2 时间单位

分钟。

2.16.3 取值范围

大于0。

2.1*** 默认取值

无 。

2.16.5 用途解释 ⑾

死联接检测DCD(Dead Connection Detection)是 SQL*NetV2.1 和此版本以后的一个新特性, 当它检测到对方 c/s 或者s/s 联接意外终止时, 释放相关占用的资源。

DCD 起初是专为客户机没有从会话中断开联接的情况下断电的环境设计的。

DCD由服务端开始建立联接。 这时候SQL*Net 从参数文件中读取变量, 设置一个定时器定时产生信号。 这个时间间隔是sqlnet.ora文件中的SQLNET.EXPIRE_TIME提供的。

当定时器设定的时间到了之后, 服务器上的SQL*Net 发送一个探测包到客户端。(如果是数据库联接, 目的端的服务器发送探测包到另一端)。 探测包是由空的SQL*Net包组成, 不体现SQL*Net层任何数据, 但会在下一层的网络协议中产生数据流量。

如果客户端的联接仍然是活动的, 探测包被丢弃,计时装置复位。 如果客户端异常断掉,服务器将收到由发送探测包的调用发出的错误。

2.16.6 超时后果

服务器将收到由发送探测包的调用发出的错误,SQL*Net 将会通知操作系统释放联接占用的资源。

需要说明的是, SQL*Net 2.1.x中 一个活动的孤儿进程(active orphan process) ,如单独的查询进程,在查询完成之前不会被杀掉。 在SQL*Net 2.2中,孤儿进程占用的资源将会被无条件释放,不管查询是否结束。

2.16.7 设置考虑

ORACLE 在NT操作系统上,此功能表现很差,检测出的无效联接(dead connection)不能被尽快释放,而必须等到数据库重新启动时才释放。SQL*Net v2.3以后版本改善了以上问题。

此功能只是服务器的特性,如果不设置此参数,此功能将不启动。按照ORACLE的建议,对大多数应用来说,设置10分钟较合适,其实关键还是分析应用系统的实际情况。

同时,不难理解,作为一个数据库自我管理的机制,也是要占用数据库资源和网络资源的,太频繁的探测同样会降低系统和网络的性能。在低速网络上,设置此参数,就需更为慎重。

客户端不需要设置此参数。

2.17 ORACLE distributed_lock_timeout

2.17.1 参数出处

ORACLE初始参数文件:init.ora -> distributed_lock_timeout。

2.17.2 时间单位

秒。

2.17.3 取值范围

大于0。

2.17.4 默认取值

60 。

2.17.5 用途解释

分布式事务锁等待超时(distributed transaction waiting for lock),指第二个事务处理需要的数据库资源,正被第一个分布式事务占用而锁定,那么,第二个事务将等待第一个分布式事务释放此资源,等待distributed_lock_timeout时间后,如果第一分布式事务仍然没有释放此资源,第二个事务触发此超时。

2.17.6 超时后果

如果资源被第一个事务正常使用锁定,ORACLE回滚第二个事务,并返回错误:"ORA-02049: time-out: distributed transaction waiting for lock "。

如果第一个事务处理完成,资源释放后,再尝试第二个事务,就会成功。如果第二个事务不能等待资源自动释放,那么可以采用处理数据库死锁(deadlock)的措施,人工介入,清除第一个事务,但一般不建议采用这种方式,因为第一个事务一般会正常结束的。

如果资源被第一个事务因为处于不确定分布事务状态(in-doubt distributed transaction)而锁定,ORACLE回滚第二个事务,并返回错误:"ORA-01591: lock held by in-doubt distributed transaction identifier "。

这种错误遇到的可能性较小,一般只有在分布事务的关键提交阶段出现网络、系统故障,才可能出现此故障,而且,当网络、系统故障恢复后,ORACLE一般可以自己解决此问题,不需要人工介入。如果一定要人工介入,可以查阅ORACLE专门的手册。

2.17.7 设置考虑

出现这样的超时,是因为特定数据库资源的使用碰撞,要分析应用系统的业务特点,确定碰撞可能发生的条件,在此条件下,资源可能被先来者锁定多长时间(T1),后来者又能够等多长时间(T2),再来设置此参数(T)的大小。如果在大多数情况下,T1 < T2, 那么就设置T1 < T < T2;反之,大多数情况下,T1 > T2,那么,就设置T < T2。

因此,不分析业务特点,一味的增大和减小是不恰当的。

2.18 ORACLE Max_commit_propagation_delay

2.18.1 参数出处

ORACLE初始文件:init.ora -> Max_commit_propagation_delay。

2.18.2 时间单位

0.01秒。

2.18.3 取值范围

0 ~ 90000。

2.18.4 默认取值

700 。

2.18.5 用途解释

最大提交传播时延(MAX_COMMIT_PROPAGATION_DELAY,简称MCPD),在ORACLE RAC(或OPS)环境中才使用,表示在RAC系统中,一个instance系统提交产生的最新系统改变码(SCN),能够以多快的速度反应到另一个instance中。

举例说明,RAC系统,有A,B两个实例(instance),A、B本地系统改变码为SCN1,A更新数据DATA1提交, LGWR操作完成后,A本地系统改变码为SCN2,经过不大于MAX_COMMIT_PROPAGATION_DELAY时间后,B系统本地改变码才变为SCN2。

2.18.6 超时后果

Global Cache Services 将刷新RAC中的SCN。不管SCN是否及时刷新,后续的数据查询都不会因此产生数据库错误。但,在此时间内,有可能查询结果不是最新数据,产生读一致性(read consistency)问题。

2.18.7 设置考虑

RAC环境中的所有实例,此参数值必须相同。

ORACLE8i后,建议常用的两个值是0和700(默认),其他数值皆不建议。其实,这两个数值就代表了RAC环境中,两种SCN 产生机制:

Lamport Scheme和 Broadcast on Commit scheme。

设置为默认值700,表示采用Lamport Scheme,SCN改变不会完全同步,同步将在 7秒钟内完成,而不是总等待7秒钟后才完成。如果系统比较空闲,同步可能在0.5秒(甚至更短时间)内完成;不管系统多繁忙,同步时间也不可能超过7秒。不难理解,采用此模式,整个RAC系统的运行效率较高。

设置为0,表示采用Broadcast on Commit scheme,SCN改变完全同步。每当commit时(即LGWR 写redo log时):

- LGWR发送消息更新全局SCN(global SCN),

- LGWR 发送消息给每个活动的实例更新其本地SCN(local SCN)。

有资料说,只要MCPD < 700,系统将采用Broadcast on Commit scheme。

Lamport Scheme能够适应绝大部分应用的要求,只有个别实时性特别高的业务,才需要Broadcast on Commit scheme。通过分析,不难理解,Broadcast on Commit scheme将需要更多的系统资源。

3 总结

以上所有时间参数,都是tuxedo系统或ORACLE数据库系统提供的时间控制机制,更多的是从维护本系统自身安全的角度,建立起相互之间沟通的规则。在Client 端,中间件服务器,数据服务器这相互联系的三者之间,用一个简单的比方,就是先保证自己尽量不给相关人带来麻烦;一旦相关人出了麻烦,自己能够自我保障,不受别人干扰。

这些时间参数还有的一个共性的特点就是"不精确",如果业务需要要精确到1秒,则必须依靠业务程序中更精确的时间编程。

总之,要保障整个业务系统的有效性和健壮性,必须了解都有哪些时间参数?都表示什么意思?都起哪些作用?自己的业务应用对时间要求是怎样的?这些参数该如何配置才能满足应用的要求?希望本文能够在以上方面给大家带来一点方便。

4 后记

自2002年真正在项目中利用TUXEDO起,就发现已有资料在时间参数解释方面的缺憾,那时,就有写这样一个专题的打算,开始收集这方面的资料。由于后来工作内容的变化,也就没有精力再作整理,但心里一直惦记着这件事情。直到前些天知道了BEA的这个活动,再到网络上搜集资料,发现已经有了一些类似的资料,但感觉仍然不够完整,不够透彻,因此,我认为整理这样一个专题资料,还是有必要的,便下决心借此机会做完这件事情。经过近十天的查阅、整理,终于完成,算是了我多年夙愿。

文中的参数,我仅仅使用过其中的12个,其他未用参数,主要是靠查阅资料和逻辑分析,根据我自己的理解进行解释,再加上时间仓促,或遗漏、不妥之处,敬请指正,让我们一起来使此《功略》更准确、更全面,让更多的人从中受益。

5 参考文献

http://e-docs.bea.com BEA TUXEDO RELEASE 7.1 。

http://dev2dev.bea.com.cn/techdoc/tuxedo/20030230.html 《Tuxedo 中关于时间的参数的说明》作者:不详 。

《ORACLE8i Reference》。

《ORACLE9i Reference》。

《ORACLE8i Parallel Server Concepts and Administration》。

《ORACLE8i Application Developers Guide - Fundamentals》。

http://metalink.oracle.com 相关问题解决资料。

http://www.chinaunix.net 《DCD死联接检测》作者:yukaikai

注:文章中标注⑴~⑽涉及的内容,引自参考文献-2 ,标注⑾涉及的内容,引自参考文献-8

什么是以太网链路聚合 以太网链路聚合技术通过将多个物理端口捆绑成逻辑端口,可显著提升网络性能。该技术能增加总带宽(各链路带宽之和)、提高可靠性(故障秒级切换)并实现智能负载分担。主要分为手工模式和基于LACP协议的动态模式,后者能检测链路故障更可靠。配置时需确保接口参数一致、模式匹配,适用于核心交换、服务器接入等场景。华为设备通过创建Eth-Trunk接口、指定LACP模式并添加成员接口即可完成部署。这项成熟技术能以低成本解决带宽瓶颈和可靠性问题,是构建高速稳定网络的关键方案。 阅读详情

相关推荐

基于OpenMV与双舵机云台的激光追踪系统实战解析

本文详细解析了基于OpenMV摄像头与双舵机云台的激光追踪系统设计与实现。从硬件选型、图像识别算法到PID控制逻辑,全面介绍了如何构建一个高效稳定的激光追踪系统,并分享了电子设计竞赛中的实战经验与调试技巧。该系统在智能玩具、安防监控及教学演示等领域具有广泛应用前景。

prometheus9mon的博客 261

tuxedo错误码

各个信号的含义: TPETIME(13) 超时 TPENOENT(6) 调用后台服务失败 TPESYSTEM(12) :系统错误,如 tuxedo 对应的服务排队过长导致请求不能放入 TPEPROTO(9) : 协议错误,发出的 tpcall 的上下文有问题 TPEOS(7) 系统级错误。消息队列服务放入进去。 tuxed o 错误参考 错误分类 ----------------------- 错误值 Abort -------------------------

luobotoutou123的博客 2065

深入探索 ClickHouse:性能优化之道

在大数据处理的广袤天地里,ClickHouse 宛如一颗璀璨的明星,以其卓越的性能为海量数据的存储与查询提供了强大助力。但要想让 ClickHouse 发挥出极致效能,性能优化至关重要。今天,就让我们一同深入探寻 ClickHouse 的性能优化之路。

arnold66的专栏 1547

ORACLE distributed_lock_timeout参数

ORACLE distributed_lock_timeout参数 今天上午碰到一个报错: ORA-02049:timeout:distributed transaction waiting for lock 但是并未对业务造成实际影响,过了一段时间后好了。因为那段时间,用户连续做了100笔的核销业务。 【经查】 ORA-02049错误说明如下: ORA-0

Shane_Wang的专栏 7655

三大主流交易接口实战指南:XTP、CTP与数字货币API的实盘接入解析

本文深入解析了量化交易系统实现实盘交易的关键环节,聚焦于三大主流交易接口的实战接入。详细介绍了证券领域的XTP、期货领域的CTP以及数字货币交易所API的核心特性、代码封装要点与风控实践,并提供了多市场接口整合的统一架构方案,为开发者打通量化交易的“最后一公里”提供了一份接地气的实战指南。

win55的博客 1374

从零开始的计网学习——物理层

计算机网络对于IT人不论是就业还是升学都是核心的一门课程,一起从零开始,学习计算机网络!

Nimrod__的博客 2万+

TUXEDO自学笔记(一)

1. TPSVCINFO结构体 void tpservice(TPSVCINFO *svcinfo); 只有一个参数,该参数是指向TPSVCINFO结构的指针(atmi.h)。该结构定义如下: struct tpsvcinfo { char name[32];   /*s

1万+

别再手动下单了!用Python+EasyTrader+同花顺,5分钟搞定你的第一个自动化交易机器人

本文详细介绍了如何使用Python和EasyTrader结合同花顺客户端快速构建自动化交易机器人。从环境配置到实战脚本编写,涵盖自动打新、条件单、跟单策略等核心功能,并分享性能优化与风险控制技巧,帮助投资者高效实现自动化交易。

weixin_30381317的博客 398

Tuxedo入门学习

Tuxedo是什么? Tuxedo:Transaction for Unix has been Extended for Distributed Operation分布式操作扩展之后的Unix事务系统。 Tuxedo是一个事务处理(TP)监督器(transaction processing monitor),它管理联机事务处理(OLTP)系统操作的事务。客户通过结构化查询语言(SQL)

路人而已的专栏 2407

【OpenClaw从入门到精通】第73篇:30天OpenClaw实战挑战——从零搭建个人数字助理(Day15-21)万字超详细高阶实战版

经过前两周的基础部署与功能搭建,你已拥有可自动化干活的AI助理与数字员工团队,但距离“高阶精通”仍有差距。本文聚焦第三周(Day15-21)核心实战,围绕安全审计、语音能力接入、Token成本控制、Agent Loop优化、One-Liner指令五大核心模块,结合真实落地案例与踩坑经验,提供超详细实操指南。通过本文,你将掌握生产级安全加固方案、语音交互全流程配置、低成本高性价比使用策略、Agent自主闭环优化技巧,以及一句话搞定复杂任务的高效指令用法,同时完成中期复盘与最后九天冲刺规划

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 362

windows版vCenter STS证书替换步骤说明

windows版vCenter STS证书,手动更新步骤

技术是手段,服务才是目的。开源与协作是创新的活水,而核心技术的自主可控是立足之本。身处黄金时代,唯持续学习,方能不惧变化。从使用者到创造者,中国技术的未来,正待你们接过火炬,走得更远、更稳、更好。 1042

TUXEDO超时控制全功略(一) - [Tuxedo]

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://kimva.blogbus.com/logs/10795776.html 摘要:   本《功略》集中了TUXEDO应用中,可能涉及到的所有时间参数,并分别对其进行详细描述,不但对其出处、取值等基本属性进行查证,而且,通过分析其内在的控制机制,给出设置建议,以期能够达到透彻理解、方便查阅、准确使用的目的。

925

37、免驱动USB双目同步测距3D活体深度检测和RV1126结合V4L开发USB摄像头使用

基本思想:需要使用双目摄像头在rv1126上进行活体检测,然后将画面实时返回到桌面上,记录一下。第二步:刷机rv1126开发板系统和ssh远程连接,见参考目录。第一步:购买可见光的红外摄像头,见参考连接,在PC端测试可用。

sxj731533730 2620

TUXEDO超时控制全功略(zt)

背景: 解决客户以下问题: 数据库版本9206,中间件BEA tuxedu。客户反映在业务中有分布式事务的时候,查询dba_pending_transactions视图会被hang住,直到分布式事务处理完成,这样造成数...

congnen9588的博客 511

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

TUXEDO超时控制全功略(二) - [Tuxedo]

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://kimva.blogbus.com/logs/10795836.html 2.8 WSL CLOPT [-I init_timeout] 2.8.1 参数出处   UBBCONFIG配置文件 -> SERVERS -> WSL -> CLOPT "-I"。 2.8.2 时间单位   秒。 2.8.

1032

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

tuxedo 超时控制

Tuxedo 超时控制(转贴)原帖发于DEV2DEV,现转贴在此。                                                                                              TUXEDO超时控制全功略摘要:  本《功略》集中了TUXEDO应用中,可能涉及到的所有时间参数,并分别对其进

兼容并蓄终宽阔,若谷虚怀鱼自游 1896

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Tuxedo 超时控制(转贴)

源于才文章确实详细,暂且转载于此,谢原发帖主人。Tuxedo 超时控制(转贴)原帖发于DEV2DEV,现转贴在此。                                                                                              TUXEDO超时控制全功略摘要:  本《功略》集中了TUXEDO应用中,可能涉及到

folin的专栏 2476

Tuxedo ubbconfig配置详解

http://blog.sina.com.cn/s/blog_548c8a830101iu4o.html 应用的描述信息配置在系统核心位置,用一个文件描述,通常称为ubbconfig文件,在主控机器上。整个TUXEDO系统的管理任务可以在一台机器上完成,在配置中被定为主控节点。  在运行时,这些信息被装入一段共享内存(一个IPC资源),称为公告牌(Bulletin Board—

MyDriverC 5642

TUXEDO配置参数详解

  <!--Class name of articleTime specify sun icon or moon iconin front of date-time text. Corresponding to class name sun & moon-->TUXEDO配置参数详解     2007-07-10 09:39:47 大 中

zhouqixiang的专栏 5690

oracle 分布式事务处理等待锁,关于“ORA-02049: 超时: 分布式事务处理等待锁”的处理过程...

今晚接到项目经理发来的数据库问题,报错为ORA-02049: 超时: 分布式事务处理等待锁,第一时间感觉是维护的数据库的dblink问题,因为现在维护的这些数据库使用大量dblink,70%以上的查询都使用dblink,查看对于的存储过程发现,在循环处理后没有commit,导致该问题的出现。下面是在测试环境的模拟:连接第一个数据库,查看DISTRIBUTED_LOCK_TIMEOUT参数的值为60...

weixin_29148445的博客 2659

C语言查看tuxedo队列长度,TUXEDO函数说明 - 测试人生 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...

-收集整理1与缓冲区使用有关的ATMI 21.1tpalloc. 21.2tprealloc. 21.3tpfree. 21.4tptypes. 22常用的FML(FML32)操作函数... 32.1Falloc. 32.2Finit 32.3Fadd. 32.4Fchg. 32.5Fget 42.5Fprint 42.6Ferror 43连接的建立与断开有关的ATMI 53.1tpchkauth...

weixin_35036735的博客 654

java通过wtc调用tuxedo服务超时

java通过wtc调用tuxedo返回 tperrno = 13 (TPETIME)超时错误 一开始通过调查找到一篇文章关于tuxedo的所有超时控制的,以为是ubbconfig的配置有问题,把BLOCKTIME设置很大,怎么都不行 后来终于知道了原因 原来java中如果要防止调用超时,必须使用异步调用方法tpacall而不是tpcall,并且设置最后一个参数为ApplicationToMo

liyun919的专栏 5117

Tuxedo端已完成返回,Java端响应超时

在Tuxedo主机日志上看已经正常结束了,但是在web服务器端没有任何返回,表现为调用超时,这种情况下,一般为返回内容中出现字段的值乱码,请检查返回的buf中是否有不正常的值,可能原因为字段定义为long,但是在代码中对其赋值是通过buf.SetString来赋值,这种情况下则会出现乱的数字现象,web服务器端也接收不到返回。...

bendanlinsky的专栏 286
上一篇: 关于TUXEDO 负载均衡和MSSQ的探讨
下一篇: CString及Char指针和数组的问题
cation
博客等级 码龄24年 33粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值