收集表的统计信息时并发过高


一台数据库服务器报 cpu loader 过高,查看当前等待事件,发现对应sql:


/* SQL Analyze(1) */
select /*+  full(t)    parallel(t,64) parallel_index(t,64) dbms_stats cursor_sharing_exact use_weak_name_resl dynamic_sampling(0) no_monitoring no_substrb_pad  */
 to_char(count("ID")),

这是收集表统计信息的sql ,并发 64 ,有点过高


查看表的并发度 为default  

10:32:41 sys@Q9JSHS>select TABLE_NAME,DEGREE from dba_tables where table_name='GE_BALANCE_DETAIL';

TABLE_NAME                     DEGREE
------------------------------ --------------------
GE_BALANCE_DETAIL                 DEFAULT

12:56:14 sys@Q9JSHS>show parameter parallel_threads_per_cpu   

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
parallel_threads_per_cpu             integer     2
12:56:28 sys@Q9JSHS>show parameter cpu_count

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
cpu_count                            integer     32

那么该表的并发为 parallel_threads_per_cpu  * cpu_count * rac 节点数,因为是单实例 ,所以得到并发度为64 ,和我们看到的结果吻合



如果我们手动设置表的并发度,那么表的并发由我们设置的并发值控制。

alter table USR_JOBS.GE_UTILS_BILLSCAN_LOG parallel 2;


你可能感兴趣的:(oracle)