在 Oracle Exadata (11gR2) 上,我们有一个相对强大的数据库。
我们注意到,通过在 Oracle Enterprise Manager (OEM) 中的观察,由于查询是串行执行的,性能很差。为了解决这个问题,所有表、物化视图和索引都进行了更改以利用并行性。例如:
ALTER TABLE SOME_TABLE PARALLEL (DEGREE DEFAULT INSTANCES DEFAULT);
Run Code Online (Sandbox Code Playgroud)
系统已更改为打开并行化:
ALTER SYSTEM SET PARALLEL_DEGREE_POLICY = 'AUTO';
Run Code Online (Sandbox Code Playgroud)
这导致了更好的性能,但我们偶尔会在 OEM 中观察到单个查询会占用 96(所有可用资源)的 DOP。这导致后续查询被降级为 DOP 1(无并行化)。导致性能不佳,直到占用查询完成。
为了解决这个问题,我们尝试通过以下方式限制可用于任何查询的 DOP:
ALTER SYSTEM SET PARALLEL_DEGREE_LIMIT = 24;
Run Code Online (Sandbox Code Playgroud)
这没有效果。我们经常观察到使用超过限制的查询(通常为 48 或 96,但没有实际模式)。
我们如何防止任何单个查询占用所有可用资源?