sybase数据库中打开的对象数量急剧增加 并出现此错误:
Increase the config parameter 'number of open objects' to avoid descriptor reuse.
起初,“打开对象”的值为100000
sp_monitorconfig "open objects"
go
Name Num_free Num_active Pct_act Max_Used Reuse_cnt Instance_Name
number of open objects 1223 90380 95.25 92380 9269
我将值从100000更改为160000,但该值仍在增加。 有没有办法我知道增加的对象是什么? 增加值的原因是什么,如何停止以这种方式增加?
答案 0 :(得分:1)
当我看到这个问题(不断增加的打开对象的描述符使用)时,我已将问题追溯到一个正在生成大量已准备好的语句的应用程序中(例如,而不是重新使用已准备好的语句)对于重复的DML语句,应用程序会为每个DML语句创建一个新的准备好的语句。
在Sybase(现为SAP)ASE中,已准备好的语句被转换为“轻量级过程”(又名LWP;认为是“临时过程”),这又需要它们自己的描述符。
要确定这是否是LWP问题:
dbcc traceon(3604)
dbcc des
注意:dbcc des
将生成很多的输出,因此请确保将其捕获到文件中!
在“ dbcc des”输出中,具有以下属性的LWP出现了:
要查找有问题的连接...,您可以从LWP名称(spid
输出)或dbcc des
列(查找过程)中提取master..monCachedProcedures
像*sq##########ss*
和*ss#########ss*
这样的名称……看起来像是系统自动生成的名称。
注意:根据ASE版本(11?12?15?16?),LWP名称格式可能会有所不同,因此您可能必须进行一些挖掘才能找到关联的spid
。
对于spid
是名称一部分的LWP,spid可能是(dbcc des
)对象名称的前5位;因此对于以下内容,我们看到spid
= 61
*00061000000606_9d5317
*00061000000626_a149eb
*00061000000606_9d5317
*00061000000589_63ea4e