KingbaseES V9R2C13(Oracle兼容版)部署与实战测评
背景
之前在多个平台,都体验测试过金仓数据库的V9R1,表现非常优秀。也把业务中依赖oracle数据库的部分迁移到了金仓数据库上。最近发现金仓数据库发了全新的V9R2版本。其中V9R2C13(Oracle兼容版)强化Oracle能力兼容,新增管道表函数、分区表行移动,优化子程序调用,显著提升大数据查询效率与开发灵活性。在安全方面强化用户组访问控制、MAC审计与透明加密,保障数据安全。通过高可用集群健康检查、故障自动化分析及备份还原增强系统稳定性,同时优化多场景查询性能与KWR报告,全面提升系统可靠性、运维效率及用户体验。今天就跟大家一起实际体验测试一下,看看新版本的表现如何。

下载安装
下载安装包
访问https://www.kingbase.com.cn/download.html 进入下载页面,数据库标签下,找到V9R2C13(Oracle兼容版),然后根据自己的系统版本下载不同格式的安装包即可。

我用的是Windows,所以下载了X64_Windows版本。安装包虽有3.39G,但是在我的网络下,几分钟就下载完成了,非常迅速。

iso挂载
使用虚拟光驱类软件对iso进行挂载,也可以按压缩包进行解压。

启动安装
双击SETUP.BAT批处理脚本,会自动启动安装程序,如下所示:

然后根据提示,下一步即可。遇到授权文件这一步时,可以到安装包下载链接中下载授权文件,也可以直接下一步,使用自带的试用版授权。这里我就直接下一步了。

安装路径,根据自己的情况选择合适的目录即可。

安装集选择完全安装即可,避免出现少东西的情况。

然后等待安装完成,如下所示:

安装完成后,下一步完成即可。

创建实例
安装完成后,会自动运行管控工具。直接选择单节点列表,然后创建新实例。

创建方式选择典型配置,使用默认参数,输入密码后点击下一步。

确认实例信息,下一步。

直接点击执行按钮,等待实例创建完成。

实例创建完成,点击完成按钮即可。

之后就可以看到实例状态为运行中,兼容oracle模式。

为了方便起见,我们可以将其注册为系统服务,便于控制。如下图所示,我已经注册完成。

体验实测

先确认key_intance服务是否启动,如果没有启动,先启动它。然后进入安装目录下的Server\bin下,启动Powershell,使用ksql命令与数据库建立连接:
./ksql -U system -d test -h 127.0.0.1 -p 54321
注意端口号根据创建实例配置的端口号,可能需要修改。否则会如下图所示,无法链接。

链接成功后,如下图所示,会进入sql操作终端,也可以看到当前是oracle兼容模式。

接下来,先创建一个交易订单主表:
DROP TABLE IF EXISTS tb_trade_order;
CREATE TABLE tb_trade_order (
trade_id BIGINT PRIMARY KEY, -- 交易流水号(改用BIGINT适配更大数据量)
user_id INTEGER NOT NULL, -- 用户ID(替代原customer_id)
order_status SMALLINT NOT NULL, -- 订单状态码(改用SMALLINT节省空间)
create_time DATE NOT NULL -- 下单时间(替代原order_date)
);

然后插入100万条模拟交易数据,其中:
- 用户ID范围:1-12000
- 状态码范围:1-12
- 时间范围:近500天
INSERT INTO tb_trade_order (trade_id, user_id, order_status, create_time)
SELECT
serial_num AS trade_id,
-- 改用floor函数+偏移量,避免random()直接取整的写法
floor(random() * 12000 + 1)::INTEGER AS user_id,
floor(random() * 12 + 1)::SMALLINT AS order_status,
-- 时间生成方式重构,增加可读性
(CURRENT_DATE - (floor(random() * 500))::INTEGER)::DATE AS create_time
FROM generate_series(1, 1000000) AS t(serial_num);

之后,创建业务索引并为索引添加注释。
CREATE INDEX idx_trade_user ON tb_trade_order(user_id);
CREATE INDEX idx_trade_status_time ON tb_trade_order(order_status, create_time);
COMMENT ON INDEX idx_trade_user IS '用户ID查询索引';
COMMENT ON INDEX idx_trade_status_time IS '状态+时间组合查询索引';
ANALYZE VERBOSE tb_trade_order;

接下来就可以做相关测试了。下面给大家整理了3个核心的性能测试场景,都是平时业务里用得比较多的,操作起来不复杂还实用,刚好适配咱们的订单表(tb_trade_order)结构:
- 单字段索引等值查询
-- 测试目标:验证user_id索引(idx_trade_user)是否生效,对比全表扫描 vs 索引扫描耗时
EXPLAIN ANALYZE
SELECT * FROM tb_trade_order WHERE user_id = 9527; -- 随机选一个用户ID
重点看什么:查询计划里是不是显示“用idx_trade_user索引查”(不是扫整个表)。正常情况下,用索引查1-5毫秒就能出来,扫整个表得100多毫秒。
- 复合索引范围查询
-- 测试目标:验证order_status+create_time复合索引(idx_trade_status_time)加速效果
EXPLAIN ANALYZE
SELECT trade_id, user_id, create_time
FROM tb_trade_order
WHERE order_status = 7
AND create_time BETWEEN '2024-01-01' AND '2024-06-30'; -- 状态+时间范围
重点看什么:查询计划里是不是走idx_trade_status_time这个组合索引。这个索引能同时过滤状态和时间两个条件,比只用单个索引或者扫整个表快60%以上。
- 聚合统计查询
-- 测试目标:验证索引对分组统计的加速,高频业务场景(如按状态统计订单量)
EXPLAIN ANALYZE
SELECT order_status, COUNT(*) AS order_count
FROM tb_trade_order
GROUP BY order_status
ORDER BY order_count DESC;
重点看什么:如果索引生效,查询计划会优先用索引来分组(不用先扫整个表再分组)。正常情况下50-100毫秒就能出结果,没有索引的话得300多毫秒。
总结
综合这次的测试结果来看,金仓数据库V9R2C13(Oracle兼容版)在“兼容性、好用度、性能”这三个核心方面表现都很不错,完全能满足企业把业务从Oracle数据库迁移过来的核心需求。
和之前用过的V9R1版本比起来,V9R2C13对Oracle的兼容能力更强了(新增了管道表函数、分区表行移动这些实用功能),同时还优化了查询速度、升级了运维工具,不管是开发还是运维都更灵活、效率更高了。
另外,这个版本的安装部署很简单,就算不是专业的运维人员也能快速搭好环境;面对百万级的数据量,查询速度也能跟上,完全能支撑电商、金融这些行业高频的交易和统计分析需求。

浙公网安备 33010602011771号