前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >运营型数据库系列之性能概述

运营型数据库系列之性能概述

作者头像
大数据杂货铺
发布2020-07-16 15:17:02
5740
发布2020-07-16 15:17:02
举报
文章被收录于专栏:大数据杂货铺大数据杂货铺

这篇博客文章是CDP中Cloudera的运营数据库(OpDB)系列文章的一部分。每篇文章都会详细介绍新功能。从该系列的开头开始,请参阅《CDP中的运营数据库》,《运营数据库系列之可访问性》,《运营数据库系列之管理篇》,《运营数据库系列之高可用性》,《运营数据库系列之数据完整性》,《运营数据库系列之NoSQL和相关功能》,《运营数据库系列之应用支持》。

本文概述了Cloudera的运营型数据库(OpDB)性能优化技术。Cloudera的运营型数据库可以支持高达每张表185K /秒和每张表440K /秒的高速事务。平均而言,每个节点记录的事务处理速度约为100K-300K /秒。

本文概述了如何在Cloudera Data Platform(CDP)公共云或数据中心版中优化OpDB部署。此处提供的值和参数是基于典型部署的建议,您可能必须配置这些参数以适合您的要求。

查询优化

查询优化器确定了运行查询的最有效方法。查询优化可以帮助您减少运行查询所需的硬件资源,还可以加快查询响应时间。Cloudera的运营型数据库为您提供了各种工具,例如计划分析器,可以最佳地利用您的计算资源。

Cloudera的OpDB提供了各种基于成本和基于规则的优化器。您可以根据用例使用不同的优化器。OpDB主要用于联机事务处理(OLTP)用例,而OpDB中使用Apache Phoenix作为SQL引擎。但是,您也可以将Hive和Impala用于在线分析处理(OLAP)用例。

OLTP用例

在OLTP用例时,可以将Apache Phoenix用作SQL引擎。Apache Phoenix使用EXPLAIN命令提供了一个计划分析器和预绑定工具,我们将在本博客文章的后面进行讨论。

将Apache Phoenix用作SQL引擎时,可以使用UPDATE STATISTICS命令检查成本统计信息,以查看在表上收集的统计信息。此命令收集每个列族的每个区域的一组键,这些键彼此之间的字节间隔相等。这些收集的键称为路标,它们充当提示/指南,以改善给定目标区域上查询的并行化。

包括Apache Phoenix UPDATE STATISTICS在内的所有命令都是可编写脚本的,因此可以插入您选择的计划中。但是,UPDATE STATISTICS在主要压缩和区域拆分期间自动运行,因此不需要手动运行(或计划)此命令。节流配额功能(也称为RPC限制配额)通常用于管理RPC队列的长度以及网络带宽利用率。最好用于区分时间敏感型应用程序的优先级,以确保满足延迟SLA。

OLAP用例

您可以使用Apache Hive或Apache Impala来查询OLAP用例的数据。您可以在Hive中使用CREATE EXTERNAL TABLE命令,通过Hive访问现有的Apache HBase表。您可以使用不同类型的列映射将HBase列映射到Hive。有关更多信息,请参见使用 Hive 访问现有的 HBase 表示例

在博客文章的其余部分。我们将专门研究Cloudera运营型数据库如何帮助您从OpDB的OLTP用例中获得更多性能。

计划分析器和预绑定

在OLTP用例中使用Apache Phoenix时,可以将EXPLAIN <query> Phoenix命令语法用作计划分析并调整优化计划。EXPLAIN <查询>命令计算执行命令所需的逻辑步骤。每个步骤在单列结果中表示为字符串。

例如,此示例中的命令将为您提供运行查询时使用的逻辑步骤列表。您可以重写查询以实现性能目标。您还可以绑定EXPLAIN计划来优化计划。但是请注意,在没有数据库管理员干预的情况下,它不会自动将其绑定到SQL语句。

示例命令:

代码语言:javascript
复制
EXPLAIN SELECT NAME, COUNT(*) FROM TEST GROUP BY NAME HAVING COUNT(*) > 2;
EXPLAIN SELECT entity_id FROM CORE.CUSTOM_ENTITY_DATA WHERE organization_id=’00D300000000ARP’ AND SUBSTR(entity_id,1,4) = ‘002’ AND created_date < CURRENT_DATE()-1;

有关更多信息,请参见 解释计划

支持的索引类型

索引在OpDB中用作从其主要数据访问路径访问数据的正交方式。OpDB中的Apache Phoenix自动使用索引来为查询服务。Phoenix支持全局和本地索引。每一种在特定情况下都很有用,并且具有自己的性能特征。

下表列出了索引类型和索引技术。您可以根据用例结合使用索引类型和索引技术。例如,您可以选择将覆盖索引类型与全局索引一起使用。在OpDB中,默认情况下对所有索引类型进行分区。

您也可以使用Cloudera Search进行索引。使用Cloudera Search,近实时索引允许搜索数据库中的数据-在索引创建中不需要显式的列或属性-并将其映射到主键。基于主键的第二个GET允许快速检索该行。

针对典型方案的建议:

• 将全局索引用于读取大量的用例。使用covered-global索引可以节省读取时间的开销。

• 全局索引用于共同定位相关信息。

• 将本地索引用于大量写用例。在任意表达式上使用局部函数索引来查询索引查询的特定组合。

• 局部索引是分区内索引,已针对写入进行了优化,但需要读取更多数据才能回答查询。

• 如果表很大,则可以将ASYNC关键字与CREATE INDEX一起使用以异步创建索引。

索引类型

描述

已覆盖

将数据列与索引列捆绑在一起。好处:仅通过访问索引条目可以节省读取时间的开销。示例:CREATE INDEX my_index ON exp_table (v1,v2) INCLUDE(v3) 将在v1和v2列上创建索引,并且还将包括v3列。

功能性

在任意表达式上创建索引。好处:对于某些索引查询组合很有用。例: CREATE INDEX UPPER_NAME ON EMP (UPPER(FIRST_NAME||’ ‘||LAST_NAME)) 以创建功能索引,以便您可以使用SELECT EMP_ID FROM EMP WHERE UPPER(FIRST_NAME||’ ‘||LAST_NAME)=’EXP_NAME’

技术指标

描述

全局

阅读大量用例时,请使用全局索引技术。每个全局索引都存储在其自己的表中,因此不会与数据表位于同一位置。全局索引是涵盖索引。仅当该查询中的所有列都包含在该索引中时,它才用于查询。例:创建覆盖索引CREATE INDEX exp_index ON exp_table (v1) INCLUDE (v2)创建全局索引CREATE INDEX my_index ON exp_table (v1)

本地

您可以将本地索引用于写大量的用例。每个本地索引都存储在数据表中。例: 创建覆盖索引CREATE INDEX exp_index ON exp_table (v1) INCLUDE (v2)创建本地索引CREATE LOCAL INDEX my_index ON exp_table (v1)

手动调整参数

Cloudera Manager提供了可帮助调整数据库的配置参数。可以使用直接暴露的参数或使用安全阀选项来应用更改。您可以使用Cloudera Manager>资源管理配置选项来修改RegionServer和Master堆大小。

当您将RegionServer堆大小设置为32 GiB以上时,将使用64位地址,因此对象引用将使用8个字节而不是4个字节。如果在Xmx32G和Xmx38G之间设置任何内容,则可以减少可用于应用程序的堆数量。

如果启用了BucketCache,它将存储数据块,而堆上高速缓存则可用于存储索引和Bloom过滤器。BucketCache存储的物理位置可以在内存中(堆外),也可以在快速磁盘中存储的文件中。

有关BucketCache和配置缓存的更多信息,请参阅https://docs.cloudera.com/runtime/7.2.0/configuring-hbase/topics/hbase-offheap-bucketcache.html

设置垃圾收集暂停,请求处理程序线程计数等示例可以帮助调整数据库。

自动化的Tuning Advisor和调优工具

Cloudera Manager提供原始指标和内置的工作负载图,以帮助分析调整参数的变化。OpDB为某些功能提供了调整工具,例如使用基于规则引擎的AI管理读写缓存的缓存大小。您还可以使用OpDB功能来编写其他自动调整功能的脚本,包括指标,自动执行节点添加、删除和部署配置更改的机制。

内存缓冲区的管理和控制

Cloudera Manager提供了用于调整内存管理配置(例如存储桶缓存)的功能。

您还可以监视原始指标或通过内置图表。

列存储在内存中

Cloudera的OpDB是一个针对操作和分析工作负载进行了优化的大列存储。内存中保存的数据量与配置的块存储的大小有关,这意味着,如果集群中提供了足够的内存量,则所有数据都可以在内存中操作(就像内存数据库一样)。具有内存中组件的OpDB可以水平扩展。

您可以更新所有数据,包括内存中的列存储,而无需同步机制。

服务器集群和限制

默认情况下,Cloudera的OpDB是一个集群解决方案,可扩展到数十亿行和数百万列。一个集群中最大的集群实现可以超过1,500台服务器。没有最大的数据存储限制,并且您可以在单个实例中存储超过2.5 PB的数据。

大多数用户在单个集群上运行多个应用程序。您可以在集群级别使用Cloudera Manager以及在客户端应用程序级别管理OpDB。您可以在单个集群上运行数据仓库,数据流和OpDB。OpDB使用许多不同的缓冲区来支持管理数据库上的I / O负载,包括进程间缓冲区、节点间缓冲区、集群间缓冲区,用于输入和输出的共享缓冲区。

数据放置的存储控制

默认情况下,数据分布在多个节点上。表和名称空间也可以单独或以特定组隔离到特定的节点子集。此功能使您能够控制数据放置。

并行查询执行

默认情况下,通过使用区域边界对查询进行分块并使用可配置数量的线程在客户端上并行运行查询,查询可以并行化。聚合是在服务器端完成的,减少了返回给客户端的数据量,而不是返回所有数据并在客户端进行相同的操作。

指令并行和并行实用程序执行

OpDB支持指令并行性。默认情况下,备份和恢复,空间回收和索引重建都是并行完成的。

压缩

可以在Column或Column Family级别上应用多种压缩算法(取决于所使用的存储引擎)。例如Snappy、LZO、GZIP。可以将Snappy和LZO预安装在集群上,然后在列簇上启用。启用这些压缩没有额外的成本。

在行级别可以实现块数据编码以提供此功能。例如,可以使用FastDiffDeltaEncoding尝试仅存储行之间的差异。对于某些数据,对于以列形式存储的低基数数据,我们建议根据列的类型选择编码。支持的类型包括Bitshuffle编码、运行长度编码、字典编码和前缀编码。编码可以大大减少磁盘上的数据占用。

总结

有关Cloudera的Operational Database产品的更多信息,请参阅Cloudera Operational Database

原文链接:https://blog.cloudera.com/operational-database-performance-overview-of-the-operational-database-performance-in-cdp/

作者:Liliana Kadar

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据杂货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档