# 数据库参数配置检查

# 前言须知

以下是数据库调优的参数文档,都是经过长期实践总结的成果,请按参数做好配置,防止上线时出现数据库问题。

由于人工检查参数效率过低,我们提供了工具能力:请下载环境检查工具**(链接 (opens new window))**,按手册文档部署扫描,再根据扫描结果做对应的配置调优,提升运维效率!

环境检查工具,针对数据库分析报告示例:

以上检查结果就存在数据库配置问题,检查结果不通过。请根据建议调整数据库配置!

# 1、MySQL数据库检查

MySQL服务要求主要有以下几点(可以在MySQL配置文件中对其进行设置):

  • MySQL的配置文件

Windows下为my.ini文件,Linux系统为my.cnf文件。

  • 数据引擎要求为InnoDB

检查MySQL配置文件的[mysqld]项中default-storage-engine值,检查是否为InnoDB,若不是则调整为InnoDB

  • 字符集要求为utf8

检查MySQL配置文件的[client]、[mysql]项中default-character-set值,以及[mysqld]项中character-set-server值,检查是否为utf8,若不是则调整为utf8;

若使用utf8mb4字符集,请使用mysql5.7或以上版本。

  • 要求不区分表/字段大小写

检查MySQL配置文件[mysqld]项中是否包含lower_case_table_names=1,不包含则添加,包含则保证其值为1;

  • Mysql最大连接数设置

检查MySQL配置文件[mysqld]项的max_connections值,建议配置为max_connections=2000;

  • 安装程序自动创建数据库

可在产品安装的数据库设置界面指定数据库名,将自动创建对应名称的数据库;

  • 修改MySQL事务隔离级别

在MySQL配置文件的[mysqld]项中增加参数:transaction-isolation = READ-COMMITTED

  • 内存参数设置

在MySQL配置文件的[mysqld]项中设置innodb_buffer_pool_size的参数值,此参数主要为设置缓存InnoDB表的索引、数据、插入数据时的缓存大小。 若为专属服务器,则此参数设置为数据库服务器物理内存的60%;

比如:专属数据库服务器总计内存64G,按照物理内存的50%-80%配置,innodb_buffer_pool_size可以设置为40G。

[mysqld]
innodb_buffer_pool_size = 40G
  • 时区设置

MySQL8系列,时区默认为美国时区,中国用户若要正常使用,需修改mysql配置文件在[mysqld]段增加内容:default-time-zone='+8:00'

  • MySQL连接URL配置

如果以上UTF8配置均完成,安装升级还提示“设置MySQL数据库字符集为utf8”,请通过base/conf/datasourceCtp.properties文件修改jdbcurl的值,增加&characterEncoding=UTF-8参数,示例如:jdbc:mysql://127.0.0.1:3308/v8xa8g_release?autoReconnection=true&useUnicode=true&characterEncoding=UTF-8

# 2、Oracle数据库检查

  • Oracle11GR2及后续版本需调整参数deferred_segment_creation为false,调整示例:

alter system set deferred_segment_creation=false scope=spfile;

  • Oracle数据库Timer already cancelled异常解决需要调整jvm参数

编辑ApacheJetspeed/bin/catalina_custom.bat以及catalina_custom.sh文件增加以下jvm参数(如存在则忽略此步操作):

-Doracle.jdbc.useNio=false -Doracle.jdbc.javaNetNio=false

  • Oracle数据库驱动版本检查

检查ApacheJetspeed/lib目录下Oracle数据库驱动,需要匹配Oracle数据库版本号,移除不匹配的classes12.jar、ojdbc6.jar、ojdbc8.jar、ojdbc14.jar,放入匹配Oracle数据库版本号的ojdbc6.jar、ojdbc8.jar、ucp.jar、oraclepki.jar、osdt_cert.jar、osdt_core.jar、ons.jar、simplefan.jar

详细匹配规则:

Oracle Database 10g、11g数据库,驱动文件使用11.2.0.4.0版本的ojdbc6.jar

Oracle Database 12c数据库,驱动文件使用12.2.0.1.0版本的ojdbc8.jar、ucp.jar、oraclepki.jar、osdt_cert.jar、osdt_core.jar、ons.jar、simplefan.jar

Oracle Database 18c数据库,驱动文件使用18.3版本的ojdbc8.jar、ucp.jar、oraclepki.jar、osdt_cert.jar、osdt_core.jar、ons.jar、simplefan.jar

Oracle Database 19c数据库,驱动文件使用19.3到19.10对应版本的ojdbc8.jar、ucp.jar、oraclepki.jar、osdt_cert.jar、osdt_core.jar、ons.jar、simplefan.jar

  • Oracle数据库内存参数

推荐由Oracle DBA管理数据库并完成参数配置优化,若无DBA参与,调整参数之前必须做好备份:

SQL> create pfile='/home/oracle/pfilebak-年月日时分秒.ora' from spfile;

一般情况下,sga大小配置为专属服务器物理内存80%*80%,pga大小配置为80%*20%

以下为单机部署情况下11g以及以上版本参数调整举例,不适用于rac部署环境

show parameter memory_max_target

-- 查询值推荐为0

alter system set memory_max_target=0 scope=spfile;

show parameter memory_target

-- 查询值推荐为0

alter system set memory_target=0 scope=spfile;

show parameter sga_max_size

-- 根据以上公式设置sga的值,以下举例16G

alter system set sga_max_size=16g scope=spfile;

show parameter sga_target

-- 根据以上公式设置sga的值,以下举例16G

alter system set sga_target=16g scope=spfile;

show parameter pga_aggregate_target

-- 根据以上公式设置pga的值,以下举例4G

alter system set pga_aggregate_target=4g scope=spfile;
  • Oracle数据库基本参数

推荐由Oracle DBA管理数据库并完成参数配置优化,若无DBA参与,调整参数之前必须做好备份:

SQL> create pfile='/home/oracle/pfilebak-年月日时分秒.ora' from spfile;

以下为单机部署情况下11g以及以上版本参数调整举例,不适用于rac部署环境

alter system set processes=1000 scope=spfile;
alter system set open_cursors=1000 scope=spfile;
alter system set undo_retention=10800 scope=both;
-- 建议redo日志6组,单个日志由默认50M调整为2048M

  • Oracle数据库表空间使用率

推荐dba管理数据库并完成参数配置优化

以下为单机部署情况下11g以及以上版本参数调整举例,不适用于rac部署环境

-- TEMP表空间大小,推荐优化为30G,磁盘需要有足够空间,路径以具体为准

select tablespace_name,file_name,bytes/1024/1024 file_size,autoextensible from dba_temp_files;

alter database tempfile '/oracle/oradata/ora11g/temp01.dbf' resize 30G;

-- UNDO表空间大小,推荐优化为30G,磁盘需要有足够空间,路径以具体为准

select file_name,tablespace_name,bytes/1024/1024 undo_size from dba_data_files where tabLespace_name='UNDOTBS1';

alter database datafile '/oracle/oradata/ora11g/UNDOTBS01.DBF' resize 30G;

-- 协同服务表空间使用率要求低于60%,注意检查数据库用户中的表是否存在多个表空间中,包括USERS表空间

SELECT UPPER(F.TABLESPACE_NAME) "表空间名",

D.TOT_GROOTTE_MB "表空间大小(M)",

D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",

TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') "使用比",

F.TOTAL_BYTES "空闲空间(M)",

F.MAX_BYTES "最大块(M)"

FROM (SELECT TABLESPACE_NAME,

ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,

ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES

FROM SYS.DBA_FREE_SPACE

GROUP BY TABLESPACE_NAME) F,

(SELECT DD.TABLESPACE_NAME,

ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB

FROM SYS.DBA_DATA_FILES DD

GROUP BY DD.TABLESPACE_NAME) D

WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME

ORDER BY 4 DESC;

SELECT
T.TABLESPACE_NAME,D.FILE_NAME,D.AUTOEXTENSIBLE,D.BYTES,D.MAXBYTES,D.STATUS

FROM DBA_TABLESPACES T,DBA_DATA_FILES D

WHERE T.TABLESPACE_NAME = D.TABLESPACE_NAME

ORDER BY TABLESPACE_NAME,FILE_NAME;

-- 修改表空间数据文件自动扩展举例,路径以实际为准

ALTER DATABASE DATAFILE 'D:\oracle\product\10.2.0\oradata\v3x\V3XSPACE.01.DBF' AUTOEXTEND ON NEXT 64M MAXSIZE UNLIMITED; 

-- 增加V3XSPACE表空间数据文件举例,路径以实际为准

ALTER TABLESPACE V3XSPACE ADD DATAFILE 'D:\oracle\product\10.2.0\oradata\v3x\v3xspace.02.dbf' SIZE 30G AUTOEXTEND ON NEXT 64M MAXSIZE UNLIMITED;

# 3、SQLServer数据库检查

  • 数据库排序规则选择:Chinese_PRC_90_CI_AI

  • 确保系统数据库tempdb空间初始大小在1024M以上;

  • 协同数据库的数据文件、日志文件设置自动增长,增量为固定值不能是百分比;

  • 文件存储路径所在磁盘分区建议保留10G左右磁盘空间被其它文件占用,若出现日志文件耗尽磁盘空间可以剪切这部分文件,做日志收缩处理;

  • 将协同数据库的READ_COMMITTED_SNAPSHOT参数开启
-- 无用户连接协同数据库的情况下,在master数据库中执行以下SQL:
 ALTER DATABASE [协同数据库名] SET READ_COMMITTED_SNAPSHOT ON;

 -- 检查设置是否生效:如下SQL查出来的值1为开启生效,0为未开启。
 select is_read_committed_snapshot_on from sys.databases where name='协同数据库名';
  • 数据库最大服务器内存

如果SQLserver数据库和协同服务集中部署,必须设置数据库使用的最大内存:最大内存 = 服务器物理内存×60%-JVM配置内存

以下截图中19004为修改参考,具体值根据以上公式计算

  • 数据库索引碎片处理

SQL Server Management Studio (SSMS)连接数据库以后,展开数据库,展开ctp_affair表的索引,右键某条索引属性可查看其碎片;

索引碎片比例要求小于60%,若索引碎片大多超过90%,需要重建整个数据库所有索引:索引右键重新生成或者执行重建索引存储过程。

参考致远公司内部讨论[记一个SqlServer索引碎片导致的性能问题]

  • 数据库日志收缩

SQL Server Management Studio (SSMS) 连接数据库以后,数据库属性,日志文件占用磁盘空间很大,如50G或者以上,需要进行日志收缩。

1、停止V5各项服务,备份数据库,重启数据库服务,这时不启动V5各项服务;

2、SQL Server Management Studio,数据库,V5数据库右键属性,选项,恢复模式,由完整更改为简单;

3、V5数据库右键,任务,收缩,文件,文件类型由数据更改为日志,点击确定进行日志收缩;

4、SQL Server Management Studio,数据库,V5数据库右键属性,选项,恢复模式,由简单更改为完整。

# 4、PostgreSQL优化

如果发现协同使用慢,先检查PostgreSQL的内存参数是否够大。

打开配置文件:PostgreSQL安装主目录\data\postgresql.conf,检查并调整下面参数:

-- Shared_buffers的值:若配置文件中无此参数,则追加此参数,建议此值设置为2G以上,如果服务器内存富余可以调更大,配置如下:
Shared_buffers=2048M

-- Max_connections最大连接数的值,建议此值设置为500,配置如下:
Max_connections=500

# 5、检查并清理触发器

  • 各类型数据库中查询触发器脚本或方法未在此文档列出。标准产品未使用触发器,发现触发器引起功能异常或者卡顿,沟通客户删除触发器解决。

  • Sqlserver查看已存在的触发器

执行sql: SELECT * FROM SYSOBJECTS WHERE XTYPE='TR';

查询出是动态表formmain_0065添加了触发器

创建人:zhangshuang
修改人:zhangshuang、het、admin、zhengkejie