同Schema不同服务器执行计划COST、%CPU差异及最优计划咨询
问题背景
我们拥有两台Schema完全一致的服务器,均运行Oracle 19c版本数据库,但二者执行计划中的COST与(%CPU)存在差异。
开发环境(12核服务器)执行计划
-------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib | -------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 13M| 2666M| 10791 (1)| 00:00:01 | | | | | 1 | PX COORDINATOR | | | | | | | | | | 2 | PX SEND QC (RANDOM)| :TQ10000 | 13M| 2666M| 10791 (1)| 00:00:01 | Q1,00 | P->S | QC (RAND) | | 3 | PX BLOCK ITERATOR | | 13M| 2666M| 10791 (1)| 00:00:01 | Q1,00 | PCWC | | | 4 | TABLE ACCESS FULL| PERSON | 13M| 2666M| 10791 (1)| 00:00:01 | Q1,00 | PCWP | | -------------------------------------------------------------------------------------------------------------- Note ----- - automatic DOP: Computed Degree of Parallelism is 12 because of degree limit
生产环境(64核服务器)执行计划
---------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib | ---------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 13M| 2666M| 74 (25)| 00:00:01 | | | | | 1 | PX COORDINATOR | | | | | | | | | | 2 | PX SEND QC (RANDOM) | :TQ10000 | 13M| 2666M| 74 (25)| 00:00:01 | Q1,00 | P->S | QC (RAND) | | 3 | PX BLOCK ITERATOR | | 13M| 2666M| 74 (25)| 00:00:01 | Q1,00 | PCWC | | | 4 | TABLE ACCESS STORAGE FULL| PERSON | 13M| 2666M| 74 (25)| 00:00:01 | Q1,00 | PCWP | | ---------------------------------------------------------------------------------------------------------------------- Note ----- - automatic DOP: Computed Degree of Parallelism is 64 because of degree limit
咨询问题
- 高COST低%CPU的开发环境执行计划是否比低COST高%CPU的生产环境计划性能更优?
- 差异产生的原因是什么?
- 哪个是更优的执行计划?
问题解答
1. 开发环境计划是否比生产环境性能更优?
不是。Oracle的Cost是基于内部模型计算的估算值,不能跨服务器直接对比Cost和%CPU数值来判断性能。实际性能需要看真实执行时间、资源利用率、吞吐量等实际运行指标。
2. 差异产生的原因
- 并行度(DOP)差异:开发环境用12并行度,生产环境用64并行度。Oracle计算Cost时会将任务分摊到多个并行进程,更高的DOP会大幅降低单进程的Cost估算值,因为总工作量被更多进程拆分承担。
- CPU配置与Cost模型:Oracle的Cost模型会参考服务器CPU核心数,64核服务器的单CPU资源成本估算更低,导致整体Cost下降;同时高并行度下,更多CPU进程参与工作,会拉高%CPU的占比。
- 存储访问方式差异:生产环境执行的是
TABLE ACCESS STORAGE FULL,开发环境是普通TABLE ACCESS FULL,说明生产环境可能使用了ASM或智能存储层,存储层的优化会让Oracle调整Cost计算逻辑,同时CPU需要处理更多存储协同工作,导致%CPU占比上升。
3. 哪个是更优的执行计划?
生产环境的执行计划更优,理由如下:
- 64并行度能充分利用多核服务器的硬件资源,理论上处理13M行数据的速度会远快于12并行度;
TABLE ACCESS STORAGE FULL借助存储层优化(如存储级并行扫描、数据预取),能减少数据库层的压力,提升整体扫描效率;- %CPU占比高是多核并行执行的正常表现,说明更多CPU资源被有效利用,而非资源浪费。
内容的提问来源于stack exchange,提问作者Adnan
相关产品推荐
相关产品推荐

