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

问题描述 投票:0回答:1

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

sybase sybase-ase
1个回答
1
投票

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

在Sybase(现在的SAP)ASE中,预准备语句被转换为“轻量级过程”(也就是LWP;想想“临时过程”),而后者又需要自己的描述符。

要了解这是否是LWP问题:

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

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

在'dbcc des'输出中,LWP显示以下属性:

  • 存在于登录的tempdb中
  • 有负面的对象id
  • 有像* ddddddddddddddddhhhhhhhddddddddhdhhdhhdhddddddddhdhdh
  • 可能有* aaddddddddddddddddddddddddaddadddaddadddaddadddda * *('d'== decimal,'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

© www.soinside.com 2019 - 2024. All rights reserved.