2020-09-08 22:47发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
您好,
在进行数据库性能测试时,我得到了" Adaptive Server的锁用尽"性能观察。
当Adaptive Server的锁用完时,将发生此错误。
您是否具有数据库脚本或方法将帮助我们识别\分析正在获取更多锁的数据库spid?
很可能任何更新或删除语句自身都有错误的查询计划。
谢谢
Uday
嗨,Uday,
我收到的SAP笔记很少,但是所有笔记通常都可以作为解决方法来增加锁计数。 但是请检查以下说明,如果适合您的症状和DB的发行级别,请根据SAP注释
SAP注释更新数据库补丁: https://launchpad.support.sap.com/#/notes/0002203739
https://launchpad.support.sap.com/#/notes/0001884542
https://launchpad.support.sap.com/#/notes/0002006684
https://launchpad.support.sap.com/#/notes/0001966154
Sybase KBA http://infocenter.sybase.com/help/index。 jsp?topic =/com.sybase.infocenter.dc00729.1500/html/errMessageAdvRes/BACBJHDF.htm
希望这会有所帮助。
Pradeep
您有机会尝试我建议的解决方案吗?
Avinash
要澄清:
针对DML语句的错误计划不会导致获取大量锁(隔离级别3可能是 例外,但我想不是这样)。
糟糕的计划只会延长运行时间,并可能导致并发问题。 但是锁的数量没有增加。
因此,您需要查看批处理中的UPDATE和DELETE语句或INSERT语句的数量
为避免ASE用尽锁,请考虑配置资源 锁的数量限制
HTH
Tilman Model-Bosch ASE开发支持上的SAP
在查询中有两个系统表syslock和和 sysprocesses首先需要实现。 当服务器具有大(数千/百万)个锁时,查询可能不会快速返回。 请参阅我建议的MDA表方法,以获取持有大量锁的SPID。
通常,如果 ASE中的一个进程正在获取大量锁,ASE尝试"升级"(升级)为排他表锁。 但是,如果表上有冲突的锁,则该过程将继续取出更多锁,直到ASE用完锁为止。 参见:
https://help.sap.com/查看器/a08646e0736e4b4b968705079db4c5f5/16.0.3.6/en-US/a6e5d9d1bc2b1014b0669105b893d36b.html "锁定配置和调整"
您可以使用sp_add_resource_limit限制每个进程的锁数。 单个进程将出错,而不是锁定整个ASE服务器(所有双关语都是预期的)。 语法为:
sp_add_resource_limit NULL,NULL,"一直"," lock_count",10000
(将所有用户可以同时打开一个会话的锁数设置为10000)
如果长时间运行的事务需要进行大量数据更新,则可能导致锁冲突问题。
祝你好运。
从MDA表monProcessActivity和SPID,KPID和LocksHeld列开始,如果需要,您可以选择更多列。
使用LocksHeld可以将您归零
快速轮询有问题的SPID。
轮询您的ASE服务器-每分钟说一次-并记录捕获的数据作为证据。
锁可以很快被消耗掉。 例如。 从繁忙的数据行表中选择#temptable可以非常快地增加锁的数量。
我有一个Watch Dog进程,它通过LocksHeld来获取SPID,并以1M +个锁终止。
您必须征得用户的同意,才能为每个连接分配合理数量的锁-我要说的是您配置为最大锁数量的一半或3/4。
请勿使用
-syslocks进行计数,它需要具体化为tempdb。
-monLocks是一个宽表,如果锁以指数级增长,则对其进行选择将会很慢。
最多设置5个标签!
嗨,Uday,
我收到的SAP笔记很少,但是所有笔记通常都可以作为解决方法来增加锁计数。 但是请检查以下说明,如果适合您的症状和DB的发行级别,请根据SAP注释
SAP注释更新数据库补丁: https://launchpad.support.sap.com/#/notes/0002203739
https://launchpad.support.sap.com/#/notes/0001884542
https://launchpad.support.sap.com/#/notes/0002006684
https://launchpad.support.sap.com/#/notes/0001966154
Sybase KBA http://infocenter.sybase.com/help/index。 jsp?topic =/com.sybase.infocenter.dc00729.1500/html/errMessageAdvRes/BACBJHDF.htm
希望这会有所帮助。
谢谢
Pradeep
Uday
您有机会尝试我建议的解决方案吗?
Avinash
要澄清:
针对DML语句的错误计划不会导致获取大量锁(隔离级别3可能是 例外,但我想不是这样)。
糟糕的计划只会延长运行时间,并可能导致并发问题。 但是锁的数量没有增加。
因此,您需要查看批处理中的UPDATE和DELETE语句或INSERT语句的数量
为避免ASE用尽锁,请考虑配置资源 锁的数量限制
HTH
Tilman Model-Bosch
ASE开发支持上的SAP
在查询中有两个系统表syslock和和 sysprocesses首先需要实现。 当服务器具有大(数千/百万)个锁时,查询可能不会快速返回。 请参阅我建议的MDA表方法,以获取持有大量锁的SPID。
HTH
Avinash
通常,如果 ASE中的一个进程正在获取大量锁,ASE尝试"升级"(升级)为排他表锁。 但是,如果表上有冲突的锁,则该过程将继续取出更多锁,直到ASE用完锁为止。 参见:
https://help.sap.com/查看器/a08646e0736e4b4b968705079db4c5f5/16.0.3.6/en-US/a6e5d9d1bc2b1014b0669105b893d36b.html
"锁定配置和调整"
您可以使用sp_add_resource_limit限制每个进程的锁数。 单个进程将出错,而不是锁定整个ASE服务器(所有双关语都是预期的)。 语法为:
(将所有用户可以同时打开一个会话的锁数设置为10000)
如果长时间运行的事务需要进行大量数据更新,则可能导致锁冲突问题。
祝你好运。
从MDA表monProcessActivity和SPID,KPID和LocksHeld列开始,如果需要,您可以选择更多列。
使用LocksHeld可以将您归零
快速轮询有问题的SPID。
轮询您的ASE服务器-每分钟说一次-并记录捕获的数据作为证据。
锁可以很快被消耗掉。 例如。 从繁忙的数据行表中选择#temptable可以非常快地增加锁的数量。
我有一个Watch Dog进程,它通过LocksHeld来获取SPID,并以1M +个锁终止。
您必须征得用户的同意,才能为每个连接分配合理数量的锁-我要说的是您配置为最大锁数量的一半或3/4。
< p>然后可以将其与其他MDA表结合使用以获取确切的SQL等。请勿使用
-syslocks进行计数,它需要具体化为tempdb。
-monLocks是一个宽表,如果锁以指数级增长,则对其进行选择将会很慢。
HTH
Avinash
一周热门 更多>