您当前位置:主页 > 资讯攻略 >
来源:未知
2021-01-30 12:40:25 浏览: 分类:资讯攻略

利用Oracle分区表来减少磁盘I/O冲突

现在某企业的oracle数据库中有一个产品信息表。该表中有500多万条记录。其中成品信息约30万条。记录了大约300万个零件。剩下的就是包装信息了。数据库工程师通过相关分析和监控,用户在访问这种表单时会产生严重的等待现象。这主要是因为该表中的数据存储在同一个硬盘上。当不同的用户并发访问这个表时,他们会因为磁盘I/O性能的瓶颈而等待。如下图所示。读者遇到这种情况,如何采取措施优化表现?这里作者的建议是使用Oracle分区表减少磁盘I/O冲突,提高数据库性能。

  利用Oracle分区表来减少磁盘I/O冲突

一、分区表的原理和优点。

分区表对于提高大表的访问性能会有很大的帮助。如上图所示,产品信息表可以按照产品类别分为三个部分,即成品信息、零件信息和原材料信息。然后,这三个部分对应一个单独的分区,分别存放在不同的硬盘上。此时,当不同的用户访问不同的信息时,可以有效地减少磁盘的I/O冲突。即使同一个用户需要同时访问这三部分信息,比如产品的物料清单,由于是从不同的硬盘读取数据,显然可以减少磁盘I/O冲突。

因此,分区的基本原理是通过访问表或索引的一小部分而不是整个表和索引来提高数据库的性能。当然,这样做有一个前提,就是一个表的不同分区需要放在不同的磁盘上,此时磁盘的整体吞吐量会翻倍。

分区不仅可以提高用户访问的性能,还可以提高备份的灵活性。和上面的例子一样,产品信息根据其类别被划分为不同的区域,它们被保存在不同的硬盘上。此时,您可以对分区进行单独的备份。最近由于国家环保的要求,对原材料的信息进行了大规模的调整。此时,可以单独备份原材料信息所在的分区数据。这不仅可以减少备份时间,还可以减少备份作业期间的I/O冲突。

一般来说,分区表的好处是分区数据需要放在不同的磁盘上。如果不这样做,通常很难通过分区来减少磁盘I/O。所以为了尽量减少大型表的磁盘I/O(尤其是频繁的并发访问),此时应该将表分成多个分区。然后将这些分区存储在不同的磁盘上。

第二,分区表模式的选择。

那么如何对表进行分区呢?这是另一个关键问题。根据经验,笔者认为分区表模式的选择对于取得较好的效果至关重要。也就是说按照什么内容对表进行分区。有时候,同样的数据,不同的分区表模式会有不同的效果。在接下来的内容中,笔者将结合企业的实际应用场景,举例说明分区表模式的选择。希望这些内容能帮助读者更好地维护分区表。

第一种模式:按行分区。

在上面的例子中,作者谈到了拥有一个产品信息表,它包括成品信息、零件信息和原材料信息。当这个表中有很多记录,并且用户访问这个表时存在严重的I/O冲突时,可以根据行记录进行分区。例如,在“产品信息”表中有一个“产品类别”字段。数据库管理员可以根据这个字段划分基准。具体的划分方法也比较简单。创建表时,在产品类别字段后添加Partion关键字,然后根据字段内容指定分区。这个操作比较简单,我就不多展开了。这里我需要强调的是,数据必须存储在不同的磁盘上,也就是分区后不同的表空之间。否则无法提高磁盘I/O。

第二种模式:按列分区。

在实际工作中,有这样的情况。如果你现在有员工信息表。该表单不仅包含员工的基本信息,如身份证号、姓名、籍贯等。,还包括照片信息,如员工身份证或照片的复印件。众所周知,图片信息的数据流量非常大。有可能一张身份证复印件的数据流相当于几千条职工基本信息。此外,用户在访问员工信息表单时,并不总是需要检查身份证复印件。很多时候他们可能只是查员工的联系方式或者地址之类的。此外,一般身份证复印件等照片不会随意更改,而员工的联系方式或这个地址会经常更改。此时,如果员工信息需要更改,但不需要更改的员工身份证复印件也会被找出来,这显然会加剧磁盘的I/O冲突。

当企业中存在这种情况时,也可以对该表进行分区。此时,分区不是对行进行分区,而是对列进行分区。比如可以把身份证复印件信息或者照片信息划分到一个独立的分区,保存在另一个硬盘上。这样做可以带来以下好处。

第一,在访问数据时,可以指定是否需要查询身份证信息所在的分区。查询员工信息时,可以在语句中指定从哪个分区查询信息。当用户通常只查询员工的联系方式或地址时,不需要访问身份证复印件所在的分区。例如,您可以使用以下语句进行查询:

select * from ad _ user partition(ui info)& ndash;假设员工的基本信息存储在分区Unifo中。

在查询语句中,Partition关键字可用于指定查询哪个分区。如果未指定,系统将查询与该表对应的所有分区。如果指定,将只访问特定分区的内容。上面的语句只读取Uinfo分区中的信息。而不是看身份证复印件等相关信息。这样可以减少磁盘的I/O冲突,减少不必要的数据流,提高查询性能。

二是方便数据的备份。按照使用习惯,一般身份证复印件或员工照片等信息不会有太大变化。因此,这些数据的备份频率可以更低。而且这些信息的容量往往很大。如果频繁备份,显然会增加磁盘的I/O负担。对于员工的联系方式或地址,更改的频率会高很多。这些信息需要经常备份。大型表的分区管理的另一个巨大优势是每个分区中的数据可以独立备份。为此身份证复印件所在的分区可以单独备份,比如一个月或者有大变动的时候。其他信息可以每天备份。这可以在性能和安全性之间取得平衡。一般来说,在访问表时,如果需要频繁访问的信息只是几个特定的列,而不需要访问的信息容量较大,那么可以采用按列分区的方式。在这种情况下,用户可以避免在查看一个分区的内容时访问其他分区。同时,一个分区的数据可以独立备份,不会干扰其他分区。

第三种分区方式:哈希分区。

有时一个表可能没有明显的分区特征,即不满足上述条件。但是表中有很多记录。在这种情况下,分区也是必要的。但此时,我们可以对系统进行随机分区。这种分区模式称为哈希分区。通常为了提高哈希分区的效果,即得到更均匀的分布,往往可以指定2的n次方为哈希分区的个数。一般来说,n越大,分布越均匀。

即当数据库管理员不知道如何对表进行分区,但确实需要分区时,可以使用哈希分区。但是,作者需要提醒的是,哈希分区有一个很大的局限性。使用哈希分区时,只支持本地索引,不支持其他索引方式。这需要特别注意。实际上,我们不能因为哈希分区而减少或取消索引。这往往得不偿失,也不可行。

关键词:甲骨文

优侠库网站每天提供最新最热门的安卓手机软件、游戏下载、分享热门手游资讯攻略教程、手机软件教程步骤,专注安卓手机游戏软件下载。

本文链接:http://www.123down.cn/gonglue/227341.html

攻略资讯
安卓软件