作者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
1F:推 kkkke:SP效能佳,移植困难不能怪SP。但依赖SP将无法分散运算量。 07/03 16:36
2F:推 kkkke:如果运算量不是系统瓶颈,我想SP能用就用。 07/03 16:48
3F:→ FireLake:若运用得当,不把不相关的东西塞到同个SP,运算量不是问题 07/03 17:17
4F:推 kkkke:我不知道怎分哪些不相关。我把TABLE之间的运算通通都写SP。 07/03 18:18