文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Oracle Hash分区的使用总结

2024-04-02 19:55

关注


   近期项目需要用到分区表,但是分区键值有无法确定,因此只能使用hash分区(range、list分区以前常用,比hash分区简单),查询了文档,发现上面说的和实际使用时有点差距,就专门做实验验证下。


官方文档(11g、12c的解释都是一样的):

docs.oracle.com/database/121/CNCPT/schemaob.htm

Hash Partitioning

  In hash partitioning, the database maps rows to partitions based on a hashing algorithm that the database applies to the user-specified partitioning key. The destination of a row is determined by the internal hash function applied to the row by the database. The hashing algorithm is designed to distribute rows evenly across devices so that each partition contains about the same number of rows.

   Hash分区时,数据库根据hash算法映射行到用户指定的分区键中。行的存放目的地由数据库的内部hash函数来决定。hash算法的目的是在设备上均匀分布行,以便每个分区包含相同数量的行。


建表如下:

create table t_test_part(

  id        number,

  pro_num   varchar2(40), 

  app_type  varchar2(40),

  ...............

)

partition by hash(pro_num)

(

 partition part_01,

 partition part_02,

 partition part_03,

 partition part_04,

 partition part_05,

 partition part_06,

 partition part_07,

 partition part_08

)

tablespace DDS_DATA

  pctfree  10

  initrans 2

  maxtrans 255

storage

(

  initial 64K

  next    64k

  minextents 1

  maxextents unlimited

)

;

加入1000万数据,进行各种DML操作,验证数据的存储和各种性能。


实际结论见下:

1. 数据随机插入

   Hash分区一般是在分区键值无法确定的情况下,使用的一种分区策略,Oracle按照hash 算法把数据插入用户指定的分区键中,它是随机的插入到某个区中,不受人为的干预。


2. 分区大小

   分区的初始大小受建表初始化参数的影响(即initial、next的影响),不指定时受建库时表空间参数的影响。实际分配数据后的大小,受分区字段值的影响。分区字段值相同时,所有数据只能插入到一个分区;分区字段值不同时,数据随机插入不同的分区。

    根据实验的结果并不是平均分配,也不是每个区都分配。如上面的表,最少的一个区只有0.1M,最大的一个区是33M,严重的不均匀。也许随着时间和数据量的不断增加,数据会趋于均衡,估计实验是很难验证出来的。


3.  Local和Global索引

   分区索引分为Local和Global索引,Local索引和表分区是一一对应的,Global索引又分为Global非分区索引和Global分区索引。Global非分区索引,可以与表分区对应,也可以不对应;但是当Global分区索引与表分区的表空间对应时,则Global分区索引就是个Local索引。


4. 分区定值查询时,Local索引与Global索引没有任何区别,但是范围查询时,Global索引的partition start 和 partition stop是相同的;Local索引的partition start 和 partition stop 就不同了,上面的那个表是从1到8(和范围的大小有关)。根据这个情况,如果实际应用中定值查询多,就用Local索引了,反之,则用Global索引。如果根本没法分,那就要权衡了。


5. 分区与不分区的区别

   就我的测试用例来说,两者没有本质区别,时间都相当。 15G的数据,分区的SQL语句COST是不分区时SQL语句COST的几千倍,不分区的COST还更低。但是两者的执行时间没有任何区别。在实际使用分区时,性能只是要考虑的一个方面,易管理性、可用性方面分区还是有很大优势的,不能仅看一面而忽略了整体。

  如:

  1).一个分区的丢失或损坏不会影响其余的分区,损坏的分区可以单独恢复。

  2).分区把一个大段分为更多的小片段,可以降低争用。



阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯