c段查询-虽然都是并行查询,但是区别还是很大的。

近日,腾讯云云原生数据库TDSQL-C升级,并行查询功能自主研发上线。 计算性能有了很大的提高。 面对大数据量表单和复杂SQL语句时,查询时间大大缩短,加速比可达1000%。 +。

并行查询功能是目前TDSQL-C版本在计算层实现的最重要也是最复杂的能力。 不仅需要改造计算层,还要适配优化器、参数设置、监控项等,零成本性能。 推广、透明流程监控、全面支持常用语句、参数设置灵活等功能优势。

让您的查询更快

当前TDSQL-C MySQL版本的并行查询能力支持4核及以上实例CPU,数据库版本为MySQL8。 degree 参数(txsql_parallel_degree)不为 0 以启用它。 无需额外消耗,即可充分调动您实例的CPU算力,提升语句响应速度,大幅提升计算性能,让您的业务效率翻倍!

● txsql_parallel_degree 参数的值表示单条语句并行查询的最大线程数c段查询,即并行查询的默认并行度。 建议并行度不超过实例CPU核数的一半。 为保证稳定性,CPU核数小于4的小集群将关闭并行查询功能,您将无法在控制台或命令行调整并行查询相关参数。

● SQL 语句在执行并行查询时默认会使用txsql_parallel_degree 设置的并行度,但用户可以通过hint 语句调整单个SQL 语句的并行查询并行度。

● txsql_max_parallel_worker_threads 参数的值表示实例在并行查询中可以用于并行查询的线程数,txsql_max_parallel_worker_threads / txsql_parallel_degree 的值表示可以同时执行并行查询的最大SQL 语句数。

启用后,数据库会自动判断使用的查询语句是否满足并行查询条件。 如果满足条件,它会自动使用此能力来加速查询,而无需输入额外的命令语句,从而简化了用户体验。

当前版本并行查询的实现是基于worker-gather模式。 利用实例的多核优势,对查询进行拆分。 用户线程会划分数据和任务,同时充当协调者,协调多个工作线程并行执行子查询。 任务。 用户线程收到SQL后,通过解析、验证、优化等常规步骤生成串行执行计划(迭代算子树),但同时收集优化过程所依赖的各种信息(优化环境),然后分析串行执行的计划(语句检测,实际上是检测算子树、执行环境和优化代价),决定是否开始并行优化。 并行优化时,将串行算子树划分为粗粒度任务,选择并行表(动态分区)和任务间的数据交换算法,构建任务依赖图。 此时,用户线程准备就绪,从可用的线程管理器申请足够的工作线程开始调度执行。

基于以上理论,并行查询功能会充分利用你的CPU资源来加速语句的执行。 经测试验证,开启并行查询能力后,在面对大数据形式和复杂SQL语句时,查询时间大大缩短,加速比最高。 高达 1000%+。

让流程更透明

TDSQL-C MySQL版提供多种监控方式监控并行查询过程,确保实时掌握每一个异常状态,为集群的稳定运行保驾护航。

由于并行查询是腾讯云的自研能力,MySQL原生的命令行和监控项并不能很好的概览整个执行过程。 为此,TDSQL-C MySQL版本新增了多个监控变量和自定义的SQL命令,方便用户在使用并行查询能力时准确查看执行过程和工作线程,快速处理特殊情况。

TDSQL-C MySQL版针对并行查询能力设置了四项监控指标:

●当前并行查询线程数:并行查询当前使用的线程数。

●并行查询错误数:并行查询中报错的语句数。

● 并行查询执行数:并行查询语句的执行数。

● 回滚的串行查询数:从并行查询回滚到串行查询的语句数。

从执行到报错回滚三个环节全方位量化监控,轻松应对各种场景。 在执行过程中,我们还自定义了并行查询专用命令语句,支持查看并行查询的执行计划,查看线程有哪些线程在执行并行查询计划。 可以清楚的了解并行查询是如何在数据库中稳定运行的,也可以在并行查询执行过程中遇到问题时帮助快速定位问题。

下面介绍两种查看并行查询执行过程的常用语法。

方法一:使用EXPLAIN语句

示例 SQL 语句:

树执行计划打印结果:

EXPLAIN: -> Sort: lineitem.L_RETURNFLAG, lineitem.L_LINESTATUS-> Table scan on -> Final Aggregate using temporary table-> PX Receiver (slice: 0; workers: 1)-> PX Sender (slice: 1; workers: 4)-> Table scan on -> Aggregate using temporary table-> Filter: (lineitem.L_SHIPDATE '1998-09-02') (cost=65449341.10 rows=296592240)-> Parallel table scan on lineitem (cost=65449341.10 rows=593184480)1 row in set (0.00 sec)

● 从上面的结果可以看出,并行查询计划将语句分发给4个工作线程进行计算。

●聚合操作分为上下段,用户线程和并行线程分别执行。

● lineitem 表使用并行扫描算子。

explain语句详细展示了并行查询的执行流程

方法二:查看线程列表

show processlist 命令的输出显示哪些线程正在运行。 不仅可以查看当前所有连接,还可以查看当前连接状态,帮助识别有问题的查询语句等。

TDSQL-C MySQL版在show processlist命令的基础上,自主开发了show parallel processlist语句,帮助您过滤线程中非并行查询的线程。 使用此命令行后,只会显示与并行查询相关的线程。

mysql> show parallel processlist;+--------+-------------+-----------+----------+---------+------+-------------+------------------------------------------------------------------------------------------------------+| Id | User | Host | db | Command | Time | State | Info |+--------+-------------+-----------+----------+---------+------+-------------+------------------------------------------------------------------------------------------------------+| 237062 | tencentroot | localhost | tpch100g | Query | 18 | Scheduling | SELECT l_returnflag, l_linestatus, sum(l_quantity) as sum_qty FROM lineitem WHERE l_shipdate | 237110 | | | | Task | 18 | Task runing | connection 237062, worker 0, task 1 || 237111 | | | | Task | 18 | Task runing | connection 237062, worker 1, task 1 || 237112 | | | | Task | 18 | Task runing | connection 237062, worker 2, task 1 || 237113 | | | | Task | 18 | Task runing | connection 237062, worker 3, task 1 |+--------+-------------+-----------+----------+---------+------+-------------+------------------------------------------------------------------------------------------------------+5 rows in set (0.00 sec)

从以上结果可以看出:

● 上述查询被并行计划分配给四个工作线程执行:只显示一行user,表示ID 237062为用户线程,将SQL语句执行计划下推到以下四个工作线程,通过info栏可以看出这4个工作线程都在执行task1。

●每个线程都可以查询,精确定位。

● show parallel processlist 与show processlist 相比,可以准确查询所有执行并行查询的线程,不受其他线程的影响。

对语句的更多支持

TDSQL-C MySQL版本实现了SQL语句的并行查询处理,具有以下特点,并在逐步完善更多的功能场景。

●单表扫描:支持全表扫描、索引扫描、索引范围扫描、索引REF查询等正反序扫描类型。

● 多表连接:支持Nested Loop Join算法和Semi Join、Anti Join、Outer Join等连接类型。

●对于子查询:支持派生表并行。

●针对数据类型:支持多种数据类型的查询,包括整型数据、字符型数据、浮点型数据、时间型数据、溢出型数据(有运行时大小限制)。

● 原则上不限制常用运算符和函数。

● 聚合函数支持COUNT/SUM/AVG/MIN/MAX。

●支持UNION/UNION ALL查询。

● 支持三种EXPLAIN格式:traditional(默认格式)、json和tree。

测试表明,对于支持的语句,开启并行查询后,TDSQL-C MySQL版本的查询时间相比传统的MySQL串行查询平均缩短了十倍以上。

让执行更灵活

为了适应多种业务情况,保证并行查询能力不会对硬件造成太大的负担,TDSQL-C MySQL版还提供了多种策略来设置并行查询的执行条件,方便为您个性化和适应业务。 确保业务的稳定运行。 设置后c段查询,TDSQL-C for MySQL会判断语句的执行成本、表的行数、单条语句执行并行计划所占用的内存等,并确认是否允许每条SQL语句执行并行查询。

并行查询控制策略

当前版本支持通过调整以下参数来控制并行查询的执行:

● txsql_parallel_cost_threshold:并行执行成本阈值,只有执行成本高于该阈值的语句才会执行并行查询。 设置该策略可以防止过于简单的查询进入并行查询队列,占用真正需要并行查询能力的SQL语句的资源。

● txsql_parallel_table_record_threshold:并行表行数的阈值。 只有行数高于阈值的表才能被选为并行表。 该策略也用于防止并行查询对数据量较小的表单占用资源,影响复杂语句的效率。

● txsql_optimizer_context_max_mem_size:单条语句可申请的并行查询计划环境的最大内存限制。

● txsql_parallel_execution_max_lob_size:单个溢出字段的内存限制。

提示语句控件

除了使用控制策略调整并行查询的执行,TDSQL-C MySQL版本还提供了提示语句,帮助用户在会话级别控制会话。 可以为单条语句指定并行执行方式,从而避免单条语句执行延迟。 修改整个集群的参数设置。

例如:

1、不管系统默认的并行度值是多少,强制这条语句使用并行度4来执行并行查询,设置这条语句txsql_parallel_degree = 4,使用如下hint语句来实现:

select /+PARALLEL4)/ * FROM t1,t2;

2、选择t1表进行并行查询,并行度为8,可以使用如下hint语句来实现:

select /+PARALLEL(t1 8)/ * FROM t1,t2;

3、设置这条语句的txsql_parallel_cost_threshold=1000。 当这条语句的执行代价大于1000时,可以使用并行查询,可以使用如下提示语句来实现:

select /+SET_VAR(txsql_parallel_cost_threshold=1000)/ * FROM t1,t2

TDSQL-C MySQL版通过以上功能优势,进一步提高了并行查询能力的易用性和灵活性,方便用户适应各种业务环境,灵活调用硬件负载。 TDSQL-C MySQL版是腾讯云自主研发的新一代云原生关系型数据库。 它结合了传统数据库、云计算和新硬件技术的优势,为用户提供极其灵活、高性能、海量存储、安全可靠的数据库服务,并将在企业级查询加速特性上不断探索更多可能。并行查询能力,从而为用户的业务带来更强的支持。

– 更令人兴奋的 –

限 时 特 惠: 本每日持续更新海量各大内部创业教程,一年会员只需98元,全资源免费下载 
优惠码(不再需要): xnbaoku

声明:本站内容转载于网络,版权归原作者所有,仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任,若侵犯到你的版权利益,请联系我们,会尽快给予删除处理!

大鱼项目网 » c段查询-虽然都是并行查询,但是区别还是很大的。