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

来源:这里教程网 时间:2026-03-03 18:20:25 作者:

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

相关推荐