none
sql2008 r2是不是有错误 sys.sysprocesses查询insert语句在哪个数据库 RRS feed

  • 问题

  • 我使用下面sql语句查询 哪个库正在执行insert语句,结果发现

    select spid,DB_NAME(dbid) as dbname,cmd,cpu,physical_io,memusage from sys.sysprocesses where spid>49 order by dbname

    我使用dbcc inputbuffer(69)查询执行的语句,结果发现

    (@ClassifyRuleID int,@ArchiveID int,@UpdateOn datetime,@SiteId int,@PublishOn datetime,@ArchiveMD5 nvarchar(36),@ArchiveMD10 nvarchar(36),@Score real)if ((SELECT COUNT(*) FROM ClassifyResult WHERE  ClassifyRuleID = @ClassifyRuleID  AND ArchiveID = @ArchiveID) = 0) BEGIN  INSERT INTO [ClassifyResult] ([ArchiveID],[ClassifyRuleID],[UpdateOn],[SiteId],[PublishOn],[ArchiveMD5],[ArchiveMD10],[Score]) VALUES (@ArchiveID,@ClassifyRuleID,@UpdateOn,@SiteId,@PublishOn,@ArchiveMD5,@ArchiveMD10,@Score)  END

    是不是我看错了?

    2014年10月17日 10:01

答案

  • What's sql login for the session? Checked that login's default settings? How does app connect to sql and execute code? If app connects to master and executes 'use db_name', sql still shows master in sysprocesses.
    2014年10月17日 17:00

全部回复

  • Looks like spid 69 ran the query under master db. Input buffer has size limit so it doesn't always tell you the whole picture. 
    2014年10月17日 13:24
  • 我查询完全找不到数据库Barefoot.ClassisfyResult有insert语句,但是开发跟我说insert执行速度很慢

    select spid,DB_NAME(dbid) as dbname,cmd,cpu,physical_io,memusage from sys.sysprocesses where spid>49 and dbid=7

    我在想数据库上下文都不是Barefoot.ClassisfyResult,开发那边怎麽insert??

    但是我使用下面脚本

    use 【Barefoot.ClassisfyResult】
    
    --数据分析
    
    DECLARE @tablespaceinfo TABLE (  
        nameinfo varchar(50),  
        rowsinfo int,  
        reserved varchar(20),  
        datainfo varchar(20),  
        index_size varchar(20),  
        unused varchar(20)  
    )  
     
    DECLARE @tablename varchar(255);  
     
    DECLARE Info_cursor CURSOR FOR 
        SELECT '['+[name]+']' FROM sys.tables WHERE type='U';  
     
    OPEN Info_cursor  
    FETCH NEXT FROM Info_cursor INTO @tablename  
     
    WHILE @@FETCH_STATUS = 0  
    BEGIN 
        insert into @tablespaceinfo exec sp_spaceused @tablename  
        FETCH NEXT FROM Info_cursor  
        INTO @tablename  
    END 
     
    CLOSE Info_cursor  
    DEALLOCATE Info_cursor  
     
    SELECT * FROM @tablespaceinfo  
        ORDER BY Cast(Replace(reserved,'KB','') as INT) DESC  

    发现数据在不断增加

    那到底是不是SQLSERVER的问题?开发那边数据库上下文是没有错的,确实在插数据进去数据库,但是怎麽执行

     sys.sysprocesses却发现insert语句的上下文在master数据库上???????

    sys.[dm_exec_requests]也是


    2014年10月17日 13:56
  • What's sql login for the session? Checked that login's default settings? How does app connect to sql and execute code? If app connects to master and executes 'use db_name', sql still shows master in sysprocesses.
    2014年10月17日 17:00
  • login名是SClogin,服务器角色是sysadmin。

    使用C#来连接数据库,我星期一再看一下连接字符串吧,当时没有检查连接字符串

    2014年10月18日 1:31
  • 不说连接字符串的问题,你可以看到代码里面根本没有use dbname,而且如果有use master

    ClassifyResult 他这里直接就是表名,插入肯定失败

    所以我觉得应该是sqlserver的问题

    2014年10月18日 7:35
  • Sql will send users to their default db if there's no db name in connection string.
    2014年10月18日 18:08
  • 我知道,默认是master,关键是,在master上下文里数据怎麽插入成功??
    2014年10月19日 2:00
  • Do you have whole list of code?
    2014年10月19日 22:28
  • 我在一楼里发的就是whole list of code,使用sys.dm_exec_sql_text (Transact-SQL)
    2014年10月20日 0:15
  • Profile 中遇到过类似的问题,显示的是 master, 实际上不是在 master 中, 也许是同样的问题,楼主可以验证下

    https://connect.microsoft.com/SQLServer/feedback/details/572246/profiler-reports-ef4-queries-as-occurring-in-master

    如果 Profile中也不正常,可以尝试按照里面的解决方案调整一下程序的连接字符串

    Setting the MultipleActiveResultSets option in the connection string in web.config to FALSE causes Profiler to properly report the query as having been executed in the application database.

    2014年10月20日 1:24
  • 原来是动态sql的原因

    exec [sys].sp_executesql N'if ((SELECT COUNT(*) FROM ClassifyResult WHERE  ClassifyRuleID = @ClassifyRuleID  AND ArchiveID = @ArchiveID) = 0) BEGIN  INSERT INTO [ClassifyResult] ([ArchiveID],[ClassifyRuleID],[UpdateOn],[SiteId],[PublishOn],[ArchiveMD5],[ArchiveMD10],[Score]) VALUES (@ArchiveID,@ClassifyRuleID,@UpdateOn,@SiteId,@PublishOn,@ArchiveMD5,@ArchiveMD10,@Score)  END',N'@ClassifyRuleID int,@ArchiveID int,@UpdateOn datetime,@SiteId int,@PublishOn datetime,@ArchiveMD5 nvarchar(36),@ArchiveMD10 nvarchar(36),@Score real',@ClassifyRuleID=57699,@ArchiveID=104839257,@UpdateOn='2014-10-20 10:16:18.457',@SiteId=2167325,@PublishOn='2014-10-20 00:00:00',@ArchiveMD5=N'c2a3d2c0-6a8c-eea2-3f57-65282f8c016e',@ArchiveMD10=N'09580177-1c6a-3120-ade0-bfe9a606e563',@Score=0

    2014年10月20日 2:19
  • 回家测试了,但是不会显示在master数据库上下文

    SELECT @@SPID
    exec [sys].sp_executesql N'select * from [dbo].[nums]'

    2014年10月20日 12:26