问题描述
嗨,
我们有32个分区的哈希分区表,表有2500万条记录。在这种情况下,大多数插入的记录将进入一个分区,1700万将进入一个分区。有没有办法可以控制这一点,以便行分布在分区之间?。可以进行任何形式的表重组以重新分配行吗?
谢谢,
吉里什
我们有32个分区的哈希分区表,表有2500万条记录。在这种情况下,大多数插入的记录将进入一个分区,1700万将进入一个分区。有没有办法可以控制这一点,以便行分布在分区之间?。可以进行任何形式的表重组以重新分配行吗?
谢谢,
吉里什
专家解答
这听起来像是你选择了一个不合适的键来散列。
通常,哈希分区将被均匀填充,因为哈希键将具有许多不同的值。
例如 (在这种情况下,100,000不同行的8个哈希值)
但是,如果哈希键源不是这样的,例如,没有很多不同的值,那么您可能会出现偏斜,例如
通常,哈希分区将被均匀填充,因为哈希键将具有许多不同的值。
例如 (在这种情况下,100,000不同行的8个哈希值)
SQL> select ora_hash(rownum,7), count(*) 2 from dual 3 connect by level <= 100000 4 group by ora_hash(rownum,7) 5 order by 1; ORA_HASH(ROWNUM,7) COUNT(*) ------------------ ---------- 0 12603 1 12575 2 12581 3 12508 4 12342 5 12381 6 12628 7 12382复制
但是,如果哈希键源不是这样的,例如,没有很多不同的值,那么您可能会出现偏斜,例如
SQL> select ora_hash(mod(rownum,6),7), count(*) 2 from dual 3 connect by level <= 100000 4 group by ora_hash(mod(rownum,6),7) 5 order by 1; ORA_HASH(MOD(ROWNUM,6),7) COUNT(*) ------------------------- ---------- 2 16666 3 33334 5 16666 6 16667 7 16667复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。