最近接到客户问题,软件提示“数据库正忙,请稍后再试”
客户将数据库与软件发给我,我在本地调试,一切正常。
远程查看得知对方数据库是SQL7.0
事件探索器查看到对方程序调用了
SELECT N'Testing Connection...'
go
EXECUTE msdb.dbo.sp_sqlagent_get_perf_counters我推想可能这个存储过程执行时间过长,导致软件判断超时,终止了操作!
有没大侠,老前辈碰到过这种问题?这个存储过程什么作用。。
是不是对方数据库版本问题?
换个数据库是否能解决问题?
如果不是这个问题,那问题又出在哪里?望指点。。
客户将数据库与软件发给我,我在本地调试,一切正常。
远程查看得知对方数据库是SQL7.0
事件探索器查看到对方程序调用了
SELECT N'Testing Connection...'
go
EXECUTE msdb.dbo.sp_sqlagent_get_perf_counters我推想可能这个存储过程执行时间过长,导致软件判断超时,终止了操作!
有没大侠,老前辈碰到过这种问题?这个存储过程什么作用。。
是不是对方数据库版本问题?
换个数据库是否能解决问题?
如果不是这个问题,那问题又出在哪里?望指点。。
CREATE PROCEDURE sp_sqlagent_get_perf_counters
@all_counters BIT = 0
AS
BEGIN
SET NOCOUNT ON CREATE TABLE #temp
(
performance_condition NVARCHAR(1024) NOT NULL
) INSERT INTO #temp VALUES (N'dummy') IF (@all_counters = 0)
BEGIN
INSERT INTO #temp
SELECT DISTINCT SUBSTRING(performance_condition, 1, CHARINDEX('|', performance_condition, PATINDEX('%[_|_]%', performance_condition) + 1) - 1)
FROM msdb.dbo.sysalerts
WHERE (performance_condition IS NOT NULL)
AND (enabled = 1)
END SELECT 'object_name' = RTRIM(SUBSTRING(spi1.object_name, 1, 50)),
'counter_name' = RTRIM(SUBSTRING(spi1.counter_name, 1, 50)),
'instance_name' = CASE spi1.instance_name
WHEN N'' THEN NULL
ELSE RTRIM(spi1.instance_name)
END,
'value' = CASE spi1.cntr_type
WHEN 537003008 -- A ratio
THEN CONVERT(FLOAT, spi1.cntr_value) / (SELECT CASE spi2.cntr_value WHEN 0 THEN 1 ELSE spi2.cntr_value END
FROM master.dbo.sysperfinfo spi2
WHERE (spi1.counter_name + ' ' = SUBSTRING(spi2.counter_name, 1, PATINDEX('% Base%', spi2.counter_name)))
AND (spi1.instance_name = spi2.instance_name)
AND (spi2.cntr_type = 1073939459))
ELSE spi1.cntr_value
END
FROM master.dbo.sysperfinfo spi1,
#temp tmp
WHERE (spi1.cntr_type <> 1073939459) -- Divisors
AND ((@all_counters = 1) OR
(tmp.performance_condition = RTRIM(spi1.object_name) + '|' + RTRIM(spi1.counter_name)))
END