全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2133
推到 Plurk!
推到 Facebook!

Access 以Multi thread 查詢, 結果更慢?

答題得分者是:RootKit
junlin
初階會員


發表:66
回覆:94
積分:42
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-12-29 11:15:47 IP:60.249.xxx.xxx 訂閱
我的DB是ACCESS 97, 放在一台Server上(win2003 server), 以網芳的方式分享出來給Client使用, 
而且資料是依年月分開放置於MDB檔內, 例如:201012.mdb, 201011.mdb.......

若要查詢1年前的資料在哪一個MDB檔時, 都是一個一個MDB去找, 平均來說, 每個MDB約花2秒,
也就是說總共花費12*2=24秒.

所以我使用Multi thread, 一開始就開啟12個thread, 每個thread去讀取每個月的MDB,
想像中是只要花費2~5秒的時間就能找到1年前的資料,
但是實際上跑出來, 卻和一個一個MDB去找的時間差不多, 甚至更久

經測試後, 只要thread越多, 花費的時間就越久, 差不多是 "thread數量*2秒"
我發現都是卡在execute這句, 每個thread內在執行 execute 查詢語法時,
都耗掉 差不多是 "thread數量*2秒" 的時間, 這樣改成multi thread就沒有意義了

我想問問大家有沒有遇過類似的問題??

p.s. 每個thread都是自行create db connection, 而且只有做select 的動作
編輯記錄
junlin 重新編輯於 2010-12-28 20:16:25, 註解 無‧
老大仔
尊榮會員


發表:78
回覆:837
積分:1088
註冊:2006-07-06

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-12-29 18:18:06 IP:59.120.xxx.xxx 未訂閱
我比較好奇的是~為什麼不直接用FileListBox來做選擇mdb的事呢???
反正都要搜尋有哪些mdb可以用
那倒不如就用個元件來顯示那些mdb給使用者選擇
然後再來做連線、Select 的事情~

===================引 用 junlin 文 章===================
我的DB是ACCESS 97, 放在一台Server上(win2003 server), 以網芳的方式分享出來給Client使用,
而且資料是依年月分開放置於MDB檔內, 例如:201012.mdb, 201011.mdb.......

若要查詢1年前的資料在哪一個MDB檔時, 都是一個一個MDB去找, 平均來說, 每個MDB約花2秒,
也就是說總共花費12*2=24秒.

所以我使用Multi thread, 一開始就開啟12個thread, 每個thread去讀取每個月的MDB,
想像中是只要花費2~5秒的時間就能找到1年前的資料,
但是實際上跑出來, 卻和一個一個MDB去找的時間差不多, 甚至更久

經測試後, 只要thread越多, 花費的時間就越久, 差不多是"thread數量*2秒"
我發現都是卡在execute這句, 每個thread內在執行 execute 查詢語法時,
都耗掉 差不多是 "thread數量*2秒" 的時間, 這樣改成multi thread就沒有意義了

我想問問大家有沒有遇過類似的問題??

p.s. 每個thread都是自行create db connection, 而且只有做select 的動作
fusung
中階會員


發表:26
回覆:169
積分:99
註冊:2003-11-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-12-29 21:52:15 IP:58.114.xxx.xxx 未訂閱
請問你多執行緒是否採用同步模式?

這樣會導致多執行緒效果和單執行緒一樣!
------


The first step toward proving things for yourself is to understand how others have done it before!

smallfox
高階會員


發表:2
回覆:113
積分:128
註冊:2003-02-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-12-29 23:42:06 IP:203.73.xxx.xxx 訂閱
建議不要在thread內動態建立 db connection, 因為這樣也會浪費一些時間,
再者, 利用網芳的方式來同時存取多個 Access 資料檔,
資料檔大小 & 網路流量 & Client 數量亦須考慮在內,
而非理論上只會花費 2-5 秒如此單純, 畢竟 Access 非如 SQL Server or Oracle 等資料庫,
更何況是 Access 97 .....

如樓上大哥所言, thread 的呼叫方式也是影響因素之一 ...
junlin
初階會員


發表:66
回覆:94
積分:42
註冊:2002-03-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-12-30 15:27:10 IP:60.249.xxx.xxx 訂閱
to 老大仔, 沒辦法由使用者選擇要哪個MDB, 因為他們也不知道 

to fusung, 不是用同步模式喔, 我有試著讓main thread在開啟thread後做其他的事, 會馬上動作的.

to smallfox, 我是用相同環境去測試, 其他的因素影響很小, 可以忽略不計, 至於connection的部分也有測
過, 還蠻快的, 所以就放在thread內了.

剛才測了一下, 如果針對同一個MDB檔, 開30個thread去select資料, 速度就很快了,
就像是預料的一樣, 在5秒內就查完了,難道是ACCESS或是JET Driver不支援multi thread嗎??
編輯記錄
junlin 重新編輯於 2010-12-30 00:58:59, 註解 無‧
RootKit
資深會員


發表:16
回覆:358
積分:419
註冊:2008-01-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2010-12-30 20:40:58 IP:122.126.xxx.xxx 訂閱
應該是檔案存取的問題,以每個檔案 2 Sec 搜尋是非常快了。
檔案開啟是需要時間的。有時候會因為硬碟 Catch不同也會影響。

1. 建議建立獨立的總索引檔 1 MDB 要查詢並自動指定讀取哪一個檔案。
2. 或者使用 3-Tier 來處理,減少初次 Connect 時間及避免因重複開啟檔案造成拖累的問題。
網芳網路效率是很差的(對檔案),如果在本地存取整合後傳給 Client 也許會好一些。
3. 改用 FireBird or SQL Express 以我經驗 ACCESS 在 Multi-Thread 下 Multi-Connection 效率是很低的。

參考




kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#7 引用回覆 回覆 發表時間:2011-01-16 15:26:44 IP:24.16.xxx.xxx 未訂閱
ACCESS 97, 放在一台Server上(win2003 server), 以網芳的方式分享出來給Client使用, 
而且資料是依年月分開放置於MDB檔內, 例如:201012.mdb, 201011.mdb.......

==>不管是不是MultiThread,你這種網芳 Access97 切成以月切割
==> DB的架構要想快,是很有問題的。光是由TCP/IP的角度來看
==> ,就注定快不起來。而且即使用W2003Ser,Access也很不
==> 適合共享使用。而且你的資料庫切到月,也實在太細太細了。
------
Kevin
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#8 引用回覆 回覆 發表時間:2011-01-16 15:30:18 IP:24.16.xxx.xxx 未訂閱
SmallFox及RootKit講的是實務精華,這比你原先的MultiThread
影響更大且才是實務考量,勝敗所在。
------
Kevin
junlin
初階會員


發表:66
回覆:94
積分:42
註冊:2002-03-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2011-01-17 13:07:28 IP:60.249.xxx.xxx 訂閱
感謝大家的回覆, 後來我還是決定不用multi thread了, 因為無法解決我的問題, 
我的作法是, 在存放MDB的那個server內, 撰寫1個web service, 然後透過它來搜尋並回傳資料所在的mdb路徑,
之後client再直接去讀那個mdb檔, 這樣速度就很快了.

這種MDB的架構是前人遺留的產物, 目前還沒時間大翻修, 所以只好針對影響比較大的部分先修改,
分數我就給rookit了, 因他提到的3-tier想法促成了我用web service的方法解決了這個問題.
其他人就不好意思了, 還是很感謝大家的回應.
系統時間:2024-04-17 0:53:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!