作为国内数据库的佼佼者,达梦在数据库领域耕耘几十载,产品不断迭代更新,而今在信创的春风下,应用场景更是大幅拓展,发展态势是相当喜人的。随着应用领域的不断延伸,其稳定性和可靠性也得到了显著的提升。当下关于达梦数据库的技术文章也越来越多,本文仅就达梦数据库的系统日志做一些简单的分析。
众所周知,数据库系统日志作为应用运行的第一手资料,在故障排错、性能分析方面都有不可或缺的作用。学会分析系统日志,对提高数据库的运维能力是颇有裨益的。下面我们先来看看达梦数据库的系统日志组成:
1、数据库系统运行日志:
日志位置:安装目录下的log目录下。
日志名称:dm_数据库实例名_YYYYMM.log。
(从日志名称就可以看出,该日志每月轮转一次。)
日志格式:时间戳 [日志级别] 模块 P进程id T线程id 日志信息
日志示例:2022-09-22 19:54:30.619 [ERROR] database P0001565850 T000000000000097448 com_msg_recv failed, errno = 104, desc = Connection reset by peer
日志说明:
1)时间戳的格式可以用正则表达式严格匹配:\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}.\d{3},精确到毫秒。
2)日志级别一般有四类:INFO、WARNING、ERROR和FATAL,严重性逐级递增。
3)进程id有10位数字,不足10位前面补0,线程id有19位数字,不足19位前面补0。达梦数据库是单进程多线程数据库,一般数据库不重启,进程号不会改变。
4)一般ERROR级别的日志都带有errno和desc,这些信息有助于故障分析。
2、数据库工具类运行日志:
日志位置:安装目录下的log目录下。
日志名称:dm_数据库工具名_YYYYMM.log。
日志格式:同1,模块处为工具名称,比如dmrman,dmap等
日志示例:2022-09-22 19:58:33.322 [INFO] dmrman P0000001850 T000000000000013908 fil_sys_destroy
日志说明:该类格式上与系统运行日志基本无差别,只是所记录的信息主要是针对各类数据库工具的,如果在数据库工具运行方面存在问题,可以到这些日志来查找相关信息。
3、Sql日志:
如果将数据库配置文件dm.ini中的参数SVR_LOG设置为1,则可以打开sql日志的记录。
日志位置:安装目录下的log目录下或者sqllog.ini中指定的位置。
日志名称:dm_数据库实例名_YYYYMMdd_时间.log。
日志格式:时间戳 (sql连接相关信息) SQL执行信息
日志示例:2022-09-23 15:56:32.312 (EP[0] sess:0xc27c5618 thrd:4184489 user:SYSDBA trxid:140737489514256 stmt:NULL appname:) TRX: START
日志说明:在sql连接信息中,包含了session id、线程id、用户、trxid等信息,对于详细分析sql执行情况是有价值的,后面的sql执行信息更是可以进行明确的分析定位。对于生产环境业务量大的数据库,sql日志轮转是很快的,日志量也挺大,需要注意定时清理。在sqllog.ini中有一些控制选项,如:SWITCH_MODE,表示日志文件轮转的模式,一般设置为2,按大小切换;SWITCH_LIMIT,表示单个文件大小,通常为256M或512M,不宜过大,具体根据业务量而定;ASYNC_FLUSH,如果为1,表示开启异步写日志模式;FILE_NUM,表示记录的日志文件数,如果存储空间足够,可以适当设大一些,这样保留的日志数据较多。