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,但值仍在增加。有没有办法让我知道对象增加了什么?增加价值的原因是什么,以及如何以这种方式停止增加?
当我看到这个问题(开放对象的描述符使用量不断增加)时,我已经将问题追溯到生成大量预准备语句的应用程序(例如,而不是重复使用准备好的语句来重复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