DM、Oracle、Mysql和PostgreSQL数据库重要参数对比
前言
数据库在安装完成之后通常都会配置一些基础的参数用于控制和管理数据库行为,其中有些参数在配置完成后若要修改则需要重启数据库才能生效,甚至一些参数在完成初始化之后无法修改,这些参数在生产环境中尤其需要关注,需要事先就确定好,避免后续遇到需要修改时影响到生产环境的使用。对于这些参数我们在几个常用数据库之间对一个对比,来看下各个数据库都是如何进行配置和管理的。
配置文件
数据库安装完成后都有自己的配置文件用以记录当下数据库的各个参数配置。
-
达梦
有dm.ini、dmarch.ini、dmmal.ini、sqllog.ini等,其中dm.ini是主要的参数配置文件。 -
Oracle
有spfile和pfile文件,其中spfile属于服务器参数文件,是二进制格式,不能使用文本编辑器修改,可以使用alter system命令修改文件中的参数,默认名称为spfile.ora;pfile属于初始化参数文件,是文本格式,可以使用文本编辑修改其中的内容,默认名称为init.ora。 -
Mysql
主要是配置my.cnf文件,其中也是配置了动态参数和静态参数。 -
PostgreSQL
主要是配置postgresql.conf文件。
数据库基础
1、数据库名称
- 达梦是在用dminit命令初始化数据库定义,参数为
DB_NAME
,缺省值为DAMENG
; - Oracle的
DB_NAME
是写在参数文件spfile/pfile中,一般缺省为orcl
; - Mysql中数据库名称更倾向于达梦和Oracle数据库中的schema名,一般可以直接通过
show databases;
命令来查看; - PostgreSQL的数据库名称与Mysql类似,在登录数据库之后可以通过元命令
\l
等方式查看。
2、实例名
- 达梦的实例名也是在dminit命令初始化时定义,参数为
INSTANCE_NAME
,缺省为DMSERVER
,记录在dm.ini参数文件中; - Oracle中
INSTANCE_NAME
是写在参数文件中,可以与数据库名相同也可以不同,不同于数据库名称,实例名是可以修改的,在操作系统中实例名又可以用Oracle_SID
来描述; - Mysql中对于实例名也没有具体的定义,还是统一使用
show databases
来查看到的数据库名来区分; - PostgreSQL对于实例名同样没有具体的定义,不过可以在PG中若需要配置两个实例一般会通过创建不同的数据库存储目录和不同的端口号来进行区分,从而实现一台服务器上运行两个PG数据库实例。
3、端口
数据库对外服务的连接端口,几个数据库都有此参数,参数名称分别为:
- 达梦:
PORT_NUM
,缺省为5236
; - Oracle:这里是指数据库实例端口,在listener.ora文件中
port
默认为1521
; - Mysql:在my.cnf文件中
port
默认为3306
; - PostgreSQL:在postgresql.conf文件中
port
默认为5432
。
4、存储目录
- 达梦中
SYSTEM_PATH
系统库目录一般就是数据文件等存储的路径; - Oracle的控制文件、数据文件和日志文件一般是分开存储的,分别存储在$ORACLE_HOME/dbs、$ORACLE_HOME/oradata和$ORACLE_HOME/rdbms的db_name实例名称的目录下;
- Mysql中在my.cnf里面通过参数
datadir
来定义数据文件存储的位置; - PostgreSQL是在postgresql.conf文件中通过
data_directory
参数来定义数据存储的目录。
5、数据库存储
- 达梦中有
page_zise
和extent_size
分别表示数据页大小和数据文件使用的簇大小,默认分别为8KB和16页,建议都设置成32; - 在Oracle中Block是数据库存储数据的最小单位,影响其大小的参数为
DB_BLOCK_SIZE
,单位是bytes,默认值是8192; - Mysql中数据页是存储的最小单位,参数为
innodb_page_size
,默认值为16KB; - PostgreSQL中使用
page_size
参数来控制数据页大小,默认是8KB,在编译时可以进行调整,最大32KB。
6、大小写敏感
- 达梦针对大小写敏感的配置设置了参数
CASE_SENSITIVE
,在dminit命令初始化数据库时定义,可选值:Y/N,1/0; - Oracle中在数据库名、表名、字段名时默认是使用大写,若需创建小写的字段名等,需加双引号;而在针对字段内容的字符串时是区分大小写的;
- Mysql在Linux平台下默认是区分大小写的,并且提供了参数
lower_case_table_names
来进行控制,0代表大小写敏感,1则代表大小写不敏感; - PostgreSQL是对表名、字段名都是区分大小写的,但是在SQL语句中对大小写不敏感,若区分大小写的情况下,需加双引号。
7、字符集设置
- 达梦在用dminit命令初始化数据库时通过定义
CHARSET/UNICODE_FLAG
参数来设置数据库字符集,可选值:0[GB18030],1[UTF-8],2[EUC-KR]; - Oracle中数据库的字符集由
NLS_CHARACTERSET
参数来配置,同时还需要配置客户端应用程序的NLS_LANG
参数与之相符; - Mysql中影响字符集的参数主要有:
character_set_client
代表Mysql认为来自客户端的数据所使用的字符集,character_set_database
代表DB默认的字符集,character_set_server
代表Mysql服务器默认的字符集; - PostgreSQL主要是通过initdb命令在初始化数据库时添加
-E
或者-encoding
选项来设置数据库的字符集,在登录数据库后可以通过show server_encoding
查看服务器实例字符集,通过show client_encoding
查看客户端字符集。
8、VARCHAR类型长度
- 达梦在用dminit命令初始化数据库时通过定义
LENGTH_IN_CHAR
参数来定义VARCHAR类型长度是否以字符为单位,可选值:Y/N,1/0; - Oracle中通过参数
NLS_LENGTH_SEMANTICS
来控制char和varchar2两种字符型是以字节为长度还是以字符为长度,值byte代表以字节为长度,char代表以字符为长度; - Mysql中时设置的VARCHAR字符型长度在5.0版本之后默认是以字符为单位的;
- PotgreSQL中设置的VARCHAR字符型长度也是默认以字符为单位的,至于一个字符等于多少字节还会收到字符集的影响,例如UTF8下,一个字符等于3个字节。
连接信息
在连接信息有关参数中,常用且重要的参数主要是最大连接数
。
- 达梦中通过参数
MAX_SESSIONS
来定义最大连接数; - Oracle中最大连接数为
processes
; - Mysql中最大连接数为
max_connections
; - PostgreSQL中最大连接数参数也是
max_connections
。
内存
对于数据库所使用的内存也有细致的划分,如共享内存池等,这里主要说明数据库所能使用服务器内存的最大值。
- 达梦中有
BUFFER
参数,系统缓冲区大小,单位MB。推荐值:系统缓冲区大小为可用物理内存的60%~80%; - Oracle中的内存参数也比较多,主要是SGA和PGA即系统全局区和进程全局区,影响的主要参数有
sga_max_size
和pga_aggregate_target
,还有参数MEMORY_MAX_TARGET
代表oracle实例的可以达到的最大内存大小; - Mysql中有
innodb_buffer_pool_size
参数,用于缓存索引和数据的内存大小,还有操作系统和数据库的其他进程使用,一般大小设置为总内存的3/4至4/5; - PostgreSQL中有
shared_buffers
参数,共享内存缓冲区,决定了数据库能够使用的专用缓存大小,一般会设置为系统内存的25%,由于PG还依赖于操作系统的缓存,大于内存40%的shared_buffers并不会带来性能的提升。
Oracle、Mysql和PostgreSQL迁移到达梦数据初始化参数调整
1、说明
达梦数据库安装完成后可以使用dminit
命令来进行数据库的初始化,通过dminit help
可以查看在初始化中能事先定义的参数配置:
通常我们主要预会配置PAGE_SIZE
、EXTENT_SIZE
、CASE_SENSITIVE
、CHARSET
、LENGTH_IN_CHAR
几个参数,即数据页大小、使用的簇大小、大小写是否敏感、字符集和VARCHAR类型长度是否以字符为单位,所以在将Oracle、Mysql和PostgreSQL数据库迁移至达梦数据库时需要先考虑这些参数的配置。
-
Oracle迁移至达梦
登录Oracle数据库查看以上所需参数:
SELECT value FROM v$parameter WHERE name = 'db_block_size';
查看数据页大小;
默认字段存储内容是有大小写敏感;
SELECT value FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET';
查看数据库字符集;
SELECT value FROM nls_session_parameters WHERE parameter = 'NLS_LENGTH_SEMANTICS';
查看数据库VARCHAR字符类型长度是否以字符为单位;
将上述查询结果相结合后初始化达梦数据库:
dminit path=/data/dmdata page_size=8 extent_size=16 case_sensitive=1 charset=1 length_in_char=1
-
Mysql迁移至达梦
登录Mysql数据库后查看以上所需参数:
SHOW VARIABLES LIKE 'innodb_page_size';
查看数据页大小;
SHOW VARIABLES LIKE 'lower_case_table_names';
查看大小写是否敏感;
SHOW VARIABLES LIKE '%character%';
查看数据库字符集;
在5.0版本之后Mysql默认VARCHAR字符类型长度是以字符为单位;
将上述查询结果相结合后初始化达梦数据库:
dminit path=/data/dmdata page_size=16 extent_size=32 case_sensitive=1 charset=1 length_in_char=1
-
PostgreSQL迁移至达梦
登录PostgreSQL数据库后查看以上所需参数:
show page_size;
查看数据页大小;
在迁移时PG对表名、字段名等时区分大小写的;
show server_encoding;
查看数据库字符集;
PG中设置的VARCHAR字符型长度是默认以字符为单位的;
将上述查询结果相结合后初始化达梦数据库:
dminit path=/data/dmdata page_size=8 extent_size=16 case_sensitive=1 charset=1 length_in_char=1
2、总结
PAGE_SIZE | 大小写敏感 | 字符集 | VARCHAR字符类型长度单位 | 迁移至DM默认建议 | |
---|---|---|---|---|---|
Oracle | SELECT value FROM v$parameter WHERE name = 'db_block_size'; | 默认存储内容大小写敏感 | SELECT value FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET'; | SELECT value FROM nls_session_parameters WHERE parameter = 'NLS_LENGTH_SEMANTICS'; | page_size=32 case_sensitive=1 charset=0 length_in_char=0 |
Mysql | SHOW VARIABLES LIKE 'innodb_page_size'; | SHOW VARIABLES LIKE 'lower_case_table_names'; | SHOW VARIABLES LIKE '%character%'; | 在5.0版本之后Mysql默认VARCHAR字符类型长度是以字符为单位 | page_size=32 case_sensitive=0 charset=1 length_in_char=1 |
PostgreSQL | show page_size; | 在SQL中不区分大小写 | show server_encoding; | 默认以字符为单位 | page_size=32 case_sensitive=0 charset=1 length_in_char=1 |
SQLserver | 页的大小为8KB | 与数据库和字段的COLLATE属性有关,默认不敏感 | SELECT DATABASEPROPERTYEX('YourDatabaseName', 'Collation') AS DefaultCharacterSet; | 默认以字节为单位 | page_size=32 case_sensitive=0 charset=1 length_in_char=0 |
[NOTE]
以上建议是在默认缺省值的前提下,实际还需要根据原数据库查询结果来做对应,对于DM来说case_sensitive值为0代表大小写不敏感,值为1代表大小写敏感;charset值为0代表GB18038字符集,值为1代表UTF-8字符集,值为2代表EUK-KR字符集;length_in_char值为0代表以字节为单位,值为1代表以字符为单位。
以上是在初始化数据库时预先配置了对应的参数,当然在实际迁移的过程中对于像数据库名、实例名、最大连接数、内存参数等可以参照原数据库再结合实际需求来做调整。
更多的内容可以登录达梦的社区进行查看:https://eco.dameng.com