[MSSQL_2016] 插入大量資料時出現OLEDB provider的query timeout expired

點閱: 344

今天遇到的問題是,一張35億列的資料表,在insert into另外一台server時,出現了query timeout expired的問題:


--連結伺服器 "IP.IP.IP.IP" 的 OLE DB 提供者 "MSDASQL" 傳回訊息 "[Microsoft][ODBC Driver 13 for SQL Server]Query timeout expired"。 --訊息 7343,層級 16,狀態 2,行 12 --連結伺服器 "IP.IP.IP.IP" 的 OLE DB 提供者 "MSDASQL" 無法 INSERT INTO 資料表 "[IP.IP.IP.IP].[DB_NAME].[dbo].[TABLE_NAME]"。

先去查了什麼是OLEDB provider

OLE DB(Object Linking and Embedding, Database,物件連結嵌入資料庫,有時亦寫作OLEDB或OLE-DB)是微軟為以統一方式存取不同類型的資料儲存設計的一種應用程式介面,是一組用元件物件模型(COM)實現的埠,而與物件連接與嵌入(OLE)無關。它被設計成為ODBC的一種進階替代者和繼承者,把它的功能擴充到支援更多種類的非關係型資料庫,例如可能不支援SQL的物件資料庫和電子試算表(如Excel)。

初步理解為,一種類似API的介面,讓程式開發者藉由OLEDB來存取不同類型的資料(SQL Server, Oracle Server, Excel, XML…etc),可參考底下這張圖
[MSSQL_2016] 插入大量資料時出現OLEDB provider的query timeout expired 1
但是這又無法解決查詢逾時的問題,持續google

調整遠端查詢逾時設定有無搞頭?

後來搜尋得知OLEDB provider預設的遠端查詢逾時(remote query timeout)為600秒,也就是10分鐘,可以把他變成0(也就是不會逾時),目前先這樣嘗試,因為我的查詢一次要2天的時間,靜觀其變中。

[MSSQL_2016] 插入大量資料時出現OLEDB provider的query timeout expired 2

About the Author

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Related Posts