云数据库GaussDB 查询表

· SELECT语句中禁用慎用通配符字段“*”。

使用通配符字段查询表时,如果因业务或数据库升级导致表结构发生变化,可能出现与业务语句不兼容的情况。 因此业务应指明所需查询的表字段名称,避免使用通配符。

· 带有LIMIT的查询语句中必须带有ORDER BY保证有序。

说明:GaussDB是一种分布式数据库,表数据将分布在多个DN上。

如果SQL语句中只带有LIMIT,而不带有ORDER BY子句,数据库将会把网络传输较快的DN所发送的(符合查询要求的)结果作为最终结果输出到客户端。

由于网络传输效率不同时刻可能发生改变,因此导致多次执行该SQL语句时,返回结果表现出不一致的情况。

· 避免对大字段(如VARCHAR(2000))执行ORDER BY、DISTINCT、GROUP BY、UNION等会引起排序的操作。

此类操作将消耗大量的CPU和内存资源,执行效率低下。

· 禁止使用慎用LOCK TABLE语句加锁,仅允许应考虑使用 SELECT .. FOR UPDATE语句。

LOCK TABLE提供多种锁级别,但如果对数据库原理和业务理解不足,误用表锁可能触发死锁,导致集群不可用。

· 避免在SELECT目标列中使用子查询,可能导致计划无法下推到DN执行,影响执行性能。

· 考虑使用UNION ALL,少使用UNION,注意考虑去重。

UNION ALL不去重,少了排序操作,速度相对UNION更快。

如果没有去重的需求,优先使用UNION ALL。

· 需要统计表中所有记录数时,不要使用count(col)来替代count(*)。count(*)会统计NULL值(真实行数),而count(col)不会统计。

· 在执行count(col)时,将“值为NULL”的记录行计数为0。在执行sum(col)时,当所有记录都为NULL时,最终将返回NULL;当不全为NULL时,“值为NULL”的记录行将被计数为0。

· count(多个字段)时,多个字段名必须用圆括号括起来。例如,count( (col1,col2,col3) )。注意:通过多字段统计行数时,即使所选字段都为NULL,该行也被计数,效果与count(*)一致。

· count(distinct col)用来计算该列不重复的非NULL的数量, NULL将不被计数。

· count(distinct (col1,col2,...))用来统计多列的唯一值数量,当所有统计字段都为NULL时,也会被计数,同时这些记录被认为是相同的。

· 使用连接操作符“ ||”替换concat函数进行字符串连接。因为concat函数生成的执行计划不能下推,导致查询性能严重劣化。

· 当in(val1, val2, val3…)表达式中字段较多时,建议使用in (values(va11), (val2),(val3)…)语句进行替换。优化器会自动把in约束转换为非关联子查询,从而提升查询性能。

· 避免频繁使用下使用count()获取大表行数,该操作资源消耗较大,影响并行作业执行效率。

如果不需要实时的行数统计信息,可以尝试使用如下语句来获取表行数。

SELECT reltules FROM pg_class WHERE relname = 'tablename';


须知:

pg_class中所记录的表行数信息只会在对该表执行ANALYZE以后才会更新。

目前ANALYZE有两种触发条件:

1)业务主动发送ANALYZE语句,例如:

--分析连接库中所有表

ANALYZE;

--分析指定表

ANALYZE tablename;

2)助AUTO VACCUUM机制,在每间隔一定时间或表的增删达到一定行数时触发。间隔时间和增删比例可通过GUC参数设置。

云数据库GaussDB优势

GaussDB数据库具有高性能、高可用、高安全、低成本的特点

云数据库GaussDB优势

GaussDB数据库具有高性能、高可用、高安全、低成本的特点

#

优势详情

  • 1

    高安全

    GaussDB拥有TOP级的商业数据库安全特性:数据动态脱敏,TDE透明加密,行级访问控制,密态计算。

    能够满足政企&金融级客户的核心安全诉求。

  • 2

    健全的工具与服务化能力

    GaussDB已经拥有华为云,商用服务化部署能力,同时支持DAS、UGO、DRS等生态工具。

    有效保障用户开发、运维、优化、监控、迁移等日常工作需要。

  • 3

    全栈自研


    GaussDB基于鲲鹏生态,是当前国内唯一能够做到全栈自主可控的国产品牌。

    同时GaussDB能够基于硬件优势在底层不断进行优化,提升产品综合性能。

  • 4

    开源生态

    GaussDB已经支持开源社区,并提供主备版版本下载。

云数据库GaussDB性能白皮书

云数据库GaussDB性能白皮书

  • 测试方法

    提供GaussDB使用BenchmarkSQL进行性能测试的方法和测试数据报告。

    BenchmarkSQL,一个JDBC基准测试工具,内嵌了TPC-C测试脚本,支持很多数据库,如PostgreSQL、Oracle和Mysql等。

    TPC-C是专门针对联机交易处理系统(OLTP系统)的规范,一般情况下我们也把这类系统称为业务处理系统。几乎所有在OLTP市场提供软硬平台的国外主流厂商都发布了相应的TPC-C测试结果,随着计算机技术的不断发展,这些测试结果也在不断刷新。

    测试环境

    局点:华为云。

    实例类型:分布式。

    规格选择:16U128G和32U256G。

    集群规模:3CN,3分片,3副本。

    测试方法

    1.修改连接配置。

    配置文件所在目录为:./run/props.pg

    2.重点参数修改。

    //连接配置

    conn=jdbc:postgresql://127.0.0.1:8000/postgres?autoBalance=true

    //连接用户名

    user=****

    //连接密码

    password=****

    //压入数据量

    warehouses=1000

    //压入并发

    loadWorkers=10

    //业务并发

    terminals=2048

    //运行时间

    runMins=30

    3.压数据

    cd ~/BenchmarkSQL-5.0/run

    ./runDatabaseBuild.sh props.pg

    4.运行tpcc业务场景

    cd ~/BenchmarkSQL-5.0/run

    ./runBenchmark.sh props.pg

    建表语句,具体见链接


    测试指标

    流量指标(Throughput,简称tpmC):按照TPC组织的定义,流量指标描述了系统在执行支付操作、订单状态查询、发货和库存状态查询这4种交易的同时,每分钟可以处理多少个新订单交易。

    所有交易的响应时间必须满足TPC-C测试规范的要求,且各种交易数量所占的比例也应该满足TPC-C测试规范的要求。

    在这种情况下,流量指标值越大说明系统的联机事务处理能力越高。

  • 测试数据

    1.实例类型:分布式

    2.实例规格:16U128G和32U256G。

    3.集群规模:3CN,3分片,3副本。

    4.数据量:3000wh

    5.压测时长:30min(预热5min)