增加打开对象的值数量的原因是什么?

时间:2018-09-18 10:12:57

标签: sybase sybase-ase

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,但该值仍在增加。 有没有办法我知道增加的对象是什么? 增加值的原因是什么,如何停止以这种方式增加?

1 个答案:

答案 0 :(得分:1)

当我看到这个问题(不断增加的打开对象的描述符使用)时,我已将问题追溯到一个正在生成大量已准备好的语句的应用程序中(例如,而不是重新使用已准备好的语句)对于重复的DML语句,应用程序会为每个DML语句创建一个新的准备好的语句。

在Sybase(现为SAP)ASE中,已准备好的语句被转换为“轻量级过程”(又名LWP;认为是“临时过程”),这又需要它们自己的描述符。

要确定这是否是LWP问题:

  • 将sybase_ts_role授予您的登录名
  • 运行dbcc traceon(3604)
  • 运行dbcc des

注意:dbcc des将生成很多的输出,因此请确保将其捕获到文件中!

在“ dbcc des”输出中,具有以下属性的LWP出现了:

  • 存在于登录名的tempdb中
  • 具有否定的对象ID
  • 具有* dddddddddddddddd_hhhhhh之类的名称(其中'd'==十进制数字,'h'==十六进制数字) OR ...
  • 可能具有* aadddddddddd_dddddddddaa *之类的名称('d'==十进制,'a'==字母字符)
  • objssystat = O_PROC
  • objsysstat2 = O2_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

多年来,这个话题已经出现了很多次,您可以在以下链接中查看我的一些杂谈:herehereherehere