作者FireLake (XXX)
看板Database
標題Re: 網管人
時間Sat Jul 3 10:09:41 2010
※ 引述《JoeHorn (每天都在公司玩OLG)》之銘言:
: 一個 DB connection 可以執行很多次 SQL statements,
: 你舉的這個例子只需要 transaction,但是.. 可以用同一個 connection。
: 更何況,很多程式語言有 connection pool 管理能力。
: (因為可以用同一個 connection,以下我就不回了.. 因為都不是考量因素)
這部份完全沒有解釋performance上的問題,用不用 connection pool 都
一樣。
一個 DB connection 的確是可以執行好幾個SQL,但要注意到的是每執行
一個SQL就是一次從client到server的 round trip。重複使用同一個 DB
connection 或是用 connetion pool 只能省下 login, authetication,
和一些 initialization 的時間,但是執行每一個 SQL,還是需要從 client/
application 把 sql statement 或是 binding variable 的值傳到
server/db (當已有curosr時)。此外,執行完後 server/db 還要把結果傳
回去。這不只是傳輸時間而已,處理每一個 SQL 時,database要花時間在
解析sql statement、處理cursor、binding variable、重新取得lock上面,
非常沒有效率。
用個簡單的例子,現在有10個SQL要執行,就叫做 SQL 1 到 SQL 10 好了,
SQL 10 要依據 SQL 9 的結果,SQL 9 要依據SQL 8 的結果,以此類推。用
stored procedure 只要一個 round trip,不用的話就要10次,這在效能上
有很大的差別,而且如果其中有幾個SQL要傳回大量的資料,不用 stored
procedure 的效能會是最糟糕。
把 logic 放在 stored procedure 或是 application 各有利弊,但在
performance 上,使用 stored procedure 有很大的優勢。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 71.142.74.199
推 kkkke:SP效能佳,移植困難不能怪SP。但依賴SP將無法分散運算量。 07/03 16:36
推 kkkke:如果運算量不是系統瓶頸,我想SP能用就用。 07/03 16:48
→ FireLake:若運用得當,不把不相關的東西塞到同個SP,運算量不是問題 07/03 17:17
推 kkkke:我不知道怎分哪些不相關。我把TABLE之間的運算通通都寫SP。 07/03 18:18