client端應用程式全部當在那....急 |
尚未結案
|
cosuki
一般會員 發表:10 回覆:40 積分:10 註冊:2003-06-05 發送簡訊給我 |
|||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 我是用dephi5開發三層式的架構... 現在發現有十台client端連同一個ap server在建檔時會突然的當在那... 查不出原因....但其他台連另一個ap server 的郤還能運作... 這是什麼原因哩..... 十台client的資料集都是有where operat='操作者'... 所以應該不會資料被lock住吧... 請大大們能幫幫忙...當在那...是指十台Client全部,還是被連的那台AppServer,如果是AppServer且用BDE連的話,那可能是BDE沒有設好、或程式有問題。
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
cosuki
一般會員 發表:10 回覆:40 積分:10 註冊:2003-06-05 發送簡訊給我 |
|||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 我是使用ado去連資料庫的 當在那..十台Client全部都的畫面都當住了.. 但ap還可動,因為我為了測試..有放二個連結資料庫及斷線的button都是執行同一功能嗎?一定是十台嗎?用程式Debug會嗎?如果固定產生那就好查,如果不是就很難查了,確定同一步驟會造成,用Debug方式找找看是哪裡的問題。
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
cosuki
一般會員 發表:10 回覆:40 積分:10 註冊:2003-06-05 發送簡訊給我 |
都是執行同一功能嗎?一定是十台嗎?用程式Debug會嗎?如果固定產生那就好查,如果不是就很難查了,確定同一步驟會造成,用Debug方式找找看是哪裡的問題。 之前是'建檔'和'稽核建檔'作業時,當機的次數較多,因為都是使用同一個table,
當稽核建檔作業一打開時,client就全部當在那了.
所以我就讓稽核建檔作業連一個唯讀的ado元件(lock type設成ltUnspecified),
只有要修改時連到另一個可以修改的ado元件(lock type設成ltPessimistic,其他是clUseClient,ctKeyset,ltPessimistic),建檔也是連這個可寫入的ado元件
目前檔機的次數是比較少了,但還是會...>< 且我在client的連結同一table的clientDataset的onReconcileError有攔錯誤訊息,
可是都沒有錯誤出來....
昨天我在appserver該元件的datasetProvider的OnUpdateError加上show錯誤的事件
在當機時就有攔到錯誤....錯誤訊息是-2147217873,key值建入重複,
但依他們建檔的方式,(看單據的流水號)
應該是不會有新增同一單號的問題出現啊....真的很奇怪....
現在一天要建檔的量有一二萬件,若當機的問題一直沒解決..會害他們無法如其交件...
誰能幫幫忙哩....><
|
||
speedup
資深會員 發表:19 回覆:259 積分:280 註冊:2003-07-04 發送簡訊給我 |
你應該用RemoteDataModule,3,4年沒用過了,給些建議你試試
1.由於RemoteDataModule是依附在某一隻程式之下,但必須注意主程式與RemoteDataModule是不同的Thread,因此若主Form程式碼或RemoteDataModule內的程式碼相互存取對方變數是極度危險,除非你有撰寫Thread Safe 的控制碼,不然不要把一大堆公用的東西放在主Form
2.記的把TADOConnection的 KeepConection 設成False
3.放棄用RemoteDataModule巴!改用TransactionDataModule(d5應該叫MTSDataModule),除了第一次啟用會稍慢,後續校率及承受的Client數都比較多,且OS也提供管理工具...總之.....好處多多 混心雜欲 棄修身~唉
------
唉~ |
||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 之前是'建檔'和'稽核建檔'作業時,當機的次數較多,因為都是使用同一個table, 當稽核建檔作業一打開時,client就全部當在那了. 所以我就讓稽核建檔作業連一個唯讀的ado元件(lock type設成ltUnspecified), 只有要修改時連到另一個可以修改的ado元件(lock type設成ltPessimistic,其他是clUseClient,ctKeyset,ltPessimistic),建檔也是連這個可寫入的ado元件 目前檔機的次數是比較少了,但還是會...>< 且我在client的連結同一table的clientDataset的onReconcileError有攔錯誤訊息, 可是都沒有錯誤出來.... 昨天我在appserver該元件的datasetProvider的OnUpdateError加上show錯誤的事件 在當機時就有攔到錯誤....錯誤訊息是-2147217873,key值建入重複, 但依他們建檔的方式,(看單據的流水號) 應該是不會有新增同一單號的問題出現啊....真的很奇怪.... 現在一天要建檔的量有一二萬件,若當機的問題一直沒解決..會害他們無法如其交件... 誰能幫幫忙哩....><如果當機的情形是前端程式整個停掉沒有回應,且是用SocketConnection連Server且沒有用壓縮中介元件的話,就是SocketConnection的Bug,我們也曾遇過,加上壓縮中介元件後就沒有問題了。
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
cosuki
一般會員 發表:10 回覆:40 積分:10 註冊:2003-06-05 發送簡訊給我 |
speedup兄你好
我是用RemoteDataModule,原本是用apartmant創建的,但現在聽jieshu大大改
用free的方式,好像有改善當機的情況(目前還在觀查中)...
而我的主Form程式碼和RemoteDataModule只有共用上線人數一個變數而己,應該還好....
我想請問一下TADOConnection的 KeepConection 設成False的差別是在那....
和client端畫面突然當在那不能運作有關嗎.... TransactionDataModule....嗯我從沒用過,書上好像也沒說....
是新版的書上才有寫嗎...或範例嗎..... ps....小妹真的很感謝各位大大的幫忙....
|
||
cosuki
一般會員 發表:10 回覆:40 積分:10 註冊:2003-06-05 發送簡訊給我 |
|||
speedup
資深會員 發表:19 回覆:259 積分:280 註冊:2003-07-04 發送簡訊給我 |
引言: speedup兄你好 我是用RemoteDataModule,原本是用apartmant創建的,但現在聽jieshu大大改 用free的方式,好像有改善當機的情況(目前還在觀查中)... 而我的主Form程式碼和RemoteDataModule只有共用上線人數一個變數而己,應該還好.... 我想請問一下TADOConnection的 KeepConection 設成False的差別是在那.... 和client端畫面突然當在那不能運作有關嗎.... TransactionDataModule....嗯我從沒用過,書上好像也沒說.... 是新版的書上才有寫嗎...或範例嗎..... ps....小妹真的很感謝各位大大的幫忙....1.在COM 和ADO 模式中將keepConnection 設成 False 可達到Database Pooling效果,再不濟也可有效降低Database連線數,不過對你的模式是否有效就不知了 2.TransactionDataModule Delphi6才有,就是用來作COM ,Delphi5 應該叫MTS DataModule 3.印象中Delphi5 好像有兩個Update Service Pack 其中一個的Scktsrvr.exe反而會造成不穩,妳下載最新版Scktsrvr.exe 和 MIDAS.dll 試試,不過切記vup 新版Scktsrvr.exe一定要搭配新版 MIDAS.dll,不然D5 compile 出來可能不能run 4.妳是否用有狀態的寫法(ClientDataSet的PacketRecords<> -1),請改無狀態寫法,避免資料庫連線一直被佔用 混心雜欲 棄修身~唉
------
唉~ |
||
wuabc
初階會員 發表:6 回覆:60 積分:33 註冊:2002-10-28 發送簡訊給我 |
|||
cosuki
一般會員 發表:10 回覆:40 積分:10 註冊:2003-06-05 發送簡訊給我 |
有查過系統資源嗎(可用記憶體)?
有無可能是系統資源耗盡導致APServer無資源可用?
將AP Server與DB Server分開不同機器或許可以得到改善 P.S. Asynchronous connection應不會是好的選擇(雖然我不懂ADO) 系統資源都還沒什麼用到,只是網路好像一直在傳輸中....
Asynchronous connection真的不是好的選擇...因為我覺得資料沒寫進去..
就是因為使用非同步的關係..因為前幾天都不會這樣..,改了之後就變成這樣了.(被使用者恨死了,害他們要重打...)
但還沒試用在free執行緒模式下建立的apserver用同步的會不會當或當了資料能否寫入資料庫.....
|
||
cosuki
一般會員 發表:10 回覆:40 積分:10 註冊:2003-06-05 發送簡訊給我 |
1.在COM 和ADO 模式中將keepConnection 設成 False 可達到Database Pooling效果,再不濟也可有效降低Database連線數,不過對你的模式是否有效就不知了
==>因改了之後一直當,我就先把它改回來了.....(現在還不知是不是因為這參數才當的啦)
2.TransactionDataModule Delphi6才有,就是用來作COM ,Delphi5 應該叫MTS DataModule
==>因我們公司是買D5的,若現在改用MTS DataModule,怕不熟,客戶又趕著上線,有點風險.... 3.印象中Delphi5 好像有兩個Update Service Pack 其中一個的Scktsrvr.exe反而會造成不穩,妳下載最新版Scktsrvr.exe 和 MIDAS.dll 試試,不過切記vup 新版Scktsrvr.exe一定要搭配新版 MIDAS.dll,不然D5 compile 出來可能不能run
==>要去那捉,版主大大昨天是有給我D7的FIX BETA版的Scktsrvr.exe ,雖沒MIDAS.dll 還是可以RUN....(為什麼覺得用DELPHI寫三層很不穩哩...><)
4.妳是否用有狀態的寫法(ClientDataSet的PacketRecords<> -1),請改無狀態寫法,避免資料庫連線一直被佔用
==>沒有哩,我是用APPLYUPDATE(0) 混心雜欲 棄修身~唉
|
||
speedup
資深會員 發表:19 回覆:259 積分:280 註冊:2003-07-04 發送簡訊給我 |
引言: 但依他們建檔的方式,(看單據的流水號) 應該是不會有新增同一單號的問題出現啊....真的很奇怪.... 現在一天要建檔的量有一二萬件,若當機的問題一直沒解決..會害他們無法如其交件...一天一二萬筆,原始檔案不就好幾十萬筆? 如果真的要面對這麼大筆的資料,妳在MIDAS架構勢必要撰寫些程式碼來處理,以增加效率,如妳的狀況所言,若大部分的Client目的是在建立新資料,那妳的寫法因該是client啟用時,只單純取表格結構下來,讓使用者自行決定要下那些查詢參數來輸入調閱資料的範圍 另外,若妳的DataSetProvider.ResolveToDataSet若設定成Ture(建議設法),你 在BeforeApplyUpdates事件中依據前端傳來的Delta資料來下適當的SQL語法開啟AP端的ADODataSet,而不是每次都select * from XXXTable,不然的話,每次異動Ap端都重新selet all,那SQL成本將十分高昂 (PS BeforeApplyUpdates事件無法直接取得Delta參數,所以必需在Client端就把Delta包進OwnerData,另外建議的作法是直接Override InternalApplyUpdates方法,直接動手腳) 最後!若妳的系統有用到Master/Detail且master資料量很大,那很不幸的是MIDAS原始架構在這一方面效率很差,必須作大幅度改良.... 總之,盡量讓Cliet端取必要的資料即可,而不是一次就取得全部資料 混心雜欲 棄修身~唉
------
唉~ |
||
cosuki
一般會員 發表:10 回覆:40 積分:10 註冊:2003-06-05 發送簡訊給我 |
若大部分的Client目的是在建立新資料,那妳的寫法因該是client啟用時,只單純取表格結構下來,讓使用者自行決定要下那些查詢參數來輸入調閱資料的範圍
===>大部分的Client目的是在建立新資料沒錯,
但該使用者能修改他所建檔的資料,只要他還沒做資料匯出就能修改...
所以我目前下的sql是有加入where,建檔人員,及當時未匯出的建檔批號
(一批若為二萬件,則要整批上傳)...所以一個建檔人員可能會select出 2~3千筆
或許我是可以改用介面,不要用dbgrid,show出全部的資料,只show出單號或都不要有dbgrid,要改資料時再請使用者用查詢帶出該筆資料(使操作介面會變不方便了...)
|
||
johnny2212
初階會員 發表:34 回覆:65 積分:39 註冊:2003-04-09 發送簡訊給我 |
這是我個人以下的建議
1. 關掉有問題的AP,以別台來取代,若是不會發生Client當機的話,那可能就是你的硬體或OS又或是註冊碼(registry)出現問題
2. 若是當機的問題還是發生,那肯定是程式出現錯誤.你說發生在建檔的時候,以下是我個人的寫法à不要用ClientDataSet1.Insert,直接ClientDataSet1.Execute填入key值(要確實填入資料庫),在用ClientDataSet1.Edit修改它;若是取消,在用Execute將此筆殺掉,最後寫入用ClientDataSet1.ApplyUpdates雖然麻煩些,如此可保證key值決不重複(ReconcileError若出現太多,不是件好事,我個人盡量不讓它出現)
3. 最可能的部分是發生在界面程式(viewàtype library),雖然是safecall,不會raise error,但若是你的介面程式錯的太厲害,還是會使AP掛掉,解決方法是你將SourceCode Compile後直接讓Client端使用(不要只Copy執行檔),如此raiseerror 就會產生, 到時在判斷哪裡錯了
|
||
cosuki
一般會員 發表:10 回覆:40 積分:10 註冊:2003-06-05 發送簡訊給我 |
謝謝你們大家....
因案子很急,無法再讓使用者一直測用會當機的版本
上面命令改成client/server的版本.....
雖然昨晚己經改了介面讓使用者讀取最少量的資料....
但...也沒經過上線測試就被要求改成client/server....
反正我只是小小的程式設計師啦.....就這樣...
謝謝大家的幫忙.....雖然當機的真像還沒查出來....
我現在要忙著改版上線了.....改了也好...
有問題也不再是我一個人的責任了,不用自己一個人查的要死...
一直被人問,壓力也是很大的..雖然程式是我寫的,我也覺得很對不起使用者咩
但當初也是大家同意說要走三層咩......算啦,改就改啦... 不好意思,發洩一下而己啦,我只是不喜歡做白工而己...
不過,為了使用者好.....我想還是改成client/server好了....
至少我也學到不好..... 在此,我給把分數給版主大大....因為前幾天他被煩了很久了...sorry
|
||
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|||
cosuki
一般會員 發表:10 回覆:40 積分:10 註冊:2003-06-05 發送簡訊給我 |
johnny2212 兄你好.....我的情況是....
1. 關掉有問題的AP,以別台來取代,若是不會發生Client當機的話,那可能就是你的硬體或OS又或是註冊碼(registry)出現問題
====>關掉有問題的ap後,開新的(同一台主機上),在client端上先按資料庫斷線,
再按離線...還是沒有反應....且..socket server上的連線數目還是十個人... 2. 若是當機的問題還是發生,那肯定是程式出現錯誤.你說發生在建檔的時候,以下是我個人的寫法à不要用ClientDataSet1.Insert,直接ClientDataSet1.Execute填入key值(要確實填入資料庫),在用ClientDataSet1.Edit修改它;若是取消,在用Execute將此筆殺掉,最後寫入用ClientDataSet1.ApplyUpdates雖然麻煩些,如此可保證key值決不重複(ReconcileError若出現太多,不是件好事,我個人盡量不讓它出現)
===>昨天細讀李維的ado那本,有寫到ado在三層上的應用有bug,尤其是在做異動時....他也有建議用Execute sql的方式去做異動比較好,我也有朋友也這樣說,
但實際上的效用...可能要等機會了(也許是我再接別的案子或換一家公司工作吧).... 3. 最可能的部分是發生在界面程式(viewàtype library),雖然是safecall,不會raise error,但若是你的介面程式錯的太厲害,還是會使AP掛掉,解決方法是你將SourceCode Compile後直接讓Client端使用(不要只Copy執行檔),如此raiseerror 就會產生, 到時在判斷哪裡錯了
===>有時上ap server 上攔到很多的錯(快百),但都不太會當....,但有時是一個錯都沒有就當了....,SourceCode Compile和copy執行檔有差嗎....
|
||
Jungle
一般會員 發表:5 回覆:18 積分:9 註冊:2002-03-18 發送簡訊給我 |
其實主從架構及多層架構各有利弊, 那我們要如何善用主從架構及多層架構的優點呢, 以下是敝人小小的分析及看法, 希望對您未來的系統開發方向有所幫助. 1.從效率來看, 主從架構比較好, 而多層架構中間多一道手續, 就會多一些時間, 而且多層架構 APServer 的心臟不夠強的話, 粉容易掛點. 2.從開發角度來看, 也是主從架構好, 畢竟主從架構已發展多年, 至今是大家較熟悉的模式了. 開發時間大大的縮短, 成本也較少. 3.從技術來看, 也是主從架構簡單. 比較不會有一大堆技術協定之類的東東. 4.從系統發展性來看, 就是多層架構比較好, 可強迫你把系統物件化, 將來在維護上及系統擴充時, 可花較少成本達到最大效益. 5.從分散系統來看, 也是多層架構好, 把相同的商業邏輯寫在一個元件(COM+)上或WebService上(建議WebService及COM+共用,既不會在防火牆上打洞, 又可兼顧資料庫效率), 可讓ERP系統或Web上的電子商務呼叫同一商業邏輯服務, 畢竟現在已經邁入軟體服務時代了. 既然主從架構及多層架構各有利弊, 那我們要如何開發一套穩定佳, 效率快, 開發事半功倍的系統呢?????
A.首先把系統分開為 User介面開發及商業邏輯開發. B.User介面就是使用者只輸入資料而已, 即然只是收集資料用, 所以就用主從架構囉. 即快速又不會有一些奇奇怪怪的技術要避來避去的. 可讓 user 快速地輸入大量的資料. C.商業邏輯部份, 寫在COM+上(不過處理大量資料時, 李維老師建議: 寫在StoredProcedure上), 使用者操作系統時, 會用的商業邏輯的時間較少, 不像資料收集那樣負擔真的很大. D.User介面一般程式師就可寫了, 而且可專注在使用者操作方便性上. E.商業邏輯就要由資深工程師來寫, 不只要熟悉分層架構技術, 也要瞭解商業行為的各種規則. 以上給您參考, 希望對您有幫助.
|
||
cosuki
一般會員 發表:10 回覆:40 積分:10 註冊:2003-06-05 發送簡訊給我 |
我己經單機模擬出客戶端ap當機的狀況了...
我使用同一個操作者帳號開三個client,
並使同程式讓他一直新增資料(網路流量一直有)
當我再開第四個client或第五個client時,要登入系統時...
全部都當在那了...(網路流量沒有了....表dbserver的資料只有新增到當機前)
最後只好吧ap關掉,client只要按離線再連線,新的ap就開起來了....
我覺得是我的ap無法負荷大量的資料處理....ap server就當了,沒有服務了..
有辦法改善嗎...或是控制他的處理量快不行時,show訊息或做排程之類的
|
||
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|||
cosuki
一般會員 發表:10 回覆:40 積分:10 註冊:2003-06-05 發送簡訊給我 |
這麼說來,有可能不是資料庫的問題,而是作業系統的I/O滿載乎?
..........耶,因為我是用我自己的電腦測的,但當的狀況和客戶的很像...
所以除了db在另一台電腦.....
ap及client都是在我自己的電腦上run的啦....
而ap我是用delphi執行的...有出現這個錯訊息啦...
在站上我看到一篇文章....
http://delphi.ktop.com.tw/topic.php?topic_id=20901 不知是ap的問題,還是db異動太多 lock住了,
所以才有像前幾篇的sql工具圖檔一樣...一堆資在那沒做處理...
|
||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 不知是ap的問題,還是db異動太多 lock住了, 所以才有像前幾篇的sql工具圖檔一樣...一堆資在那沒做處理...那建議你批次存,而不要每筆存,這樣就不會產生太多異動,可在存檔時先將資料在Client存一份(用ClientDataSet.SaveToFile,避免連線中斷資料流失),等整批在存有問題時,再顯示有問題的原因,請其修正後再存,且可在輸入資料時就做資料的檢核,以免儲存時由資料庫發出,造成資料庫的負擔。
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
cosuki
一般會員 發表:10 回覆:40 積分:10 註冊:2003-06-05 發送簡訊給我 |
嗯....
我現在愈來愈覺得是他們建檔的速度太快....
資料庫來不及處理....
因為之前也用連SQL Query Analyzer工具也動不了的情況哩,
或是我同事用SQL Query Analyzer下sql,就發生當機事件哩.. 但也好奇怪,都只是新增資料而以咩..且MSSQL真的效率那麼差哦...
我之前都用ORACLE的,但第一次遇到要那麼快速建檔的案子.... 改成批次存也行啦,但用ClientDataSet.SaveToFile,是指先存成檔案,
但資料到一定的量就批次存(如設定一批100筆),若斷線時,可從先前的檔案回存到資料庫...您的意思是這樣嗎..... 若外我覺得奇怪的是.若真的是資料庫的問題..
那用CLIENT/SERVER怎麼不會有問題哩....
客戶他們RUN了一天CLIENT/SERVER版的...都沒問題哩..怪怪的
|
||
hahalin
版主 發表:295 回覆:1698 積分:823 註冊:2002-04-14 發送簡訊給我 |
|||
cosuki
一般會員 發表:10 回覆:40 積分:10 註冊:2003-06-05 發送簡訊給我 |
|||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 改成批次存也行啦,但用ClientDataSet.SaveToFile,是指先存成檔案, 但資料到一定的量就批次存(如設定一批100筆),若斷線時,可從先前的檔案回存到資料庫...您的意思是這樣嗎.....批次存是User所Key的資料先不送到Server存,等User想存時,按下儲存鍵,才真的送到Server存,這樣才不會一直下命令要AppServer將資料存入資料庫,造成效率差,雖然在存檔時要等一下,但這也可讓他們稍息一下。 可在按下儲存鍵時,順便在User電腦存一份這次輸入的,是預防連線斷掉無法存檔時,還有救回的機會。
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
cosuki
一般會員 發表:10 回覆:40 積分:10 註冊:2003-06-05 發送簡訊給我 |
|||
cosuki
一般會員 發表:10 回覆:40 積分:10 註冊:2003-06-05 發送簡訊給我 |
|||
sfour
一般會員 發表:5 回覆:5 積分:2 註冊:2003-05-21 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |