一台数据库服务器报 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;
