最近接到客户问题,软件提示“数据库正忙,请稍后再试”
客户将数据库与软件发给我,我在本地调试,一切正常。
远程查看得知对方数据库是SQL7.0
事件探索器查看到对方程序调用了
SELECT N'Testing Connection...'
go
EXECUTE msdb.dbo.sp_sqlagent_get_perf_counters我推想可能这个存储过程执行时间过长,导致软件判断超时,终止了操作!
有没大侠,老前辈碰到过这种问题?这个存储过程什么作用。。
是不是对方数据库版本问题?
换个数据库是否能解决问题?
如果不是这个问题,那问题又出在哪里?望指点。。

解决方案 »

  1.   


    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