请帮忙看看,非倾斜列为什么会被自动收集柱状图?

发布于 2022-06-25 19:36:44 字数 2762 浏览 434 评论 9

今天用DBMS_STATS.GATHER_TABLE_STATS中method_opt => 'FOR ALL INDEXED COLUMNS SIZE SKEWONLY'来自动收集,倾斜索引列柱状图,发现非倾斜列也被收集了,请问这是为什么?

下面过程中隐藏一些真实表名,列名.

SQL> select * from v$version;

BANNER

----------------------------------------------------------------

Oracle9i Enterprise Edition Release 9.2.0.7.0 - 64bit Production

PL/SQL Release 9.2.0.7.0 - Production

CORE        9.2.0.7.0        Production

TNS for IBM/AIX RISC System/6000: Version 9.2.0.7.0 - Production

NLSRTL Version 9.2.0.7.0 - Production

Executed in 0.031 seconds

SQL> select count(*) from A;

  COUNT(*)

----------

   1789660

Executed in 0.016 seconds

SQL> exec dbms_stats.gather_table_stats(ownname => 'MYDB',tabname => 'A',method_opt => 'FOR ALL INDEXED COLUMNS SIZE SKEWONLY',degree => 4,cascade => TRUE);

PL/SQL procedure successfully completed

Executed in 336.563 seconds

SQL> SELECT COUNT(*), column_name

  2    FROM dba_tab_histograms

  3   WHERE table_name = 'A'

  4     AND column_name = 'ANAME'

  5   GROUP BY column_name

  6   ORDER BY column_name DESC

  7  /

  COUNT(*) COLUMN_NAME

---------- --------------------------------------------------------------------------------

       201 ANAME

Executed in 0.078 seconds

--ANAME被收集了柱状图,还用了200个桶

SQL> SELECT num_distinct

  2    FROM dba_tab_col_statistics

  3   WHERE table_name = 'A'

  4     AND column_name = 'ANAME'

  5  /

NUM_DISTINCT

------------

     1789659

--A表一共1789660行,ANAME列有1789659各不同的值

Executed in 0.031 seconds

SQL> SELECT *

  2    FROM (SELECT COUNT(*), ANAME

  3            FROM A

  4           GROUP BY ANAME

  5           ORDER BY COUNT(*) DESC)

  6   WHERE rownum < 5

  7  /

  COUNT(*) ANAME

---------- ------------------------------

         2 CNCB5+J005DN

         1 123121

         1 1231214

         1 061024-3

Executed in 11.078 seconds

--ANAME列只有一个重复值,这也能算是倾斜?

请问当我使用for indexed columns size skewonly来收集时,oracle如何判断列是否倾斜,为啥我这个明明不倾斜的列会被收集柱状图?

谢谢~

[ 本帖最后由 zergduan 于 2008-11-18 16:53 编辑 ]
SIZE, 索引, select, from, version

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

別甾虛僞 2022-06-30 15:51:13

谢谢,明白了~

倾听心声的旋律 2022-06-30 15:49:35

oracle在界定skew的时候还不是用重复值来界定的。

我用一个唯一字段的test表测试的时候,如果这些值不是连续的,比如1--200,1000-3000,10000--12000。。

采用样'FOR ALL INDEXED COLUMNS SIZE SKEWONLY'方式仍然会收集柱状图。

如果是连续的就不会收集了。

我很坚强 2022-06-30 15:40:16

关注中.....

來不及說愛妳 2022-06-30 14:28:57

我的说法确实有问题,刚刚测试的时候让字段取唯一值,以为这样就不是倾斜的呵呵,其实这是最大的倾斜。。。

oracle应该有一个算法来控制什么是倾斜,什么是不倾斜

毁梦 2022-06-30 13:34:02

不是的

请看一下我这里的结果

SQL> SELECT COUNT(*), column_name

  2    FROM dba_tab_histograms

  3   WHERE table_name = 'A'

  4   GROUP BY column_name

  5   ORDER BY COUNT(*) DESC

  6  /

  COUNT(*) COLUMN_NAME

---------- --------------------------------------------------------------------------------

       201 ANAME

       201 ALASTACTIVITYDATE

       197 AID

        83 AODUCTID

        57 ACTID

         4 ATYPE

         4 ALEVELID

        2 AID

         2 ASTATUSID

         2 ASTATUS

         2 PARENTAID

         2 ISSUEDTOCAID

12 rows selected

红色的部分,应该是没有柱状图的~但这些列也是在索引上的

嘴硬脾气大 2022-06-30 10:32:56

再测试了一下,10g中跟你的情况也是一样'FOR ALL INDEXED COLUMNS SIZE SKEWONLY'不分倾斜与否,只要字段上面有索引,就收集柱状图

悲歌长辞 2022-06-28 16:11:53

9i 的dba_tab_col_statistics 里没有HISTOGRAM列,只能从dba_tab_histograms中的endpoint_number来看是否有柱状图~

一身软味 2022-06-27 06:03:19

SQL> create index ind_test on test(time);

索引已创建。

SQL> select column_name,histogram from dba_tab_col_statistics where table_name='

TEST';

COLUMN_NAME                    HISTOGRAM

------------------------------ ---------------

TIME                           NONE

STATUS                         NONE

SQL> exec dbms_stats.gather_table_stats(ownname => 'SYS',tabname => 'TEST',metho

d_opt => 'FOR ALL INDEXED COLUMNS SIZE SKEWONLY',degree => 4,cascade => TRUE);

PL/SQL 过程已成功完成。

SQL> select column_name,histogram from dba_tab_col_statistics where table_name='

TEST';

COLUMN_NAME                    HISTOGRAM

------------------------------ ---------------

TIME                           HEIGHT BALANCED

STATUS                         NONE

SQL> select * from v$version;

BANNER

----------------------------------------------------------------

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod

PL/SQL Release 10.2.0.1.0 - Production

CORE    10.2.0.1.0      Production

TNS for 32-bit Windows: Version 10.2.0.1.0 - Production

NLSRTL Version 10.2.0.1.0 - Production

宁愿没拥抱 2022-06-26 15:48:36

顶一下~

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文