下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

教你们用Sybase Adaptive Server Enterprise 15的数据分区(1)

作者:课课家     来源: www.kokojia.com点击数:841发布时间: 2015-11-14 23:02:10

标签:

今天小编带着大家来看看这个问题。

索引
VLDBsql2000数据库 (超大型数据库)的管理和性能挑战
ASE15中的数据分区(Partition)
为何使用数据分区?
数据可用性
使用数据分区提高查询功能
有效的并行查询处理
如何恰当地使用数据分区
结论
VLDB(超大型数据库)的管理和性能挑战
数据库的容量正在迅速扩充,我们可以想象得出这种增长速度。与此同时,业务需要更多的数据来进行决策支持和分析。这两个因素促成了VLDB (超大型数据库,very large databases)的发展。
什么是VLDB?即使针对同一个数据库,对于一个企业来说可能是VLDB,但对于另外一个企业来说可能只是一个普通的数据库。所以定义VLDB最好不要仅看它的容量,还要看在它的运行环境中将要面临哪些挑战。
首先,VLDB的维护和管理任务很难在制定安排的时间内完成。这会影响应用的性能和数据可用性。
其次,VLDB处理查询操作时,将会耗费大量的时间和资源来获取所需的数据,这将影响查询的性能。一个需要遍历整张表或索引的查询将使性能降低到无法容忍的地步。这对于决策支持系统(DSS),如数据仓库系统是严峻的考验。那些DSS和OLTP并存的ODSS环境就更困难了。
第三,VLDB将影响在ASE上的运行应用的成本和开销。
为了解决这些VLDB面临的挑战,ASE15的数据分区(Partition)功能将有效地减少管理所需的时间并提高应用的性能。数据分区功能将有助于满足任何容量的ASE数据库在管理、维护和性能上的要求。
ASE15中的数据分区?
数据分区可以将大的表或者索引分割成小的数据片,并存放在不同的存储单元中。数据库管理员可以在底层处理数据的存储、维护和管理工作。
“segment(段)”在ASE中被定义为设备的单元。它常常被用来存储特定类型数据,例如:系统数据、日志数据和用户数据。分区可以存贮在不同的段上或者不同的分区存储在同一个段上。类似的,一个或多个段可以存放在任何的逻辑或物理设备上,这样可以分离I/O来提高性能和数据的可用性。
在一个分区上的表或索引数据可以以不同于其他分区的方式来管理和操作。查询只须访问那些包含所需数据的分区。
数据库管理员可以更快捷地管理和维护这些较小的分区,而不是像以前那样不得不面对巨型的表和索引。一些日常的任务甚至可以在多个分区上并行地执行,这不但可以节省时间,还可以在分区上自动运行。当数据增长时,只需添加新的分区即可。
在ASE15中提供了四种数据分区的方式,我们会在后面一一介绍并详细讨论。第一种方式称之为round-robin分区,是在ASE15之前版本中唯一提供的分区方式。这种方式是在分区上顺序排列数据,没有办法决定数据在分区上的存储位置,并且查询操作会涉及所有的分区。
其他的三种分区方式称之为“语义数据分区”方式,因为可以通过这些方式确定数据的分区存放位置。
在ASE15中将被广泛使用的方式是范围分区(Range Partitioning)方式。利用这种分区方式,数据库原理与应用数据库管理员可以通过数据的范围确定数据在分区上的存储位置。
下一种方式是列表分区(List Partitioning)方式,可以将不同的数据分割存放在不同的分区上。
第三种语义分区方式是哈希分区(Hash Partitioning)方式。在这种方式下数据是根据特定的列和内部哈希运算法则来确定数据的存放方式。
为何使用数据分区?
通过ASE15中的数据分区技术,企业可以降低ASE的维护和使用成本,无论它是大是小。而且它还可以提高运行在ASE之上的应用的性能,以及数据的可用性。
利用数据分区技术降低管理和维护数据库的开销
对于数据库管理员来说,最耗费时间和精力的事情莫过于管理和维护不同大小数据库。数据库有可能会膨胀到没有充足的时间运行所有必要的维护工作,比如无法完成完整的备份。这将会置数据于不安全的状态中,而且还会直接对应用产生影响。
ASE15的数据分区可以更加高效地使用各种功能,这意味着DBA用更少的时间和资源维护和管理大型数据库。

上面的图表显示了在表上发生的一系列操作,包括一个正在运行的复杂的DSS类型查询操作、一个OLTP进程、同时BCP进程正在加载数据、以及一个统计更新操作来更新统计值。在左面的未分区的表中,正在运行的操作将足以使正常的业务操作缓慢到无法接受的地步甚至是停顿下来。而在右边的表,数据已经被分区,每个操作都运行在不同的分区上,它们之间互不影响。

通过将表和索引分割成较小的数据片,数据库管理员可以在分区级别运行操作。这将加快操作运行的速度,使得运行在其它分区上的其它应用工作得更高效。这样也可以保证应用能访问到表中的所有数据。通过利用ASE15中的数据分区技术,在VLDB环境中应用运行的可扩展性得以大大地提高。
通过对表和索引执行分区操作,数据库管理员可以事先规划维护任务并且对分区进行循环操作,或者在多分区上并行执行任务。如果在某一时间,在给定的分区上无法进行维护操作,那么可以跳过这个分区,稍后再回到这个分区继续执行操作。维护任务表同时可以和ASE的Job Scheduler功能配合使用,这样可以让数据库管理员有更多的时间处理其他重要的操作。
两个最常用也是最耗资源和时间的操作是——update statistics 和 reorg 操作。这两个操作都需要定期在表和索引上运行,这样才能确保查询操作的性能。
update statistics操作收集表、索引和列数据分布的信息。这些数据将被查询处理引擎用来确定访问所需数据的最优途径。reorg rebuild 操作负责收集表和索引中的剩余空间。这个操作对于空间管理和提高查询性能是非常重要的。有些表的膨胀速度非常快,以至于如果要想在计划的时间内执行完这两种重要的操作,就必须要停止正常的业务操作。
例如,许多数据库中都有date/time 列用于记录交易发生的时间。时刻保持这些列的分布统计的有效性将确保查询操作的高效率。但是对于一张未分区的表和索引进行update statistics操作时,整列的数据将被读取。如果是一张巨型表,对其性能和数据可用性的影响无疑是巨大的。
在分区的表和索引上执行同样的操作将大幅度减少对整体性能和数据可用性的影响到最低限度。这是因为只需要从保存最近date/time值的分区上收集统计数据即可。reorg亦是如此。当其运行在分区的表和索引上时,操作只会涉及指定的分区,而表中的其它数据和索引都可以被其它操作所访问。
还有一个重要的但也需要很大时间开销的操作是运行在表和索引上的诊断操作,例如:检验数据一致性的DBCC操作。在分区技术基础上运行这些关键的诊断操作将极大地提高运行效率。
其它的对时间和资源要求较高的操作还有在表上执行存档或删除大量无用数据。BCP(批量拷贝程序)可以运行在单一的分区上,写入或导出表中的数据,但不影响那些对该表其它数据访问的应用,只有那些通过BCP操作导入或导出数据的分区会受到影响。有了分区,就可以更方便地管理那些过时的数据。BCP操作同样也可以在不同的分区上并行地执行。
truncate table.. partition 命令用于执行大量的数据删除。通常可以利用BCP或其它备份方式处理数据。以往截断操作会花费大量的时间删除表上的所有数据。然而现在,数据可以在单个分区上进行删除。
数据可用性
应用数据的可用性对于任何业务都是至关重要的。如果应用无法获得所需的数据,工作将无法进行下去。
正如我们前面所示,对表和索引进行分区是为了将它们分割成较小的数据片,这样在任何数据片上的操作和其它数据片上的操作都互不相干,MSBI系列02应用可以在更多的时间里,访问更多的数据。下面的图显示了索引分区的过程:

Reorg操作在分区2上运行的时候,在分区3上正在更新统计数据。如果对于一个未分区的索引,任何一个这样的操作都会独占索引,而导致其它操作排队等待。然而在分区后,两个操作可以并行执行,同时在分区1上的数据还可以被其它应用访问。
同样的,如果操作更改了数据,索引仅仅会在一个分区上更新而不会影响其它的操作。
在ODSS环境中,数据库管理员可以采用分区,使得OLTP操作在一个分区上运行,同时DSS操作在另外的分区上运行。由于分区使得数据的可用性得到提高,使用这些数据的应用的可靠性也得到了提高。
同时由于使用分区技术将数据存储在不同的物理设备上,这也可以提高数据的可用性。如果一块设备坏了,其他的分区还可以继续被使用。
使用数据分区提高查询功能
正如以上所述,数据分区不仅可以减少数据库维护和管理任务的时间,更重要的是可以提高应用操作的性能。正像我们所见到的,将表或索引分割成较小的数据片可以大幅提高在这些数据片上的操作速度。
一个仅仅需要扫描部分表或索引的查询会比遍历整个数据库对象的查询快得多。尤其在针对大表Join查询时更是如此。分区的表和索引会处理极少的关联数据。
ASE 15的查询处理引擎将不涉及未包含相关数据的分区。在下面的图示中,一个查询搜索cust_ptn字段中所有大于等于30000的行。因为该表已经基于范围对cust_ptn列进行了分区,借助于前面提到过的“partition elimination”技术,只有分区2和3的数据将被读取。这种处理显著的提高ASE15性能。读取更少的数据,查询的速度就更快。


如前所示,索引,就像表一样,也可以被分区。对索引进行分区的好处不胜枚举,您可以在下列情况**会到这种好处:一,多个查询要同时使用索引来访问不同分区上的数据。二,当一个操作在一个分区上的索引上运行时,查询还可以访问那些在其它分区上该索引的其余部分。三,诸如更新、插入和删除的操作可以改变索引值,这个写操作将只会在由于数据改变而影响的那部分索引上执行。下面的图示将帮您理解分区索引如何使您获益。

 

有两种索引分区的方式——全局和本地索引。全局索引在一个分区中保存其整个结构。当在分区表上运行的查询需要访问全局索引的时候,可以让指针从该表的索引上直接指向该表的数据分区。索引结构覆盖了该表的所有数据分区。下面的图表有助于了解全局索引是如何被规划的。

第二种索引是本地索引。该索引结构被分割成片并存储在每一个分区中。因为分区的索引必须基于同一数据分区的列顺序,本地索引有点类似于指向相关数据分区的较小的独立索引。如果查询仅仅访问表中的一部分数据,那么只需读取本地索引。这将大大提高并发度因为这可以允许不同的查询同时访问同一索引的不同索引片。运行在一个数据分区上的查询将不会影响访问另一分区的查询。其结果是减少了堵塞、I/O开销,换来的是更高的性能和数据可用性。

上面的图示显示了一个分区的表,包含一个分区的非聚簇索引。显然在搜索所需数据时I/O操作将大为减少。当查询中还包含有限制条件时,显然会访问更少的数据。在被分区的表(非“round-robin”分区)上的聚簇索引将是本地索引。
另一个益处是使用分区索引时,其大小取决于对应的表的分区上数据的行数。更小的索引会带来更短的扫描时间。
有效的并行查询处理
ASE15引进了新的并行查询处理功能可以显著提高查询性能。结合了并行技术和分区技术的ASE15性能比以往有了大幅度的提高。
ASE15现在同时支持纵向和横向并行机制。纵向并行技术可以同时利用多CPU处理查询中的多个并行操作。横向并行技术可以允许一个查询的多个实例运行在位于不同分区或磁盘设备上的不同数据上。这就是分区如何帮助提高性能的体现。利用分区的表和索引,并行操作可以将同一查询分割成查询片(实例)并且可以同时运行在不同的分区上,为整个查询操作收集所需的数据。下面这张图显示了查询如何从垂直并行机制中受益。

并行查询操作和分区对于混合工作负载或ODSS环境是非常有效的,因为通常情况下都需要读取大量的数据。当应用运行在这样的环境中时,性能是关键,同时不能顾此失彼——操作之间相互堵塞。

如何恰当地使用数据分区
我们已经看到,ASE15的分区可以让数据库管理员更高效地执行必要的维护和管理任务,从而显著降低VLDB在ASE上运行的成本。我们也同样看到了分区技术如何极大地提高应用的性能,尤其是在ODSS环境中。
对表和索引进行分区非常简单。表可以在创建时或者以后随时进行更新。一旦分区后,写入表中的数据将按照设定的分区规则写盘,无论是插入、删除还是BCP导入均不例外。索引同样可以在创建时被分区,但一个已有的索引无法被分区。这需要删除索引然后利用分区进行索引重建。
数据库管理员可以在以下情况考虑使用前面提到过的三种语义分区方式:
范围分区——数据库管理员可以基于关键列中的数据范围指定数据在各分区上的存储位置。例如,数值1,2,3,4存储在分区1中,而5,6,7,8存储在分区2中,诸如此类。下面是利用范围分区方式基于date/time 列创建表的语法示例:

create table customer (ord_date datetime not null,
name varchar(20) not null,
address varchar(40) not null, other columns …)
partition by range (ord_date)
(ord_date1 values <= (3/31/05) on segment1,
ord_date2 values <= (6/30/05) on segment2,
ord_date3 values <= (9/30/05) on segment3
ord_date4 values <= (12/31/05) on segment4)


范围分区尤其对于那些持续更新、插入和删除,且某些字段中包含连续数据,例如用户号或订单/交易日期的表尤为有效。这样的表需要数据库管理员额外的维护和管理。这类表常用于决策支持系统,最适合使用范围分区。当交易仅仅发生在一个分区上的时候,数据库管理操作和DSS查询还可以访问其它分区。与此同时,数据库管理员必须保证交易活动的分区的分布统计值时刻更新,这样查询处理引擎就可以使用新的数据,这一点是非常重要的。正像我们所见的,当操作仅仅运行在一个单一分区上时,更新统计的时间是非常短的。
列表分区—— 列表分区类似于范围分区,但这里实际被写入分区的数据是确定的。前文中的例子就是在包含有全球各地区数据的“地区”关键字段上建立列表分区。该列数据有没有排序,以及数据在分区上存储的顺序,都不影响列表分区存储数据。下面是利用列表分区方式创建表的语法示例:

create table nation (nationkey integer not null,name char(25) not null,
regionkey varchar(30) not null,comment varchar(152) not null)
on segment 1
partition by list (n_regionkey)
(region1 values ('Americas'),
region2 values ('Asia'),
region3 values ('Europe'),
region4 values ('Australia', 'Other') )


哈希分区——这种数据分区方式是根据在指定列上利用内部哈希算法计算的结果来决定数据存储到哪一个分区。这里不需要指定列表或数值的范围。如果列键包含唯一数据,或者数据重复度极小,哈希分区将在其所有分区上平衡数据存储。然而,如果有大量重复数值,分区将会“倾斜”,一些分区上的数据可能会比其它分区多。
哈希分区在要为大表建立很多分区,或者关键列中的数据没有排序的情况下尤为有用。它同时还可以配合查询处理引擎使得查询工作更为有效。

create table lineitem ( l_orderkey integer not null, l_partkey integer not null,
l_suppkey integer not null, l_linenumber integer not null, l_quantity double not
null, l_extendedprice double not null, other columns …)
partition by hash (l_orderkey, l_linenumber)
(litem_hash1 on segment1,
litem_hash2 on segment2,
litem_hash3 on segment3,
litem_hash4 on segment4 )


结论
作为ASE15一系列新特性中最受人瞩目的焦点,数据分区使得VLDB的管理和维护工作更加简易,同时显著提高了ASE的性能。更简单而有效的维护和管理降低了在ASE上运行VLDB的成本,同时在混合工作负载环境中的应用性能也得到了极大提升。更多的课程我们的官网都有哦

赞(118)
踩(2)
分享到:
华为认证网络工程师 HCIE直播课视频教程