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

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

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

一、测试环境

  1. 虚拟机环境:本次测试使用的服务器配置为操作系统为CentOS 7.6。

  2. openGauss版本:openGauss 6.0 LTS 轻量版。


二、功能测试

安装与部署

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

                        创建包含 performance
                         和 shrink
                         的表
                          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;
                          创建包含 performance
                           和 shrink
                           的列

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

                            CREATE TABLE students1 (
                            id SERIAL PRIMARY KEY,
                            name VARCHAR(255) NOT NULL,
                            performance INT,
                            shrink DECIMAL(5, 2)
                            );


                            INSERT INTO students (name, performance, shrink) VALUES
                            ('Alice Johnson', 88, 0.25),
                            ('Bob Williams', 92, 0.40);


                            SELECT * FROM students1;

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


                            点击阅读原文跳转作者文章

                            最后修改时间:2024-11-13 12:04:55
                            文章转载自openGauss,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                            评论