外观
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:可以使用以下方法清理归档日志:
使用RMAN删除归档日志
sqlRMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';手动删除归档日志文件(不推荐)
bashrm -f /opt/kingbase/archivelog/arch_*.log
Q:如何查看慢查询日志?
A:可以使用以下方法查看慢查询日志:
直接查看慢查询日志文件
bashtail -f /opt/kingbase/logs/slow.log使用pgBadger分析慢查询日志
bashpgbadger -o slow_query_report.html /opt/kingbase/logs/slow.log
Q:如何配置慢查询阈值?
A:可以使用以下SQL语句配置慢查询阈值:
sql
ALTER SYSTEM SET log_min_duration_statement = 2000;Q:如何查看告警日志?
A:可以使用以下方法查看告警日志:
直接查看告警日志文件
bashtail -f /opt/kingbase/logs/kingbase-$(date +%Y-%m-%d).log使用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:可以使用以下方法查看审计日志:
直接查看审计日志文件
bashtail -f /opt/kingbase/audit/kingbase-audit-$(date +%Y-%m-%d).log使用KEM查看审计日志
Q:V8 R7相比V8 R6在日志管理方面有哪些改进?
A:V8 R7相比V8 R6在日志管理方面的改进包括:
- 增强了日志的并行写入能力
- 支持更多类型的审计日志
- 提供了更丰富的日志监控视图和性能指标
- 优化了日志的存储和管理
- 支持日志的压缩存储
Q:如何优化日志的写入性能?
A:可以通过以下方法优化日志的写入性能:
- 将日志文件放置在高性能存储设备上
- 合理配置日志文件的大小和数量
- 调整日志相关的参数
- 优化数据库的事务设计
- 使用批量写入和异步提交
Q:如何确保日志的安全性?
A:可以通过以下方法确保日志的安全性:
- 合理配置日志文件的权限
- 对敏感日志进行加密存储
- 定期备份日志文件
- 限制日志文件的访问权限
- 配置日志的保留期限
Q:如何监控日志的使用情况?
A:可以通过以下方法监控日志的使用情况:
- 使用SQL语句查询日志相关视图
- 使用监控工具(如Prometheus + Grafana)监控日志指标
- 定期检查日志文件的大小和数量
- 配置日志的告警规则
