|
|
Re: sorry, 我的表达有问题
最初由 fromeast 发布
[B]我的原意:
使用存储过程能较少地占用shared pool空间,并减少了SQL编译、内存管理方面的性能损耗。
理由:
无论pro*c还是存储过程,其实都是在执行一些SQL,只不过执行方式和组织方式不同:
1.pro*c的SQL是分别传递、执行的,每个SQL占用shared pool空间中的一个条目。存储过程是作为一个整体保存在shared pool中的,一个存储过程只占一个条目。所以存储过程能较少地占用内存shared pool空间。
2.pro*c的SQL都有可能重新编译。而存储过程只编译一次。 [/B]
不知道这些描述的出处?请指明。
我认为:
1。存储过程的代码是整个存储在shared pool中,比起pro*c中的单条sql占用的空间肯定大的多。
2。存储过程确实一次编译后就驻留内存,pro*c的sql和任何sql没有区别,只有被客户端发出执行,都会被oracle分析,其执行计划也会保存在shared pool,下次有同样的语句调用时,直接执行分析了的代码。原理和存储过程没有区别。只是不清楚在shared pool中的sql、存储过程是否也和data buffer 中的数据一样用LRU管理。 |
|