線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1691
推到 Plurk!
推到 Facebook!

ADO 元件 + MS SQL 2000 Insert 大量資料實驗心得分享

 
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-18 10:50:57 IP:203.66.xxx.xxx 未訂閱
綜合整理一下這幾天的實驗心得 (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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-16 08:24:42 IP:61.143.xxx.xxx 未訂閱
我们一直使用 Core Lab 的 SDAC (SQL Server Data Access Components 2.45) 元件联接 SQL 2000. 与 ADO 作比较速度快了 2/5 發表人 - One2Free 於 2004/08/16 20:16:50
系統時間:2024-05-24 5:13:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!