暂无图片
暂无图片
4
暂无图片
暂无图片
暂无图片

深入体验openGauss 6.0 LTS:功能实战评测

cherry 2024-10-23
328

随着开源数据库技术的不断发展,OpenGauss作为一款高性能、高可靠、高安全的企业级关系型数据库管理系统,受到了越来越多的关注。openGauss 6.0.0 LTS是社区最新发布的长期支持版本。本次发布包含2个数据库服务端安装版本:企业版、轻量版。兼容前代版本特性功能,同时在内核能力、DataPod资源池化架构、DataKit数据全生命周期管理工具能力、生态兼容性等方面有着显著的提升。本文将对其进行实践测试,以期为大家提供一个全面的了解。

一、测试环境

  1. 虚拟机环境:本次测试使用的服务器配置为操作系统为CentOS 7.6。
  2. opengauss版本:OpenGauss 6.0 LTS 轻量版。


image.png

二、功能测试

安装与部署

首先,我们从OpenGauss官网传送门下载了最新版本的安装包,然后按照官方文档的指引进行了安装。整个安装过程比较顺利,仅涉及到一个问题。

the maximum number of SEMMNI is not correct, the current SEMMNI is xxx. Please check it.
su - root vi /etc/sysctl.conf 增加如下语句 kernel.sem = 250 32000 100 999 然后执行sysctl -p

安装完成后,我们对OpenGauss进行了基本的配置,如创建用户、分配权限等。

性能测试

为了评估新版本的性能,我们采用了业界通用的TPC-C基准测试。在测试过程中,我们设置了不同的并发用户数,从100到1000不等。结果显示,随着并发用户数的增加,OpenGauss的处理能力呈现出线性增长的趋势,表现出了很好的扩展性。此外,我们还对比了新版本与旧版本的性能差异,发现新版本在处理速度和吞吐量方面都有了明显的提升。

兼容性测试

我们对OpenGauss进行了兼容性测试。测试内容包括openGauss 6.0.0 LTS 版本正式上线中提到的生态兼容性增强。

支持删除表时忽略视图和表的依赖。删除表时,如果一个视图是基于该表创建的,那么删除可以正常执行,该视图会被设为非法状态,查询视图时直接报错。

你可以使用以下步骤来创建一个表和一个引用该表的视图。

创建表

首先,我们创建一个示例表。假设我们要创建一个名为 employees 的表,包含员工的 ID、姓名和职位。

CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR(50), position VARCHAR(50) );
插入数据

接下来,我们可以向表中插入一些示例数据。

INSERT INTO employees (id, name, position) VALUES (1, 'Alice', 'Manager'), (2, 'Bob', 'Developer'), (3, 'Charlie', 'Designer');
创建视图

现在,我们创建一个视图,这个视图将引用刚才创建的 employees 表。假设我们希望创建一个只显示员工姓名和职位的视图。

sql复制代码 CREATE VIEW employee_view AS SELECT name, position FROM employees;
查询视图

最后,我们可以查询这个视图,以查看其内容。

sql复制代码 SELECT * FROM employee_view;

openGauss=# DROP TABLE IF EXISTS employees CASCADE; NOTICE: drop cascades to view employee_view DROP TABLE

删除成功!

支持straight_join,在内连接中强制左右表的顺序,以左表驱动右表,而不是以开销大小驱动优化器选择执行顺序。

在 MySQL 中,STRAIGHT_JOIN 关键字用于强制优化器按照指定的表顺序进行连接操作。默认情况下,MySQL 的查询优化器会根据统计信息选择最优的执行计划,但有时你可能希望强制优化器按照特定的顺序进行连接,以确保性能或调试目的。

以下是使用 STRAIGHT_JOIN 的语法示例:

SELECT e.*,d.* FROM student as e STRAIGHT_JOIN teacher as d ON a.tid = d.id;

在这个例子中,STRAIGHT_JOIN 强制优化器首先扫描 studetnt,然后根据 student 的结果集来驱动对 teacher 的扫描。

在这个查询中,即使优化器认为扫描 teacher 表更高效,它也会按照 student 表的顺序进行连接操作。

注意事项

  • 使用 STRAIGHT_JOIN 可能会影响查询性能,因为优化器通常会选择最佳的执行计划。
  • 在大多数情况下,建议让优化器自行决定执行计划,除非你有充分的理由相信手动指定表的顺序会提高性能。

通过这种方式,你可以控制连接操作的顺序,从而更好地满足特定需求或进行性能调优

支持interval内部表达式运算、列引用用法。
内部表达式基本用法
openGauss=# SELECT NOW(); -- 当前时间 SELECT NOW() + INTERVAL '1 day'; -- 当前时间加一天 SELECT NOW() - INTERVAL '1 hour'; -- 当前时间减一小时 now ------------------------------- 2024-10-21 23:52:24.266345-07 (1 row) openGauss=# ?column? ------------------------------- 2024-10-22 23:52:24.284025-07 (1 row) openGauss=# ?column? ------------------------------- 2024-10-21 22:52:24.286283-07 (1 row)
使用列引用

假设有一个表 <font style="color:rgb(67, 67, 107);">events</font>,包含一个 <font style="color:rgb(67, 67, 107);">event_date</font> 列:

openGauss=# CREATE TABLE events ( id INT PRIMARY KEY, event_name VARCHAR(255), event_date TIMESTAMP ); CREATE TABLE openGauss=#INSERT INTO events (id, event_name, event_date) VALUES (1, 'Event A', '2023-10-01 10:00:00'), (2, 'Event B', '2023-10-02 12:00:00'); INSERT 0 2

查询事件日期加一天的结果:

openGauss=# SELECT id, event_name, event_date, event_date + INTERVAL '1 day' AS new_event_date FROM events; openGauss-# id | event_name | event_date | new_event_date ----+------------+---------------------+--------------------- 1 | Event A | 2023-10-01 10:00:00 | 2023-10-02 10:00:00 2 | Event B | 2023-10-02 12:00:00 | 2023-10-03 12:00:00 (2 rows)
动态生成间隔表达式

有时你可能需要根据不同的条件动态生成间隔表达式。例如,根据用户输入的天数来计算新的日期:

openGauss=# DO $$ DECLARE days_to_add INTERVAL := '5 days'; -- 假设用户输入的天数是5 BEGIN RAISE NOTICE 'Current Time: %', NOW(); RAISE NOTICE 'Future Date: %', NOW() + days_to_add; END $$; openGauss$# NOTICE: Current Time: 2024-10-21 23:58:14.986436-07 NOTICE: Future Date: 2024-10-26 23:58:14.986436-07 ANONYMOUS BLOCK EXECUTE

通过这些示例,你可以了解如何在opengauss中使用 INTERVAL 进行内部表达式运算、列引用以及动态生成间隔表达式用法。

performance、shrink关键字从保留字降级为非保留(不能是函数或类型)关键字。使得其可以作为表名/列名来使用。

在openGauss中,performanceshrink 这两个关键字已经从保留字降级为非保留(不能是函数或类型)关键字。这意味着它们可以作为表名、列名或其他标识符来使用。以下是一些示例,展示了如何在openGauss中使用这些关键字作为表名和列名:

创建包含 performanceshrink 的表
CREATE TABLE performance ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, score INT ); INSERT INTO performance (name, score) VALUES ('John Doe', 90), ('Jane Smith', 85); SELECT * FROM performance;
创建包含 performanceshrink 的列

假设有一个表 students,我们可以在其中添加包含这些关键字的列:

CREATE TABLE students1 ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, performance INT, shrink DECIMAL(5, 2) ); INSERT INTO students1 (name, performance, shrink) VALUES ('Alice Johnson', 88, 0.25), ('Bob Williams', 92, 0.40); SELECT * FROM students1;

通过以上测试用例,我们可以全面验证OpenGauss数据库在MySQL生态中的兼容性。通过这些测试用例,可以确保OpenGauss不仅在技术上与MySQL生态兼容,而且在实际应用中能够满足企业级用户的需求,为其平滑迁移到OpenGauss平台提供有力保障。

最后修改时间:2024-11-12 17:00:41
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论