DIOCP開源專案 測試資料庫效能

2022-04-01 12:49:41 字數 1959 閱讀 2977

今天群裡有個朋友說他們醫院專案採用直連資料庫,高峰時期sqlserver的連線數達到7000多,於是我準備做個用diocp做個demo,服務端用連線池。白天的時候我在想,併發如果7000個。如果用diocp做三層伺服器,連線池應該在100個左右。今天晚上奮鬥了一晚上,準備把測試過程中碰到的問題總結一下。

所有的**測試**寫完後,準備開始測試,配置後服務端的連線池(config\dbpool.config)

,

}

配置中main為連線池中連線的id《通過id獲取連線》

在客戶端編寫測試執行緒

procedure

ttester.execute;

varlvcds:tclientdataset;

begin

interlockedincrement(__testercount);

lvcds := tclientdataset.create(nil

);

trywhile (not self.terminated) and (not __stop) do

begin

tryfrdboperator.clear;

frdboperator.rscript.s[

'sql

'] :=fsql;

frdboperator.querycds(lvcds);

except

on e:exception

dobegin

tfilelogger.instance.logerrmessage(ftestercode +e.message);

end;

end;

//每執行一次進行異常關閉連線

frdboperator.connection.close;

end;

tfilelogger.instance.logdebugmessage(ftestercode + '

執行緒已經停止[

' + testercode + ']'

); fconnection.close;

finally

interlockeddecrement(__testercount);

lvcds.free;

end;end;

開始測試100,個執行緒,在筆記本上測試

問題來了

幾下客戶端就連線不上了,怎麼連線都連線不上《服務端連線數為0>,關閉了客戶端重新開也不行。心中一下就涼了,不會我寫的iocp這麼脆弱吧。

經過幾個小時的折騰和寫各種日誌,發現服務端中工作執行緒和監聽執行緒都是好好的,沒有退出執行緒。

後來我檢視網路情況發現服務端有在監聽9983埠《但是telnet不通》,我發現有好多被關閉的127.0.0.1->127.0.0.1:9983的連線,但是在網路狀態中可以看到,

過一段幾分鐘後,發現又可以連線上,估計客戶端不能頻繁的建立連線和關閉連線。

後來把客戶端**修改下《刪除下面的**》。發現一切正常,還好不是服務端的問題,diocp還是經的住考驗。

//每執行一次進行異常關閉連線

frdboperator.connection.close;

開啟1000個客戶端,不停獲取資料,發現服務端連線池中最多只有7個連線,不過機器比較卡了《畢竟是筆記本》,想想我白天是多想了,diocp根據cpu的數量開啟的工作執行緒工作執行緒如果是7個,連線數肯定也不會超過7個。就算客戶端連線有7000個,資料庫的連線數也就是7個而已。

就算有7000個連線估計同時在執行資料庫的也不過就幾百個而已。處理起來應該是沒有問題的。明天給群裡的朋友測試下。多弄幾台客戶端測試下

**********===2015-01-28 10:10:24 

上面測試環境,邏輯是在io執行緒中處理,其實把邏輯資料投遞到其他執行緒池進行處理,是可以突破7個連線的限制。

後來的diocp1和現在的diocp3都有這種方案了依靠iocptask/qworker進行邏輯的處理,這樣不占用通訊io執行緒

DIOCP開源專案 測試資料庫效能

今天群裡有個朋友說他們醫院專案採用直連資料庫,高峰時期sqlserver的連線數達到7000多,於是我準備做個用diocp做個demo,服務端用連線池。白天的時候我在想,併發如果7000個。如果用diocp做三層伺服器,連線池應該在100個左右。今天晚上奮鬥了一晚上,準備把測試過程中碰到的問題總結一...

MySQL新增專案測試資料

專案開發過程中,某個功能需要大量的資料支撐我們驗證功能的邏輯效能,測試完成之後我們可以刪除,確認研發的功能是可用的.如果一條條去新建,將會耗費非常大的時間成本,切後續需要使用時,又得重新建資料.我們可以通過該mysql新建乙個自定義函式,這個函式通過專案的業務去決定新建哪些資料,並且下次需要實現時直...

測試資料庫腳步

執行 sql,以資料庫管理員身份登入,下面給出測試資料庫的指令碼 需要鍛鍊動手能力的朋友,可以執行它!create database teaching gouse teaching gocreate table student sno char 10 primary key,sname char 8...