※ 引述《GP03.bbs@aeug.twbbs.org (Gundam Pilot)》之銘言:
...deleted
> 一個design pattern不能完全適用所有的狀況
> 簡潔的程式也未必一定是好程式
> 開開關關的機制之前提過了,在ADO.Net有Connection Pool在處理
> 目的是為了節省"資源" ...當然這個資源先前沒說清楚是Sql Server的資源
> "如果"..connection從頭開到尾是最省資源的方式,那connection pool存在的目的是?
> 小弟不知貴兄多年專案是那個領域的,不過小弟有個疑惑
> 如果有台Sql server不要說千人..百人就好..有百人佔著connection
> 這樣比較省資源
> 還是當使用到connection時,由connection pool去管理connection資源
> 當有須要Query時才"打開"連線 (是打開,不是建立...這在connection pool是不同的)
> 比較省?!
> 百人連線能確定"使用中"的有多少?"Idel"中的應該是佔大多數吧
> 由其以瀏覽資料為取向的功能時....大多數時間使用者都在"瀏覽" Query出的"資料"
> 但此時確"佔著"connection不放....(此時在Sql server看看使用者list就知道..恐怖)
> 但也或許connection pool的方法不適用於貴兄的專案狀況
> 而且無論是開開關關或是一直開著都不會改變程式執行的結果
> 但本人提出"開開關關"的觀念是習自MSDN對於ADO.Net 的connection pool機制
> 還有一個觀念是..."開開關關"在有connection pool 是為了節省資源與增加效能
> 但...如果把pool給關了,或pool的數量不設定不符需求...那效能只能用慘字形容
關於Connection Pool的機制,由於敝人沒有正式去測過.Net,所以無法評論其作用
的利弊。(有時候,吾人會以為後出的東西比較好用,其實,就以VB.Net而言,果真
比VB6好用嗎?)
但關於開一個連線資料庫所佔用的資源有多少一節,以Oracle為例,它是佔4k。
一千人同時連線而閒置是佔用4MB。
以廣網T1線路為例,不複雜網頁一頁平均大約是30K,同一時間可以有50人存取,若
以每人平均60秒會換頁而言,資料庫可以同時容納3000人,這意味至少會佔用12MB。
我目前上網的這台電腦是P3 1.0G/512MB RAM,這還是二年前買時的規格而且還不是
Server,所以,若說開個連線所佔的資源來比較程式撰寫、維護之便利性,我會以便
利性為主要選項。
若以區網為例,同時會上網的公司,一般大約也不過數百個人罷了!(像宏碁有萬把
人同時上網的,那種server的效率自然也會有其容納規格)它所佔用的資源就更少。
所以,個人以為佔用SQL Server資源這部份的耗能是不用去考慮,反而是要考慮伺
服器的處理效能,畢竟目前的硬碟及RAM是愈來愈大且便宜。
而伺服器的效能又分Web Server & SQL Server兩大部份。這裡就只討論SQL Server
部份。有1.5百萬筆資料的資料庫,每筆佔1k,猜猜在MS SQL 2000中,以select 掃
過就鎖住的模式,以下指令它所佔用的資源有多少?
sSQL=" select * from billing1 "
sSQL=sSQL & " where id_client in (select id_client from client1)"
若以每個客戶平均消費一百筆而言,且client1 table內符合率達8成,而這個
查詢的指令共佔用資源:1.2GB ,而且是他人無法增修billing1的「鎖住模式」
關於SQL Server資源之利用,重點不在開連線有多少個,而是所下指令的正確性所
佔用的資源才是驚人處。這時候,把連線隨程式一起關掉的確是比較好的策略,不
過要先釋放資源後才可以關,不然,資源依然被recordset佔用著。所以重點是出在
recordset是否有釋放資源,而不在連線是否有關閉之上。
--
┌─────◆KKCITY◆─────┐ ◢ ◤ ★ 線上音樂新震撼 ★ ◢ ◤
│ bbs.kkcity.com.tw │ ^_^ / 隨選隨播免等待 KKBOX◤ ^_^ /
└──《From:203.204.90.144 》──┘ ◤ http://www.kkbox.com.tw ◤