SQL SERVER中的OLEDB等待事件

2021-09-07 05:31:28 字數 2190 閱讀 6782

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等待事件的例子:

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等待事件增多的原因。

基於51的OLED驅動

oled12864.h include reg51.h include 6x8.h include 8x16.h include 16x16.h define xlevell 0x00 define xlevelh 0x10 define xlevel xlevelh 0x0f 16 xlevell...

LED與OLED的區別

led與oled的區別 led和oled的發光原理是一樣的,只 不過區別是用的材料不一樣led用的是金屬材料,而oled用的是有機物材料。oled不需要背光源,自己本身會發光,是採用發光二極體陣列組成.亮度要比led液晶高,厚度更薄,是今後led液晶屏的替代品.led液晶屏需要背光源,亮度一般,在日...

oled的學習心得

今天學了下oled的使用,說下心得吧 我用的是0.96寸的,i2c通訊,就說下oled顯示的原理吧.首先oled上的每乙個畫素都會發光,總共有12868個畫素點,所以我想顯示什麼圖案就可以控制畫素點來發光,那要怎麼控制呢,在這裡說一種模式下的控制,頁位址模式,在該模式下,oled分成八行,寬是64個...