
金仓数据库实例初始化的时候会创建一个目录,通常都会在系统配置相关的环境变量$KINGBASEDATA来表示。当数据库初始化完成后,会在这个目录生成相关的子目录以及一些文件。下图展示了金仓数据库的物理结构。

金仓数据库的物理存储结构主要是指硬盘上存储的文件,包括:数据文件、日志文件、参数文件、控制文件、WAL预写日志文件等等。其中日志文件又分为运行日志、WAL预写日志、事务日志和服务器日志。下面重点介绍一下金仓数据库的运行日志文件。
在默认的情况下,运行日志没有开启。通过查看主kingbase.conf文件的配置可以看到相关的参数设置,开启后会自动生成该日志文件。
![]() |
|---|
| 点击这里查看视频讲解:【赵渝强老师】金仓数据库的运行日志文件 |
运行时日志一般是记录数据库服务器与数据库的状态,比如各种错误信息、定位慢查询SQL、数据库的启动关闭信息、发生检查点过于频繁等的告警信息等等。该日志有.csv格式和.log格式,建议使用.csv格式。因为.csv格式一般会按大小和时间自动切割。sys_log是可以被清理删除、压缩打包或者转移,同时不影响数据库的正常运行。当有遇到数据库无法启动或者更改参数没有生效时,第一步就可以查看运行时日志。下面展示了主参数文件kingbase.conf中关于运行日志的配置参数。
log_destination
日志文件的格式,例如:log_destination = 'csvlog'
这将使用CSV格式记录审计日志,并在每行日志信息前添加时间戳、用户ID、数据库名称和进程ID。log_directory
日志文件存储的路径。log_filenam
日志文件的名称。在指定文件名称时可以使用日期的通配符,例如:
log_filename = kingbase-%Y-%m-%d.log'
该格式将日志文件命名为 kingbase-年-月-日.log,如:kingbase-2026-04-13.log。log_truncate_on_rotation
默认值为off。如果设置为on,将以覆盖方式写入日志信息到日志文件。log_rotation_age
保留单个让你走文件的最大时长,默认是1d,也可以是1h、1min或者1s。log_rotation_size
保留单个文件的最大尺寸,默认是10MB。log_min_messages
日志信息的级别,该参数主要支持以下的级别设置:
(*)debug5:最详细的日志级别,记录所有调试信息。
(*)debug4:记录详细的调试信息。
(*)debug3:记录更加详细的调试信息。
(*)debug2:记录非常详细的调试信息。
(*)debug1:记录较为详细的调试信息。
(*)info:记录普通信息。
(*)notice:记录警告信息。
(*)warning:记录警告信息。
(*)error:记录错误信息。
(*)log:记录所有日志信息。log_min_duration_statement
该参数的取值包含以下三种情况:
(*)-1:禁用该参数。
(*)0:将记录所有SQL语句和它们的耗时,
(*)大于0:只记录那些耗时超过(或等于)这个值(ms)的SQL语句。log_checkpoints: 记录检查点信息。
log_connections: 记录每个连接到数据库的客户端的信息。
log_disconnections: 记录每个断开与数据库连接的客户端信息。
log_duration: 记录每个SQL语句的执行时间。
log_error_verbosity: 设置错误信息的详细程度。
log_hostname: 记录每个连接到数据库的客户端主机名。
log_line_prefix: 设置每行日志信息的前缀,可以包括时间戳、用户名、数据库名等信息。
log_lock_waits: 记录等待锁的信息。log_statement
记录每个执行的SQL语句,下面列举了该参数的取值:
(*)none:不记录任何操作。
(*)ddl:记录所有DDL语句,如:create,alter,和drop语句。
(*)mod:记录所有DDL语句,再加上数据修改语句insert,update等。
(*)all:记录所有执行的语句,该参数值可以跟踪整个数据库执行的SQL语句,但会对数据库性能产生较大影响,生产环境不建议配置此值。log_temp_files: 记录使用临时文件的信息。
log_timezone: 设置日志记录的时区信息。
一个推荐的KingBase运行日志的参数配置如下:
logging_collector = on
log_destination = 'csvlog'
log_directory = 'logs'
log_filename = 'kingbase-%Y-%m-%d_%H%M%S.csv'
log_truncate_on_rotation = on
log_connections = on
log_disconnections = on
log_statement = ddl
log_min_duration_statement = 60s
log_checkpoints = on
log_lock_waits = on
deadlock_timeout = 1s
这里的参数设置还将死锁的超时时间设置为了1秒钟。这里的log_directory默认值是$KINGBASE_DATA/sys_log/。需要将其注释掉。当重启KingBase完成后,尝试创建一张简单的表,例如:
[kingbase@kingbase ~]$ ksql -U system -d kingbase
用户 system 的口令:
授权类型: 企业版.
输入 "help" 来获取帮助信息.kingbase=# \c scott
您现在以用户名"system"连接到数据库"scott"。scott=# create table mytestaudit as select * from emp;
查看logs目录下生成的日志文件,如下:
[kingbase@kingbase logs]$ pwd
/home/kingbase/kdb/kes_oracle_instance/logs[kingbase@kingbase logs]$ ll
总用量 8
-rw------- 1 kingbase kingbase 187 4月 23 18:29 kingbase-2026-04-23_182958.csv
-rw------- 1 kingbase kingbase 2006 4月 23 18:30 kingbase-2026-04-23_182958.csv.csv
查看日志文件kingbase-2026-04-23_182958.csv.csv的内容,将得到如下的审计日志信息:
...
2026-04-23 18:30:34.089 CST,"system","scott",16020,"[local]",68d276bd.3e94,3,
"CREATE TABLE AS",2026-04-23 18:30:21 CST,6/0,0,LOG,00000,"
声明:create table mytestaudit as select * from emp;",,,,,,,,,"ksql"
...

