达梦数据库在初始化实例时,需要注意大小写敏感的设置。大小写敏感只能在初始化数据库的时候设置。
默认为大小写敏感,一旦设置成功就无法修改,如果想要修改,只能重新初始化实例。
大小写敏感主要对哪些会产生影响?
标识符:
"" (界定标识符)括起来,就可以区分大小写,意味着可以创建相同名称不同大小写的表、索引等对象,或者在一张表中拥有不同大小写的列名。数据库用户密码:
模式:
数据管理(业务数据):
查看大小写敏感与否:
select case_sensitive();
如果 CASE_SENSITIVE 的值为 1,代表是大小写敏感,为 0 则代表不敏感。
| 参数 | 函数 | 是否可修改 |
|---|---|---|
| CASE_SENSITIVE | 标识符大小写是否敏感。Y、y、1 表示敏感, N、n、0 表示不敏感,缺省值为 Y。 当大小写敏感时,小写的标识符应用双引号括起,否则被转换为大写; 当大小写不敏感时,系统不自动转换标识符的大小写,系统比较函数会将大写字母全部转为小写字母再进行比较 | 不可修改 |
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
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
| danieldb(大小写敏感) | newdb(大小写不敏感) |
|---|---|
| disql sysdba/Mema_1234@localhost:5236 | disql sysdba/Mema_1234@localhost:6236 |
| select case_sensitive(); | select case_sensitive(); |
| 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)); |
| CREATE TABLE "t1" (id INT, c VARCHAR(50)); | CREATE TABLE "t1" (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)); | 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; |
| 不加双引号: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'; |
| SELECT * FROM t1 WHERE c = 'test1'; | SELECT * FROM t1 WHERE c = 'test1'; |
| SELECT * FROM T1 WHERE c = 'TEST1'; | SELECT * FROM T1 WHERE c = 'TEST1'; |
| SELECT * FROM Tt6 WHERE c = 'test3'; | SELECT * FROM Tt6 WHERE c = 'test3'; |
| SELECT * FROM "Tt6" WHERE c = 'test3'; | SELECT * FROM "Tt6" WHERE c = 'test3'; |
过以上测试,基本已经可以搞清楚大小写是否敏感对于数据库对象以及数据的影响。这里概括以下大小写敏感和不敏感数据库中的表和字段名的处理方式,如下表所示。
drop table T1;
drop TABLE t2;
drop TABLE Tt3;
drop TABLE "T4";
drop TABLE "t5";
drop TABLE "Tt6";
cd /opt/sysbench-master/sysbench-master-dpi/src cp sysbench ./lua/sysbench_daniel
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
进入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即可 |
-- 大小写敏感
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
-- 大小写敏感
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
-- 大小写敏感
-- 大小写不敏感
结论,性能上,相差不大。
./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
./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
./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
./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
./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
./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
./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。 |
文章
阅读量
获赞
