ADO 元件 + MS SQL 2000 Insert 大量資料實驗心得分享 |
|
seaturn99
版主 發表:69 回覆:427 積分:214 註冊:2003-08-25 發送簡訊給我 |
綜合整理一下這幾天的實驗心得 (ADO 元件 + MS SQL 2000): 1. ADOQuery Component 可以一次送多筆資料,可以降低網路 round-trip 的overhead,以整批的方式送至 MS SQL Server,此時, prepare 設成 false 可以提升一些效率,從 profiler log 可以看出減少一些前置設定時間,不過此時這個方法衍生了兩個問題 :
(1) 耗費大量的 CPU & Memory 資源,導致系統效能下降 (我想應該可以透過設定微調 SQL Server 參數,或許可以得到比較"公平"的數據)
(2) 批次執行大量 SQL Command 在網路 round-trip 上取得優勢(降低 RPC 通訊次數),卻在 SQL Command 執行效率上打了折扣.. 2. 使用 ADOQuery 設定 Parameter,再將 Prepare 設成 true ,會得到非常高的 SQL 執行效率,但會增加 RPC 連接次數 (幾筆資料就要 run 幾次 ExecSQL),但以少量且穩定的系統資源運行.. 3 .我想到一個利用 store procedure 可以取得絕對效率的方法,Client 端將 SQL Command 以分隔字元的方式集中傳入一個 store procedure 的傳入參數,在此 store procedure 利用 SQL 內部的迴圈機制,撰寫 enum SQL Command ,再於內批次執行 SQL Command (可設定 pre-compile 提高效率),這個方法算是 1,2 的綜合,不過當然缺點是需要自己撰寫 store procedure code (我想當初 timhuang Sir 應該是想告訴我這件事) 結論 : 1,2 方法沒有絕對效率的好壞,要視執行環境而定,經過測試網路 round-trip 與 SQL 執行效率造成的影響,孰重孰輕,再決定使用 1 或 2 方法.. 最後我是利用另外一種方法實作,將我 Insert 大量資料的相關 code 包裝成 COM+ 元件(TMtsAutoObject),散佈在 SQL Server 的同一台機器,這樣可以達到方法 3 的功能,又不用撰寫 store procedure,當然, multi-tier 與分散式系統將會把系統複雜化, debug 上也比較不容易.. 最後,透過與 timhuang 兄與 terrychen 兄的指點,做了這些實驗,這個過程讓我了解到許多先進所提到的, Database 效能需要視環境校調,也透過許多觀察,我讓更了解這些 issue ,感謝 timhuang 兄 與 terrychen 兄 的指導.. PS. 如果有錯的部分,請用力指正... ----
我只會兩件事,這也不會,那也不會 眼見不一定為真
----
|
One2Free
一般會員 發表:26 回覆:28 積分:20 註冊:2004-05-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |