云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

_免费云主机30_排行榜

小七 141 0

测试雪花的自动并发扩展

绩效至关重要。当你决定公司的发展方向时,你不需要等待查询加载。性能不仅仅取决于查询的运行速度,还取决于可以同时运行多少个查询。随着越来越多的用户和部门加入到平台上,那些在单个部门为云数据团队适度部署Sisense的客户通常会增长到初始用户数的100倍。增加100倍也会带来类似的查询量。当客户将数据提供给更多用户时,很难保证查询性能。这就是为什么我们选择在我们最近发布的数据引擎中包括雪花:雪花的自动并发扩展使增加数据仓库前的计算变得容易。这确保了我们的客户可以在一天中根据他们的用户数(和查询量)动态地扩展查询并发性。我们测量了单个集群中典型分析查询的吞吐量,包括自动缩放和不自动缩放,以了解雪花的查询并发缩放的工作情况:我们的测试表明,雪花的自动并发扩展将整体并发查询性能提高了84%。将其放在上下文中,这意味着一个曾经运行超过3分钟的查询现在可以在大约33秒内完成。什么是自动并发扩展?雪花多集群仓库由一个或多个执行查询的服务器集群组成。对于给定的仓库,雪花客户可以设置要分配给该仓库的最小和最大计算集群数量。在自动缩放模式下,雪花将根据发送到仓库的查询量启动和停止这些集群,在需要时增加计算能力,不需要时降低计算能力。有什么好处?在传统的数据仓库中,集群既是计算资源又是数据存储。因为您的数据已经存在于计算基础设施中,所以不需要数据传输。因此,与单独存储数据相比,单个查询的执行速度通常更快。传统仓库的一个限制是这些资源是固定的,因此无论您运行的是一个查询还是100个查询,都会使用相同的资源。与传统仓库不同的是,雪花是为云从头开始构建的,它使计算和存储能够独立工作。使用雪花,您可以立即手动或自动添加和调整仓库大小。在晚上调度ETL作业以避免白天与BI工作负载争用的日子已经一去不复返了。现在您可以使用多个计算集群(虚拟仓库)分离这些工作负载并并行运行它们。使用自动缩放模式可以使这更容易。在这种模式下,雪花将根据查询工作负载自动添加和删除计算集群。由于这种扩展会立即发生,无论是向上还是向下,客户只在需要时使用资源,而在查询工作负载较低时停止支付资源费用。我们测试了雪花,以了解其缩放模型的好处。试驾我们想看看雪花是如何处理同时发出的越来越多的查询的。我们使用了用于Python的Snowflake连接器来自动化这个基准测试。导入操作系统进口雪花。连接器连接=雪花。连接器。连接(用户=操作系统环境['SNOWFLAKE_USER'],密码=操作系统环境['SNOWFLAKE_PW'],账户=操作系统环境['SNOWFLAKE_ACC'],区域=操作系统环境['SNOWFLAKE_REG'],数据库=操作系统环境['SNOWFLAKE_DB'],仓库=操作系统环境['SNOWFLAKE_WH'],架构=操作系统环境['SNOWFLAKE_SCH'])在我们的测试中,我们使用了Snowflake的示例数据库Snowflake_sample_DATA。我们使用了10TB的样本集(TPCSD_SF10TCL),并选择了一个在集群上运行大约3秒的查询来模拟常见分析查询的运行时。选择计数(1)从网络返回其中wr_订单号%3=0年(当前时间戳)>0我们在查询中包含了当前的时间戳,以避免返回缓存的结果。由于我们正在测试性能,缓存的结果可能是作弊。然后我们建立了测试。我们使用1、2、4、8、16、32、64和128个查询同时查询仓库。因为雪花允许我们在1到10个簇之间进行缩放,所以我们想要从1个到10个来运行整个范围。代码如下:#设置仓库可用的最大集群数def set_max_集群(i):连接.cursor().执行("更改仓库"+操作系统环境['SNOWFLAKE_WH']+'"set min_cluster_count=1 max_cluster_count='+str(i))对于范围(1,11)内的num_clusters:设置最大簇(num_clusters)对于[2**x for x in range(0,8)]中的并发查询:对于并发查询中的查询数:连接.cursor().执行('从web返回中选择计数(1)'+'其中wr_订单号%3=0'+'和年份(当前时间戳)>0')除了一个小问题外,这是有效的。查询是按顺序发出的,而不是同时发出的!我们使用线程异步发出这些查询并保存结果:结果=[]类ConcurrentQuery(线程。线程):def\uu init_u(自身、总计、计数器、群集):线程。线程.\uu init_uu(自身)自动计数器=计数器自身总计=总计self.clusters公司=集群def运行(自身):当前=连接.cursor()开始时间=时间。时间()当前执行('选择计数(1)'+'从网络返回'+'其中wr_订单号%3=0'+'和年份(当前时间戳)>0')结束时间=时间。时间()结果.append({"群集":self.clusters公司,"总计":自身总计,"计数器":自动计数器,"开始时间":时间.strftime("%Y-%m-%dT%H:%m:%S",时间.本地时间(启动)),"执行时间":结束-开始,'查询'u id':当前状态})一旦我们被设置为运行多个线程来发出查询,我们就继续进行测试。对于范围(1,11)内的num_clusters:设置最大簇(num_clusters)时间。睡觉(60)#集群启动需要一些时间对于[2**x for x in range(0,8)]中的并发查询:线程=[]对于范围内的查询数(0,并发查询):thread=ConcurrentQuery(并发查询、查询、集群)线程.append(螺纹)对于内螺纹:线程启动()对于内螺纹:螺纹连接()df=熊猫.DataFrame(结果)df.to\U csv(结果/并发_测试.csv',索引=False)为了分析我们的结果,我们使用Sisense for Cloud Data Teams的便捷CSV importer来加载我们的两个输出文件(并发性_测试.csv)以及雪花查询日志的导出。结果我们有两个维度的数据:1)可用集群的数量和2)并发查询的数量。为了一次可视化所有这些结果,我们使用Sisense for Cloud Data Team的一键式R集成来构建一个方面网格。图书馆(tidyverse)库(ggplot2)库(重塑2)库(网格)库(gtable)df.m