SQL SERVER中的OLEDB等待事件
OLEDB等待事件介绍
OLEDB等待类型是SQL SERVER 数据库中最常见的几种等待类型之一。它意味着某个会话(SPID)通过SQL Server Native Client OLEDB Provider发生了调用请求并等待数据库返回所需的数据。它出现在远程系统(remote system )或网络连接速度不够快,因此调用服务器必须等待要返回结果的情况下。OLEDB等待事件一般是由那些活动造成呢?它一般由下面一些事件引起:
- 远程过程调用(Remote procedure calls)
- 链接服务器查询(Linked server queries)
- BULK INSERT commands
- Full-search queries 或外部数据源处理,例如Excel
- 客户端的Profiler跟踪(Client-side Profiler traces)
- DMV, log reader and DBCC CHECKDB
看到DBCC CHECKDB会引起OLEDB等待事件,你是否觉得很奇怪,其实刚开始的时候我也觉得很奇怪,我们的DPA(Database Performance Analyzer)监控工具发现SQL 2012、SQL 2014数据库的DBCC CHECKDB引起的OLEDB等待事件占据了等待类型柱状图很大的比例。这个引起了我的好奇心,后面查证后发现DBCC CHECKDB它使用 OLEDB 行集在查询处理器和存储引擎的子系统之间交换信息。
下面演示一下DBCC CHECKDB出现OLEDB等待事件的例子:
--SESSION 1
DBCC SQLPERF('sys.dm_os_wait_stats', CLEAR);
GO
DBCC CHECKDB('AdventureWorks2014');
--SESSION 2
SELECT * FROM
sys.dm_os_wait_stats
WHERE wait_type='OLEDB'
在DBCC CHECKDB还在执行时,你在会话2中,会看到OLEDB等待类型的waiting_tasks_count、wait_time_ms会一直增加。关于DBCC CHECKDB产生的OLEDB等待事件,我从DPA里面观察,发现SQL Server 2012、SQL Server 2014明显要比SQL Server 2005、 SQL Server 2008要多,暂时不清楚具体原因,在SQL SERVER 2012/2014中DBCC CHECKDB出现了几个Bug,具体可以参考官方文档SQL Server 2014 Service Pack 1 release information 。我们可以看到官方已经Fix掉了三个关于DBCC CHECKDB的Bug。但是我更新了这些补丁,依然发现DBCC CHECKDB引起的OLEDB等待事件较多。
另外关于DMV会引起OLEDB等待事件,是因为DMV内部使用了OLEDB,因此一些监测工具频繁调用DMV也会导致出现较多OLEDB等待事件。
OLEDB等待事件解决
1:从应用层面考虑,只返回必要的字段和数据。减少网络传输内容和时间。从而减少OLEDB等待事件。例如分页控件的按页获取数据。
2:如果使用Linked Server获取的数据是静态数据,可以考虑将这些静态数据复制到本地数据库,减少没有必要的链接服务器查询。如果数据是动态变化,也可以考虑使用使用复制(发布订阅)将数据同步到本地数据库。
3:从业务角度出发审查你的数据分布,链接服务器查询是否绝对有必要?那些是可以减少、那些不必要的?另外 ,可以从架构层面考虑解决,例如将那些数据集中起来。
4:如果有些数据源是Excel文件,可以先将其通过FTP或文件共享上传到本机,然后处理数据。
5: 优化链接服务器查询的SQL,检查其是否缺少索引、统计信息是否过时;是否可以将某些业务逻辑放置到远程服务器上去处理(存储过程),然后只返回需要的数据。例如下面这种需求。
SELECT * FROM
linked_server.dbo.table_a inner join ..
linked_server.dbo.table_b inner join ..
linked_server.dbo.table_c inner join ..
.......................
6:找系统管理员或网络管理员了解专线带宽等情况。有时候网络带宽资源不足时也是引起OLEDB等待事件增多的原因。
SQL SERVER中的OLEDB等待事件相关推荐
- 如何在SQL Server中处理过多的SOS_SCHEDULER_YIELD等待类型值
The SQL Server SOS_SCHEDULER_YIELD is a fairly common wait type and it could indicate one of two thi ...
- 如何将用户迁移到SQL Server中的部分包含的数据库
介绍 (Introduction) Microsoft introduced the Contained Database feature in SQL Server 2012. In this ar ...
- SQL Server中关于跟踪(Trace)那点事(转载)
前言 一提到跟踪俩字,很多人想到警匪片中的场景,同样在我们的SQL Server数据库中"跟踪"也是无处不在的,如果我们利用好了跟踪技巧,就可以针对某些特定的场景做定向分析,找出充 ...
- SQL Server中SELECT会真的阻塞SELECT吗?
在SQL Server中,我们知道一个SELECT语句执行过程中只会申请一些意向共享锁(IS) 与共享锁(S), 例如我使用SQL Profile跟踪会话86执行SELECT * FROM dbo.T ...
- 十步优化SQL Server中的数据访问
故事开篇:你和你的团队经过不懈努力,终于使网站成功上线,刚开始时,注册用户较少,网站性能表现不错,但随着注册用户的增多,访问速度开始变慢,一些用户开始发来邮件表示抗议,事情变得越来越糟,为了留住用户, ...
- pads中如何设置等长_如何在SQL Server中设置扩展,监控系统性能
dbForge Studio for SQL Server为有效的探索.分析SQL Server数据库中的大型数据集提供全面的解决方案,并设计各种报表以帮助作出合理的决策. dbForge Studi ...
- SQL Server中的快照隔离
介绍 (Introduction) In this article, I'll explore the use of snapshot isolation using row versioning a ...
- sql server死锁_如何解决SQL Server中的死锁
sql server死锁 In this article, we will talk about the deadlocks in SQL Server, and then we will analy ...
- SQL Server中的数据库文件组和零碎还原
So far, we discussed many de-facto details about SQL Server database backup and restore. In this 15t ...
最新文章
- Python程序员Debug利器,和Print说再见 | 技术头条
- leetcode 206 Reverse Linked List
- xenserver下的SR,VDI,VBD
- 第二个例子:单链表实现基排序(桶排序)
- 机器学习(一)线性回归
- linux分区工具fdisk的使用
- 从一个实际的例子出发,谈谈SAP Commerce Cloud电商云的UI自定义开发
- mysql mariadb的VC客户端遇到的问题
- Java学习系列及数据结构博客全目录
- Google的Flutter工具允许开发者开发跨平台应用
- 项目10.2-企业级自动化运维工具---puppet详解
- python语言规范_python语言规范
- glibc静态链接 libc.a(nsswitch.o)(.data+0x64):undefined reference to `_nss_files_getaliasent_r' 错误解决方法
- 领导力有哪些方面?什么是领导力?
- 基础知识(三),OSI七层协议、数据传输过程、数据的封装与解封装、IP抓包分析、交换机、路由器、ARP协议、TRUNK中继、VLAN、DHCP中继、ICMP协议、三层交换机
- 科普|股东需要对企业债务承担连带责任
- 杠杆的倍数一般是多少?
- tomcat下载与安装win11
- python入门图谱_Python入门基础教程图
- flannel和calcio_Calcio是什么意思