SQL SERVER中的OLEDB等待事件

來源:互聯網
上載者:User

標籤:

OLEDB等待事件介紹

OLEDB等待類型是SQL SERVER 資料庫中最常見的幾種等待類型之一。它意味著某個會話(SPID)通過SQL Server Native Client OLEDB Provider發生了調用請求並等待資料庫返回所需的資料。它出現在遠程系統(remote system )或網路連接速度不夠快,因此調用伺服器必須等待要返回結果的情況下。OLEDB等待事件一般是由那些活動造成呢?它一般由下面一些事件引起:

  1. 遠端程序呼叫(Remote procedure calls)
  2. 連結的伺服器查詢(Linked server queries)
  3. BULK INSERT commands
  4. Full-search queries 或外部資料源處理,例如Excel
  5. 用戶端的Profiler跟蹤(Client-side Profiler traces)
  6. 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等待事件

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.