Skip to content

KingBaseES 日志优化

日志概述

KingBaseES 包含多种类型的日志,每种日志都有不同的用途和优化策略:

  • 重做日志(Redo Log):记录数据库的所有修改操作,用于崩溃恢复和主备复制
  • 归档日志(Archive Log):重做日志的归档文件,用于时间点恢复和灾备
  • 慢查询日志(Slow Query Log):记录执行时间超过阈值的SQL语句,用于性能分析
  • 告警日志(Alert Log):记录数据库的警告和错误信息,用于故障诊断
  • 审计日志(Audit Log):记录数据库的访问和操作审计信息,用于安全审计
  • 监听日志(Listener Log):记录监听器的连接信息,用于连接故障诊断

重做日志优化

重做日志文件配置

合理配置重做日志文件的大小、数量和位置,可以提高数据库的性能和可靠性。

重做日志文件大小

重做日志文件大小的配置应考虑以下因素:

  • 数据库的事务量和修改频率
  • 主备复制的延迟要求
  • 恢复时间目标(RTO)

建议单个重做日志文件大小设置为1GB-4GB,对于大型数据库,可以适当增大重做日志文件大小。

重做日志文件数量

重做日志文件数量的配置应考虑以下因素:

  • 重做日志文件的大小
  • 数据库的事务量和修改频率
  • 归档日志的生成频率

建议至少配置3-5个重做日志文件组,每个组包含1-2个成员。

sql
-- 查看当前重做日志配置
SELECT * FROM v$log;
SELECT * FROM v$logfile;

-- 添加重做日志组
ALTER DATABASE ADD LOGFILE GROUP 4 ('/opt/kingbase/redolog/redo04a.log', '/opt/kingbase/redolog/redo04b.log') SIZE 2G;

-- 修改重做日志文件大小(需要重建数据库)
-- 1. 备份数据库
-- 2. 关闭数据库
-- 3. 重建控制文件,指定新的重做日志大小
-- 4. 恢复数据库

重做日志位置优化

将重做日志文件放置在高性能存储设备上,可以提高数据库的写入性能。建议:

  • 将重做日志文件放置在SSD存储设备上
  • 将不同重做日志组的文件放置在不同的物理存储设备上
  • 避免将重做日志文件与数据文件放在同一存储设备上

重做日志相关参数优化

调整重做日志相关的参数,可以提高数据库的性能和可靠性。

参数名称描述建议值
fast_start_mttr_target控制实例恢复的目标时间(秒)60-300
log_buffer重做日志缓冲区大小16MB-128MB
commit_logging提交日志写入方式batch(批量写入)
commit_wait提交等待方式nowait(异步等待)
sql
-- 修改重做日志相关参数
ALTER SYSTEM SET fast_start_mttr_target = 120;
ALTER SYSTEM SET log_buffer = '64MB';
ALTER SYSTEM SET commit_logging = 'batch';
ALTER SYSTEM SET commit_wait = 'nowait';

归档日志优化

归档日志模式配置

根据业务需求选择合适的归档日志模式:

  • 归档模式(ARCHIVELOG):适用于生产环境,支持时间点恢复
  • 非归档模式(NOARCHIVELOG):适用于测试环境,不支持时间点恢复
sql
-- 查看当前归档模式
SELECT log_mode FROM v$database;

-- 启用归档模式
ALTER DATABASE ARCHIVELOG;

-- 禁用归档模式
ALTER DATABASE NOARCHIVELOG;

归档日志位置配置

合理配置归档日志的位置,可以提高归档效率和可靠性。

本地归档位置

建议将归档日志存储在与数据文件不同的物理存储设备上,以提高I/O并行度和可靠性。

sql
-- 配置本地归档位置
ALTER SYSTEM SET log_archive_dest_1 = 'LOCATION=/opt/kingbase/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=kingbase';

远程归档位置

对于主备架构,建议配置远程归档位置,用于主备复制和灾备。

sql
-- 配置远程归档位置
ALTER SYSTEM SET log_archive_dest_2 = 'SERVICE=standby ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby';

归档日志删除策略

配置合理的归档日志删除策略,可以避免归档日志占用过多的存储空间。

手动删除归档日志

sql
-- 删除指定时间之前的归档日志
RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

-- 删除指定序列号之前的归档日志
RMAN> DELETE ARCHIVELOG UNTIL SEQUENCE 1000;

自动删除归档日志

配置RMAN的保留策略,实现归档日志的自动删除。

sql
-- 配置归档日志保留策略为7天
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;

-- 启用归档日志的自动删除
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 1 TIMES TO DISK;

慢查询日志优化

慢查询日志配置

合理配置慢查询日志参数,可以提高性能分析的效率和准确性。

参数名称描述建议值
log_min_duration_statement慢查询阈值(毫秒)1000-5000
log_statement记录的SQL语句类型mod(只记录修改操作)或all(记录所有操作)
log_line_prefix日志行前缀格式'%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '
log_temp_files记录临时文件大小阈值(KB)10240
sql
-- 修改慢查询日志相关参数
ALTER SYSTEM SET log_min_duration_statement = 2000;
ALTER SYSTEM SET log_statement = 'mod';
ALTER SYSTEM SET log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h ';
ALTER SYSTEM SET log_temp_files = 10240;

慢查询日志分析

定期分析慢查询日志,可以发现和解决性能问题。建议使用以下工具进行分析:

  • KingBaseES Manager(KEM):提供可视化的慢查询分析功能
  • pgBadger:开源的PostgreSQL慢查询日志分析工具,适用于KingBaseES
  • 自定义脚本:根据业务需求编写自定义的慢查询分析脚本
bash
# 使用pgBadger分析慢查询日志
pgbadger -o slow_query_report.html /opt/kingbase/logs/slow.log

告警日志优化

告警日志配置

合理配置告警日志参数,可以提高故障诊断的效率。

参数名称描述建议值
log_destination日志输出目标stderr,csvlog
logging_collector是否启用日志收集器on
log_directory日志目录/opt/kingbase/logs
log_filename日志文件名格式kingbase-%Y-%m-%d.log
log_rotation_age日志文件轮换时间1d
log_rotation_size日志文件轮换大小100MB
log_min_messages日志级别warning
log_min_error_statement错误语句日志级别error
sql
-- 修改告警日志相关参数
ALTER SYSTEM SET log_destination = 'stderr,csvlog';
ALTER SYSTEM SET logging_collector = on;
ALTER SYSTEM SET log_directory = '/opt/kingbase/logs';
ALTER SYSTEM SET log_filename = 'kingbase-%Y-%m-%d.log';
ALTER SYSTEM SET log_rotation_age = '1d';
ALTER SYSTEM SET log_rotation_size = 100MB;
ALTER SYSTEM SET log_min_messages = 'warning';
ALTER SYSTEM SET log_min_error_statement = 'error';

告警日志监控

配置告警日志的监控和通知,可以及时发现和处理数据库故障。建议:

  • 使用监控工具(如Prometheus + Grafana)监控告警日志
  • 配置告警规则,当出现特定错误时发送通知
  • 定期检查告警日志,及时处理警告和错误信息

审计日志优化

审计日志配置

根据安全合规要求,配置合适的审计日志参数。

参数名称描述建议值
audit_enabled是否启用审计on
audit_destination审计日志目标file
audit_directory审计日志目录/opt/kingbase/audit
audit_filename审计日志文件名格式kingbase-audit-%Y-%m-%d.log
audit_rotation_age审计日志轮换时间1d
audit_rotation_size审计日志轮换大小100MB
audit_statement审计语句类型'ddl,function,role,login'
sql
-- 修改审计日志相关参数
ALTER SYSTEM SET audit_enabled = on;
ALTER SYSTEM SET audit_destination = 'file';
ALTER SYSTEM SET audit_directory = '/opt/kingbase/audit';
ALTER SYSTEM SET audit_filename = 'kingbase-audit-%Y-%m-%d.log';
ALTER SYSTEM SET audit_rotation_age = '1d';
ALTER SYSTEM SET audit_rotation_size = 100MB;
ALTER SYSTEM SET audit_statement = 'ddl,function,role,login';

审计日志存储策略

合理配置审计日志的存储策略,可以提高审计日志的安全性和可管理性。

  • 定期归档审计日志
  • 对审计日志进行加密存储
  • 限制审计日志的访问权限
  • 配置审计日志的保留期限

版本差异

V8 R6 特性

  • 支持基本的日志配置和管理
  • 支持重做日志、归档日志、慢查询日志和告警日志
  • 提供了基本的日志查询视图

V8 R7 特性

  • 增强了日志的并行写入能力
  • 支持更多类型的审计日志
  • 提供了更丰富的日志监控视图和性能指标
  • 优化了日志的存储和管理
  • 支持日志的压缩存储

最佳实践

日志文件命名规范

使用清晰、统一的日志文件命名规范,便于管理和维护。建议命名格式为:

<日志类型>-<实例名>-<YYYY-MM-DD>.log

例如:

  • redo-kingbase-2023-06-01.log
  • archive-kingbase-2023-06-01.log
  • slow-kingbase-2023-06-01.log
  • alert-kingbase-2023-06-01.log

日志文件权限配置

合理配置日志文件的权限,可以提高日志文件的安全性。建议:

  • 将日志文件的所有者设置为kingbase用户
  • 将日志文件的权限设置为600或640
  • 限制日志文件的访问权限,只有授权用户可以访问

定期备份日志文件

定期备份日志文件,确保日志数据的安全性和可恢复性。建议:

  • 对告警日志和审计日志进行每日备份
  • 对慢查询日志进行每周备份
  • 定期测试日志备份的可恢复性

监控日志性能

定期监控日志的性能指标,及时发现和解决性能问题。建议监控以下指标:

  • 重做日志写入吞吐量
  • 重做日志切换频率
  • 归档日志生成速率
  • 慢查询日志生成速率
  • 日志文件大小和数量

常见问题(FAQ)

Q:如何查看当前重做日志的状态?

A:可以使用以下SQL语句查看当前重做日志的状态:

sql
SELECT group#, sequence#, status, bytes/1024/1024 AS size_mb FROM v$log;
SELECT group#, member FROM v$logfile;

Q:如何切换重做日志?

A:可以使用以下SQL语句手动切换重做日志:

sql
ALTER SYSTEM SWITCH LOGFILE;

Q:如何清理归档日志?

A:可以使用以下方法清理归档日志:

  1. 使用RMAN删除归档日志

    sql
    RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
  2. 手动删除归档日志文件(不推荐)

    bash
    rm -f /opt/kingbase/archivelog/arch_*.log

Q:如何查看慢查询日志?

A:可以使用以下方法查看慢查询日志:

  1. 直接查看慢查询日志文件

    bash
    tail -f /opt/kingbase/logs/slow.log
  2. 使用pgBadger分析慢查询日志

    bash
    pgbadger -o slow_query_report.html /opt/kingbase/logs/slow.log

Q:如何配置慢查询阈值?

A:可以使用以下SQL语句配置慢查询阈值:

sql
ALTER SYSTEM SET log_min_duration_statement = 2000;

Q:如何查看告警日志?

A:可以使用以下方法查看告警日志:

  1. 直接查看告警日志文件

    bash
    tail -f /opt/kingbase/logs/kingbase-$(date +%Y-%m-%d).log
  2. 使用KEM查看告警日志

Q:如何配置日志轮换?

A:可以使用以下SQL语句配置日志轮换:

sql
ALTER SYSTEM SET log_rotation_age = '1d';
ALTER SYSTEM SET log_rotation_size = 100MB;

Q:如何启用审计日志?

A:可以使用以下SQL语句启用审计日志:

sql
ALTER SYSTEM SET audit_enabled = on;

Q:如何查看审计日志?

A:可以使用以下方法查看审计日志:

  1. 直接查看审计日志文件

    bash
    tail -f /opt/kingbase/audit/kingbase-audit-$(date +%Y-%m-%d).log
  2. 使用KEM查看审计日志

Q:V8 R7相比V8 R6在日志管理方面有哪些改进?

A:V8 R7相比V8 R6在日志管理方面的改进包括:

  • 增强了日志的并行写入能力
  • 支持更多类型的审计日志
  • 提供了更丰富的日志监控视图和性能指标
  • 优化了日志的存储和管理
  • 支持日志的压缩存储

Q:如何优化日志的写入性能?

A:可以通过以下方法优化日志的写入性能:

  1. 将日志文件放置在高性能存储设备上
  2. 合理配置日志文件的大小和数量
  3. 调整日志相关的参数
  4. 优化数据库的事务设计
  5. 使用批量写入和异步提交

Q:如何确保日志的安全性?

A:可以通过以下方法确保日志的安全性:

  1. 合理配置日志文件的权限
  2. 对敏感日志进行加密存储
  3. 定期备份日志文件
  4. 限制日志文件的访问权限
  5. 配置日志的保留期限

Q:如何监控日志的使用情况?

A:可以通过以下方法监控日志的使用情况:

  1. 使用SQL语句查询日志相关视图
  2. 使用监控工具(如Prometheus + Grafana)监控日志指标
  3. 定期检查日志文件的大小和数量
  4. 配置日志的告警规则