注册
达梦大小写敏感测试
专栏/培训园地/ 文章详情 /

达梦大小写敏感测试

Daniel 2026/08/03 67 0 0
摘要

达梦大小写敏感测试

前言

​ 达梦数据库在初始化实例时,需要注意大小写敏感的设置。大小写敏感只能在初始化数据库的时候设置。

默认为大小写敏感,一旦设置成功就无法修改,如果想要修改,只能重新初始化实例。

一、概述

​ 大小写敏感主要对哪些会产生影响?

标识符:

  • 大小写敏感:小写的标识符应使用双引号 "" (界定标识符)括起来,就可以区分大小写,意味着可以创建相同名称不同大小写的表、索引等对象,或者在一张表中拥有不同大小写的列名。
  • 大小写不敏感:标识符被双引号括起来也不会使数据库区分大小写。

数据库用户密码:

  • 在达梦中,用户管理相关功能并不受大小写是否敏感参数的影响。用户名会始终强转为大写,无论有没有使用双引号包裹,CREATE USER、ALTER USER 均如此,而密码始终区分大小写。

模式:

  • 大小写敏感:可拥有两个同名不同大小写的模式,这两个模式需要属于同一个用户。
  • 大小写不敏感:只可以拥有大写的模式名。

数据管理(业务数据):

  • 大小写敏感:数据存储及数据比较区分大小写。
  • 大小写不敏感:数据存储本身仍是保持原有的大小写,但是比较的时候默认不区分。

查看大小写敏感与否:

select case_sensitive();

如果 CASE_SENSITIVE 的值为 1,代表是大小写敏感,为 0 则代表不敏感。

参数 函数 是否可修改
CASE_SENSITIVE 标识符大小写是否敏感。Y、y、1 表示敏感, N、n、0 表示不敏感,缺省值为 Y。 当大小写敏感时,小写的标识符应用双引号括起,否则被转换为大写; 当大小写不敏感时,系统不自动转换标识符的大小写,系统比较函数会将大写字母全部转为小写字母再进行比较 不可修改

二、实际测试

1、初始化数据库实例

1)大小写敏感实例(danieldb)

dminit path=/dm8/data PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=y CHARSET=1 DB_NAME=danieldb INSTANCE_NAME=danieldb PORT_NUM=5236 SYSDBA_PWD=Mema_123456 SYSAUDITOR_PWD=Mema_1234 # root运行 cd /dm8/script/root ./dm_service_installer.sh -t dmserver -dm_ini /dm8/data/danieldb/dm.ini -p danieldb # 启动服务 systemctl start DmServicedanieldb

2)大小写不敏感实例(newdb)

dminit path=/dm8/newdata PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=n CHARSET=1 DB_NAME=newdb INSTANCE_NAME=newdb PORT_NUM=6236 SYSDBA_PWD=Mema_1234 SYSAUDITOR_PWD=Mema_1234 # root运行 cd /dm8/script/root ./dm_service_installer.sh -t dmserver -dm_ini /dm8/newdata/newdb/dm.ini -p newdb # 启动服务 systemctl start DmServicenewdb

2、测试

1)创建两个数据库实例

danieldb(大小写敏感) newdb(大小写不敏感)
disql sysdba/Mema_1234@localhost:5236 disql sysdba/Mema_1234@localhost:6236
select case_sensitive(); select case_sensitive();
image.png image.png
CREATE TABLE T1 (id INT, c VARCHAR(50));<br/>CREATE TABLE t1 (id INT, c VARCHAR(50)); CREATE TABLE T1 (id INT, c VARCHAR(50));<br/>CREATE TABLE t1 (id INT, c VARCHAR(50));
image.png image.png
CREATE TABLE "t1" (id INT, c VARCHAR(50)); CREATE TABLE "t1" (id INT, c VARCHAR(50));
image.png image.png
CREATE TABLE t2 (id INT, c VARCHAR(50));<br/>CREATE TABLE Tt3 (id INT, c VARCHAR(50));<br/>CREATE TABLE "T4" (id INT, c VARCHAR(50));<br/>CREATE TABLE "t5" (id INT, c VARCHAR(50));<br/>CREATE TABLE "Tt6" (id INT, c VARCHAR(50)); CREATE TABLE t2 (id INT, c VARCHAR(50));<br/>CREATE TABLE Tt3 (id INT, c VARCHAR(50));<br/>CREATE TABLE "T4" (id INT, c VARCHAR(50));<br/>CREATE TABLE "t5" (id INT, c VARCHAR(50));<br/>CREATE TABLE "Tt6" (id INT, c VARCHAR(50));
select table_name from user_tables; select table_name from user_tables;
image.png image.png
不加双引号:T1、t2、Tt3 表,不管创建时表名是大写还是小写,创建后的表名均为大写<br />加双引号:T4、t5、Tt6 表,由于加了双引号,所以创建后的表名和建表时保持一致。 在大小写不敏感的数据库中,创建后的表名与创建时的表名保持一致
-- 命令为了粘贴方便 INSERT INTO T1 (id, c) VALUES (1, 'Test1'), (2, 'Test2'); INSERT INTO t2 (id, c) VALUES (1, 'test1'), (2, 'test2'); INSERT INTO Tt3 (id, c) VALUES (1, 'test1'), (2, 'test2'); INSERT INTO "T4" (id, c) VALUES (1, 'Test3'), (2, 'Test4'); INSERT INTO "t5" (id, c) VALUES (1, 'test3'), (2, 'test4'); INSERT INTO "Tt6" (id, c) VALUES (1, 'test3'), (2, 'test4'); COMMIT;
danieldb(大小写敏感) newdb(大小写不敏感)
SELECT * FROM T1 WHERE c = 'Test1'; SELECT * FROM T1 WHERE c = 'Test1';
image.png image.png
SELECT * FROM t1 WHERE c = 'test1'; SELECT * FROM t1 WHERE c = 'test1';
image.png image.png
SELECT * FROM T1 WHERE c = 'TEST1'; SELECT * FROM T1 WHERE c = 'TEST1';
image.png image.png
SELECT * FROM Tt6 WHERE c = 'test3'; SELECT * FROM Tt6 WHERE c = 'test3';
image.png image.png
SELECT * FROM "Tt6" WHERE c = 'test3'; SELECT * FROM "Tt6" WHERE c = 'test3';
image.png image.png

过以上测试,基本已经可以搞清楚大小写是否敏感对于数据库对象以及数据的影响。这里概括以下大小写敏感和不敏感数据库中的表和字段名的处理方式,如下表所示。

drop table T1; drop TABLE t2; drop TABLE Tt3; drop TABLE "T4"; drop TABLE "t5"; drop TABLE "Tt6";

三、性能测试

1、可执行程序配置

cd /opt/sysbench-master/sysbench-master-dpi/src cp sysbench ./lua/sysbench_daniel

2、测试说明

sysbench的数据库测试脚本在src/lua目录下,都是以oltp为前缀。其中oltp_common.lua脚本是最基础的测试脚本,定义了表结构,事务的基本操作。剩余oltp脚本都是引用oltp_common脚本,将其中query进行组合,实现各种测试场景。最常使用的3个脚本如下:

脚本名称 说明
oltp_read_write.lua 读写混合性能测试,包含查询,更新,删除,插入操作。
oltp_read_only.lua 读性能测试,包含查询操作。
oltp_write_only.lua 包含更新,删除,插入操作。
systemctl stop DmServicenewdb
systemctl stop DmServicedanieldb


3、测试

进入lua目录

cd /opt/sysbench-master/sysbench-master-dpi/src/lua

参数说明

参数 说明
--db-driver=dm 表示使用dm驱动
--dm-db=localhost:5236 表示dm的连接信息
--dm-user=SYSDBA 表示dm的登录用户名
--dm-password=SYSDBA 表示dm的登录密码
--table-size=2500 表示每个测试表填充数据量为 2500
--tables=25 表示25张表
--threads=64 表示发起64个并发连接
--report-interval=10 表示每10秒输出一次测试进度报告
--time=180 表示最大执行时长为180秒
--auto-inc=0 自增主键,默认为0即可

四、开始测试

1、读写场景

1)数据准备

-- 大小写敏感 systemctl start DmServicedanieldb ./sysbench_daniel oltp_read_write.lua --tables=50 --table-size=25000 --db-driver=dm --dm-db=localhost:5236 --dm-user=SYSDBA --dm-password=Mema_1234 --auto-inc=0 --threads=64 --time=180 --report-interval=10 prepare systemctl stop DmServicedanieldb -- 大小写不敏感 systemctl start DmServicenewdb ./sysbench_daniel oltp_read_write.lua --tables=50 --table-size=25000 --db-driver=dm --dm-db=localhost:6236 --dm-user=SYSDBA --dm-password=Mema_1234 --auto-inc=0 --threads=64 --time=180 --report-interval=10 prepare systemctl stop DmServicenewdb

2)开始测试

-- 大小写敏感 systemctl start DmServicedanieldb ./sysbench_daniel oltp_read_write.lua --tables=50 --table-size=25000 --db-driver=dm --dm-db=localhost:5236 --dm-user=SYSDBA --dm-password=Mema_1234 --auto-inc=0 --threads=10 --time=300 --report-interval=10 --rand-type=uniform run systemctl stop DmServicedanieldb -- 大小写不敏感 systemctl start DmServicenewdb ./sysbench_daniel oltp_read_write.lua --tables=50 --table-size=25000 --db-driver=dm --dm-db=localhost:6236 --dm-user=SYSDBA --dm-password=Mema_1234 --auto-inc=0 --threads=10 --time=300 --report-interval=10 --rand-type=uniform run systemctl stop DmServicenewdb

-- 大小写敏感

image.png

-- 大小写不敏感

image.png

结论,性能上,相差不大。

3)清除数据

./sysbench_daniel oltp_read_write.lua --tables=50 --table-size=25000 --db-driver=dm --dm-db=localhost:5236 --dm-user=SYSDBA --dm-password=Mema_1234 --auto-inc=0 --threads=64 --time=180 --report-interval=10 cleanup ./sysbench_daniel oltp_read_write.lua --tables=50 --table-size=25000 --db-driver=dm --dm-db=localhost:6236 --dm-user=SYSDBA --dm-password=Mema_1234 --auto-inc=0 --threads=64 --time=180 --report-interval=10 cleanup

2、纯读测试

1)数据准备

./sysbench_daniel --db-driver=dm --dm-db=localhost:5236 --dm-user=SYSDBA --dm-password=Mema_1234 --table_size=25000 --tables=50 --events=0 --time=120 oltp_read_only prepare --auto-inc=0

2)开始测试

./sysbench_daniel --db-driver=dm --dm-db=localhost:5236 --dm-user=SYSDBA --dm-password=Mema_1234 --table_size=250 --tables=25 --events=0 --time=120 oltp_read_only run --auto-inc=0 --threads=32 --percentile=95 --range-selects=0 --skip-trx=1 --report-interval=1 --rand-type=uniform

3)清除数据

./sysbench_daniel --db-driver=dm --dm-db=localhost:5236 --dm-user=SYSDBA --dm-password=Mema_1234 --table_size=250 --tables=25 --events=0 --time=120 oltp_read_only cleanup --auto-inc=0 --threads=32 --percentile=95 --range-selects=0 --skip-trx=1 --report-interval=1

3、纯写测试

1)数据准备

./sysbench_daniel --db-driver=dm --dm-db=localhost:5236 --dm-user=SYSDBA --dm-password=Mema_1234 --table_size=250 --tables=25 --events=0 --time=120 oltp_write_only prepare --auto-inc=0

2)开始测试

./sysbench_daniel --db-driver=dm --dm-db=localhost:5236 --dm-user=SYSDBA --dm-password=Mema_1234 --table_size=250 --tables=25 --events=0 --time=120 oltp_write_only run --auto-inc=0 --threads=32 --percentile=95 --range-selects=0 --skip-trx=1 --report-interval=1 --rand-type=uniform

3)清除数据

./sysbench_daniel --db-driver=dm --dm-db=localhost:5236 --dm-user=SYSDBA --dm-password=Mema_1234 --table_size=250 --tables=25 --events=0 --time=120 oltp_write_only cleanup --auto-inc=0 --threads=32 --percentile=95 --range-selects=0 --skip-trx=1 --report-interval=1

五、指标解析

关注的指标主要有:

指标 说明
response time avg: 平均响应时间(后面的95%的大小可以通过–percentile=98的方式去更改)。
transactions: 精确的说是这一项后面的TPS,但如果使用了–skip-trx=on,这项事务数为0,需要用total number of events去除以总时间,得到tps(其实还可以分为读tps和写tps)。
queries: 用它除以总时间,得到吞吐量QPS。
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服