云服务器内容精选

  • 开启并行查询 支持通过设置系统参数和使用HINT语法两种方式,开启或关闭并行查询。 方法一:通过设置系统参数开启或关闭并行查询 在管理控制台的参数修改页面,通过设置系统参数,可以全局开启或关闭并行查询,并调整并行度。 通过参数“force_parallel_execute”控制是否强制启用并行执行。 通过参数“pq_master_enable”控制主机是否开启并行查询。 通过参数“parallel_default_dop”控制使用多少线程并行执行。 通过参数“parallel_cost_threshold”来控制启动并行查询的代价阈值,默认值为1000,不建议将该值设置的过小,因为简单查询不适合使用并行查询。 上述参数在使用过程中,支持动态修改,无需重启数据库。 也支持会话内修改并行查询并发度,修改启动并行查询的代价阈值,例如将并发度调整为8,最小执行代价调整为100,可参照如下进行设置: SET parallel_default_dop=8; SET parallel_cost_threshold=100; 方法二:使用HINT开启或关闭并行查询 使用HINT语法可以控制单个语句是否进行并行执行。在系统默认关闭并行执行的情况下, 可以使用hint对特定的SQL进行开启。反之,也可以禁止某条SQL进行并行执行。 开启并行执行:采用下面的HINT语法可以开启并行执行。 采用默认的参数配置:SELECT /*+ PQ() */ … FROM … 采用默认的参数配置,同时指定并发度为8:SELECT /*+ PQ(8) */ … FROM … 采用默认的参数配置,同时指定并行表为t1:SELECT /*+ PQ(t1) */ … FROM … 采用默认的参数配置,同时指定并行表为t1,并发度为8:SELECT /*+ PQ(t1 8) */ … FROM … PQ HINT紧跟着SELECT关键字才能生效。PQ HINT的并发度参数dop正常取值范围[1, min(parallel_max_threads, 1024)]。 dop超出正常取值范围时,PQ不生效。 关闭并行执行:当并行查询开启时,可使用"NO_PQ"的hint语法关闭单条SQL的并行执行。 SELECT /*+ NO_PQ */ … FROM … NO_PQ hint的优先级高于PQ hint,如果SQL语句出现NO_PQ hint,即使配置PQ hint,该单条SQL也不会并行执行。
  • 系统参数及状态变量说明 支持的系统参数如表1。 表1 系统参数 参数名称 级别 描述 force_parallel_execute Global, Session 是否开启并行查询。当设置为“ON”时,表示查询SQL尽可能地使用并行执行;设置为“OFF”时,关闭并行查询优化。内核2.0.60.241200版本之后,支持“AUTO”选项,设置为“AUTO”系统会对默认的一些场景使用并行查询优化,对应场景是由pq_support_features_switch参数控制。 取值范围:ON, OFF, AUTO 默认值:OFF pq_master_enable Global 是否在主机开启并行查询,需要与参数force_parallel_execute配合使用,设置为“ON”时,如果force_parallel_execute为ON或AUTO,并行查询在主机生效;设置为"OFF"时,表示并行查询在主机不生效。只读节点不受该参数影响。 取值范围:ON, OFF 默认值:ON parallel_max_threads Global 并行执行的最大活跃线程个数。当并行执行的活跃线程超过该值时,新的查询将不允许启用并行执行。 取值范围:0-4294967295 默认值:64 parallel_default_dop Global, Session 并行执行的默认并行度。当查询语句没有指定并行度时,使用该值。 取值范围:0-1024 默认值:4 parallel_cost_threshold Global, Session 启用并行执行的代价阈值。只有当查询的执行代价超过该阈值时才有可能进行并行执行。 取值范围:0-4294967295 默认值:1000 parallel_queue_timeout Global, Session 当不满足并行查询的条件时,请求并行执行的SQL等待超时时间。当等待时间超过该值后,则不再等待,开始进行单线程执行。 取值范围:0-4294967295 默认值:0 parallel_memory_limit Global 并行执行可用的内存上限。当并行执行使用的内存量超过该值时,新的SQL查询将不会进行并行执行。 取值范围:0-4294967295 默认值:104857600 parallel_setup_cost Global, Session 启动初始化并行执行的代价。用于估算并行执行的总代价。 取值范围:0-1000000000 默认值:1000 parallel_tuple_cost Global, Session 并行执行消息传递单条记录的代价。用于估算并行执行的总代价。 取值范围:0-1000000 默认值:1.5 支持的状态变量如表2。 表2 状态变量 变量名 级别 描述 PQ_threads_running Global 当前正在运行的并行执行的总线程数。 PQ_memory_used Global 当前并行执行使用的总内存量。 PQ_threads_refused Global 由于总线程数限制,导致未能执行并行执行的查询总数。 PQ_memory_refused Global 由于总内存限制,导致未能执行并行执行的查询总数。
  • 应用场景 并行查询适用于大部分SELECT语句,例如大表查询、多表连接查询、计算量较大的查询。对于非常短的查询,效果不太显著。 轻分析类业务 报表查询通常SQL复杂而且比较耗费时间,通过并行查询可以加速单次查询效率。 系统资源相对空闲 并行查询会使用更多的系统资源,只有当系统的CPU较多、IO负载不高、内存够大的时候,才可以充分使用并行查询来提高资源利用率和查询效率。 数据频繁查询 针对数据密集型查询,通过并行查询,可以提高查询处理执行效率,减少网络流量和计算节点的压力。
  • 什么是并行查询 云数据库 TaurusDB支持了并行执行的查询方式,用以降低分析型查询场景的处理时间,满足企业级应用对查询低时延的要求。并行查询的基本实现原理是将查询任务进行切分并分发到多个CPU核上进行计算,充分利用CPU的多核计算资源来缩短查询时间。并行查询的性能提升倍数理论上与CPU的核数正相关,也就是说并行度越高能够使用的CPU核数就越多,性能提升的倍数也就越高。 下图是使用CPU多核资源并行计算一个表的count(*)过程的基本原理:表数据进行切块后分发给多个核进行并行计算,每个核计算部分数据得到一个中间count(*)结果,并在最后阶段将所有中间结果进行聚合得到最终结果。具体如下: 图1 并行查询原理图
  • 操作步骤 生成测试数据。 请在https://github.com/electrum/tpch-dbgen下载TPCH共用源码。 请在下载的源码文件中,找到makefile.suite文件,并按照如下内容进行修改,修改完成后进行保存。 CC = gcc # Current values for DATABASE are: INFORMIX, DB2, TDAT (Teradata) # SQLSERVER, SYBASE, ORACLE # Current values for MACHINE are: ATT, DOS, HP, IBM, ICL, MVS, # SGI, SUN, U2200, VMS, LINUX, WIN32 # Current values for WORKLOAD are: TPCH DATABASE= SQLSERVER MACHINE = LINUX WORKLOAD = TPCH 在源码根目录下,执行下列命令,编译生成TPCH数据工具dbgen。 make -f makefile.suite 使用dbgen执行如下命令,生成TPCH数据100G。 ./dbgen -s 100 登录目标 GaussDB (for MySQL)实例,创建目标数据库,并使用如下命令创建TPCH的表。 CREATE TABLE nation ( N_NATIONKEY INTEGER NOT NULL, N_NAME CHAR(25) NOT NULL, N_REGIONKEY INTEGER NOT NULL, N_COMMENT VARCHAR(152)); CREATE TABLE region ( R_REGIONKEY INTEGER NOT NULL, R_NAME CHAR(25) NOT NULL, R_COMMENT VARCHAR(152)); CREATE TABLE part ( P_PARTKEY INTEGER NOT NULL, P_NAME VARCHAR(55) NOT NULL, P_MFGR CHAR(25) NOT NULL, P_BRAND CHAR(10) NOT NULL, P_TYPE VARCHAR(25) NOT NULL, P_SIZE INTEGER NOT NULL, P_CONTAINER CHAR(10) NOT NULL, P_RETAILPRICE DECIMAL(15,2) NOT NULL, P_COMMENT VARCHAR(23) NOT NULL ); CREATE TABLE supplier ( S_SUPPKEY INTEGER NOT NULL, S_NAME CHAR(25) NOT NULL, S_ADDRESS VARCHAR(40) NOT NULL, S_NATIONKEY INTEGER NOT NULL, S_PHONE CHAR(15) NOT NULL, S_ACCTBAL DECIMAL(15,2) NOT NULL, S_COMMENT VARCHAR(101) NOT NULL); CREATE TABLE partsupp ( PS_PARTKEY INTEGER NOT NULL, PS_SUPPKEY INTEGER NOT NULL, PS_AVAILQTY INTEGER NOT NULL, PS_SUPPLYCOST DECIMAL(15,2) NOT NULL, PS_COMMENT VARCHAR(199) NOT NULL ); CREATE TABLE customer ( C_CUSTKEY INTEGER NOT NULL, C_NAME VARCHAR(25) NOT NULL, C_ADDRESS VARCHAR(40) NOT NULL, C_NATIONKEY INTEGER NOT NULL, C_PHONE CHAR(15) NOT NULL, C_ACCTBAL DECIMAL(15,2) NOT NULL, C_MKTSEGMENT CHAR(10) NOT NULL, C_COMMENT VARCHAR(117) NOT NULL); CREATE TABLE orders ( O_ORDERKEY INTEGER NOT NULL, O_CUSTKEY INTEGER NOT NULL, O_ORDERSTATUS CHAR(1) NOT NULL, O_TOTALPRICE DECIMAL(15,2) NOT NULL, O_ORDERDATE DATE NOT NULL, O_ORDERPRIORITY CHAR(15) NOT NULL, O_CLERK CHAR(15) NOT NULL, O_SHIPPRIORITY INTEGER NOT NULL, O_COMMENT VARCHAR(79) NOT NULL); 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 DECIMAL(15,2) NOT NULL, L_EXTENDEDPRICE DECIMAL(15,2) NOT NULL, L_DISCOUNT DECIMAL(15,2) NOT NULL, L_TAX DECIMAL(15,2) NOT NULL, L_RETURNFLAG CHAR(1) NOT NULL, L_LINESTATUS CHAR(1) NOT NULL, L_SHIPDATE DATE NOT NULL, L_COMMITDATE DATE NOT NULL, L_RECEIPTDATE DATE NOT NULL, L_SHIPINSTRUCT CHAR(25) NOT NULL, L_SHIPMODE CHAR(10) NOT NULL, L_COMMENT VARCHAR(44) NOT NULL); 使用如下命令,将生成的数据导入到TPCH的表中。 load data INFILE '/path/customer.tbl' INTO TABLE customer FIELDS TERMINATED BY '|'; load data INFILE '/path/region.tbl' INTO TABLE region FIELDS TERMINATED BY '|'; load data INFILE '/path/nation.tbl' INTO TABLE nation FIELDS TERMINATED BY '|'; load data INFILE '/path/supplier.tbl' INTO TABLE supplier FIELDS TERMINATED BY '|'; load data INFILE '/path/part.tbl' INTO TABLE part FIELDS TERMINATED BY '|'; load data INFILE '/path/partsupp.tbl' INTO TABLE partsupp FIELDS TERMINATED BY '|'; load data INFILE '/path/orders.tbl' INTO TABLE orders FIELDS TERMINATED BY '|'; load data INFILE '/path/lineitem.tbl' INTO TABLE lineitem FIELDS TERMINATED BY '|'; 创建TPCH表的索引。 alter table region add primary key (r_regionkey); alter table nation add primary key (n_nationkey); alter table part add primary key (p_partkey); alter table supplier add primary key (s_suppkey); alter table partsupp add primary key (ps_partkey,ps_suppkey); alter table customer add primary key (c_custkey); alter table lineitem add primary key (l_orderkey,l_linenumber); alter table orders add primary key (o_orderkey); 请在https://github.com/dragansah/tpch-dbgen/tree/master/tpch-queries获取TPCH 22个查询query语句,并进行相应操作。
  • 应用场景 并行查询适用于大部分SELECT语句,例如大表查询、多表连接查询、计算量较大的查询。对于非常短的查询,效果不太显著。 轻分析类业务 报表查询通常SQL复杂而且比较耗费时间,通过并行查询可以加速单次查询效率。 系统资源相对空闲 并行查询会使用更多的系统资源,只有当系统的CPU较多、IO负载不高、内存够大的时候,才可以充分使用并行查询来提高资源利用率和查询效率。 数据频繁查询 针对数据密集型查询,通过并行查询,可以提高查询处理执行效率,减少网络流量和计算节点的压力。 只读节点和主节点均支持并行查询,由于并行查询对计算资源(CPU、内存等)比较消耗,考虑到实例稳定性,2.0.42.230600及以上版本并行查询默认在主节点不生效,如需使用可联系客服人员开启。