1.日常排查语句

 --当前正在执行的语句
SELECT
der.[session_id],der.[blocking_session_id],
sp.lastwaittype,sp.hostname,sp.program_name,sp.loginame,
der.[start_time] AS '开始时间',
der.[status] AS '状态',
dest.[text] AS 'sql语句',
DB_NAME(der.[database_id]) AS '数据库名',
der.[wait_type] AS '等待资源类型',
der.[wait_time] AS '等待时间',
der.[wait_resource] AS '等待的资源',
der.[logical_reads] AS '逻辑读次数'
FROM sys.[dm_exec_requests] AS der
INNER JOIN master.dbo.sysprocesses AS sp ON der.session_id=sp.spid
CROSS APPLY sys.[dm_exec_sql_text](der.[sql_handle]) AS dest
WHERE [session_id]>50 AND session_id<>@@SPID
ORDER BY der.[session_id]
GO --是否堵塞
SELECT spid,blocked,waittime,waittype,waitresource,p.dbid,cpu,physical_io,memusage,open_tran
,status,login_time,last_batch,hostname,program_name,hostprocess,loginame,cmd,text
FROM master.dbo.sysprocesses p CROSS APPLY sys.dm_exec_sql_text(p.sql_handle) s
WHERE blocked > 0 OR spid IN(SELECT blocked FROM master.dbo.sysprocesses WHERE blocked > 0)
go --是否有未提交事物
select spid,blocked,waittime,waittype,waitresource,p.dbid,cpu,physical_io,memusage,open_tran
,status,login_time,last_batch,hostname,program_name,hostprocess,loginame,cmd,text
from master.dbo.sysprocesses p cross apply sys.dm_exec_sql_text(p.sql_handle) s
where open_tran <> 0
go --死锁 drop table #deadlock
CREATE TABLE #deadlock(LogDate DATETIME,ProcessInfo VARCHAR(20),Text VARCHAR(2000))
go
INSERT INTO #deadlock EXEC xp_readerrorlog 0,1,'deadlock victim',NULL,'2016-07-20 14:00:00','2016-07-30','DESC'
go
select * from #deadlock

发现较多进程正在等待某个表资源,从中查看是什么表。

 waitresource/等待的资源 TAB: 7:1028198713:7
select OBJECT_NAME(1028198713)

同时看看有没有发生死锁,果然有死锁!(提前开启死锁跟踪: traceon(1222,-1))

死锁资源列表如下:

 resource-list
objectlock lockPartition=27 objid=629577281 subresource=FULL dbid=7 objectname=MYDB.dbo.mytable id=lock1bdc37b280 mode=Sch-S associatedObjectId=629577281
owner-list
owner id=processe51d948 mode=Sch-S
owner id=processe4bf288 mode=Sch-S
waiter-list
waiter id=process2b95dcc508 mode=Sch-M requestType=wait
objectlock lockPartition=23 objid=629577281 subresource=FULL dbid=7 objectname=MYDB.dbo.mytable id=lock1bfb3d7680 mode=Sch-M associatedObjectId=629577281
owner-list
owner id=process2b95dcc508 mode=Sch-M
waiter-list
waiter id=process5c53dc8 mode=IS requestType=wait
objectlock lockPartition=19 objid=629577281 subresource=FULL dbid=7 objectname=MYDB.dbo.mytable id=lock1d20baba80 mode=Sch-M associatedObjectId=629577281
owner-list
waiter-list
waiter id=processe4bf288 mode=Sch-S requestType=wait
objectlock lockPartition=23 objid=629577281 subresource=FULL dbid=7 objectname=MYDB.dbo.mytable id=lock1bfb3d7680 mode=Sch-M associatedObjectId=629577281
owner-list
waiter-list
waiter id=processe51d948 mode=Sch-S requestType=wait
objectlock lockPartition=19 objid=629577281 subresource=FULL dbid=7 objectname=MYDB.dbo.mytable id=lock1d20baba80 mode=Sch-M associatedObjectId=629577281
owner-list
owner id=process2b95dcc508 mode=Sch-M
waiter-list
waiter id=processe480988 mode=IS requestType=wait

可以看到,出现了架构稳定锁(Sch-S)和架构修改锁(Sch-M),但是数据库没有人修改架构啊!查看审核信息也无人修改过表对象。什么原因??!

继续使用上面的排查语句进行多次查询,发现了一条特殊的语句!

 insert bulk [dbo].[TABLES_Writes](此处省略字段)  

果然是该语句了!大容量插入是要表级别的锁,并且也会出现架构锁。其他等待资源的进程,也是需要查询该表的,所以才出现了表级别的资源等待!而恰巧,要使用该表的是一个存储过程,也是比较复杂的,执行10秒以上,该存储过程使用的其实是一个视图,视图中包含了该表!暂时解决的话。在视图上加nolock。询问开发人员,说大容量导入操作随时发生的,因为有些数据是需要业务员操作导入的。这种方法以后还是得改,要么大容量先插入到一个中间表,再插入到当前表中。

SQL server 大量数据导入和系统运行慢的问题的更多相关文章

  1. c#直接调用ssis包实现Sql Server的数据导入功能

    调用ssis包实现Sql Server的数据导入功能网上已经有很多人讨论过,自己参考后也动手实现了一下,上一次笔者的项目中还用了一下这个功能.思前想后,决定还是贴一下增强记忆,高手请54. 1.直接调 ...

  2. SQL Server 2012数据导入SQL Server 2008

    SQL Server 2012可以降级到2008吗?没有找到方法,似乎也不支持.整理了一个变通的方法,把2012的数据和结构导出,然后再导入2008. 在 SQL Server 2012 使用 Sql ...

  3. SQL Server批量数据导出导入BCP使用

    BCP简介 bcp是SQL Server中负责导入导出数据的一个命令行工具,它是基于DB-Library的,并且能以并行的方式高效地导入导出大批量的数据.bcp可以将数据库的表或视图直接导出,也能通过 ...

  4. 不同版本的SQL Server之间数据导出导入的方法及性能比较

    原文:不同版本的SQL Server之间数据导出导入的方法及性能比较 工作中有段时间常常涉及到不同版本的数据库间导出导入数据的问题,索性整理一下,并简单比较下性能,有所遗漏的方法也欢迎讨论.补充. 0 ...

  5. 在SQL Server中将数据导出为XML和Json

        有时候需要一次性将SQL Server中的数据导出给其他部门的也许进行关联或分析,这种需求对于SSIS来说当然是非常简单,但很多时候仅仅需要一次性导出这些数据而建立一个SSIS包就显得小题大做 ...

  6. 《转》SQL Server 2008 数据维护实务

    SQL Server 2008 数据维护实务 http://blog.csdn.net/os005/article/details/7739553 http://www.cnblogs.com/xun ...

  7. SQL Server 将数据导出为XML和Json

    有时候需要一次性将SQL Server中的数据导出给其他部门的也许进行关联或分析,这种需求对于SSIS来说当然是非常简单,但很多时候仅仅需要一次性导出这些数据而建立一个SSIS包就显得小题大做,而SQ ...

  8. SQL Server 变更数据捕获(CDC)监控表数据

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现过程(Realization) 补充说明(Addon) 参考文献(References) ...

  9. SQL Server 迁移数据到MySQL

    一.背景 由于项目开始时候使用的数据库是SQL Server,后来把存储的数据库调整为MySQL,所以需要把SQL Server的数据转移到MySQL:由于涉及的表比较多,所以想在MySQL中生成对应 ...

随机推荐

  1. 华为HCNA乱学Round 11:PPPOE

  2. 【神经网络与深度学习】【C/C++】C++日志操作开源函数库之Google-glog

    今天想给我的C++项目找一个开源的日志类,用于记录系统日志,结果浪费了半个下午的时间.从网上搜索相关资料,找到以下几个备选方案: 1.log4cplus 下载地址:http://sourceforge ...

  3. Flume概述

    flume是分布式的,可靠的,用于从不同的来源有效收集 聚集 和 移动 大量的日志数据用以集中式的数据存储的系统. 是apache的一个顶级项目. 系统需求:jdk1.6以上,推荐java1.7

  4. C语言 俄罗斯方块的实现1 全局变量

    目录 全局变量 程序的模块化之MVC 关于俄罗斯方块的代码实现要点 使用数组表示背景和方块 方块表示及其初始化 要让游戏动起来 方块自动下落 全局变量 简而言之,定义在函数外的变量,就是全局变量. 所 ...

  5. Object中有哪些方法及其作用

    你知道Object中有哪些方法及其作用吗? 一.引言 二.Object方法详解 1.1.registerNatives() 1.2.getClass() 1.2.1.反射三种方式: 1.3.hashC ...

  6. (5.9)mysql高可用系列——正常主从切换测试

    [0]实验环境 操作系统:CentOS linux 7.5 数据库版本:5.7.24 数据库架构:主从复制,主库用于生产,从库用于数据容灾和主库备机,采用默认传统的异步复制. 主库IP:192.168 ...

  7. jpa报错 Unable to acquire a connection from driver [null], user [null] and URL [null]

    jpa报错 Unable to acquire a connection from driver [null], user [null] and URL [null] 为啥报错 因为你在persist ...

  8. 06: zabbix常见面试题

    1.1 zabbix架构 1.zabbix理论 1)Zabbix是一个企业级的.开源的.分布式的监控套件,Zabbix可以监控网络和服务的监控状况. 2)Zabbix利用灵活的告警机制,允许用户对事件 ...

  9. Python 入门 之 类的约束以及super()剖析

    Python 入门 之 类的约束以及super()剖析 1.类的约束 第一版: class WechatPay: def pay(self): print("微信支付") clas ...

  10. python面向对象反射-框架原理-动态导入-元类-自定义类-单例模式-项目的生命周期-05

    反射 reflect 反射(reflect)其实是反省,自省的意思 反省:指的是一个对象应该具备可以检测.修改.增加自身属性的能力 反射:通过字符串获取对象或者类的属性,进行操作 设计框架时需要通过反 ...