Oracle 可观测最佳实践

简介

Oracle 数据库是一种广泛使用的商业关系数据库管理系统(RDBMS),由甲骨文公司(Oracle Corporation)开发。它支持 SQL 语言,能够存储和管理大量数据,并提供高级数据管理功能,如数据仓库、联机事务处理(OLTP)和复杂的查询处理。

监控 Oracle 数据库的关键指标对于确保数据库的性能、稳定性和安全性至关重要。通过实时监控,可以及时发现并解决性能瓶颈、资源不足、查询效率低下等问题,从而优化数据库响应时间和处理能力。

本文主要介绍观测云采集器 DataKit 直采 Oracle 相关指标,以及如何日常故障排查。

观测云

观测云是一个统一实时监测平台,它提供全面的系统可观测性解决方案,帮助用户快速实现对云平台、云原生、应用及业务的监控需求。观测云的核心功能包括:基础设施监测,日志采集和分析,用户访问监测(RUM),应用性能监测(APM),服务可用性监测(拨测),安全巡检,智能监控等等。

DataKit 自身提供 Oracle 指标和日志的采集,安装好 DataKit 之后,开通 Oracle 采集器,即可采集 Oracle 指标和日志到观测云。下面是在 Windows 主机中,部署 DataKit 并开通 Oracle 采集器的示例。

环境介绍

  • DataKit:v1.62.0
  • Oracle:v19c

部署 DataKit

登录观测云控制台,点击「集成」 - 「DataKit」 - 「Windows」,复制安装命令,在主机中必须以管理员运行 PowerShell 进行安装。

创建监控账号

如果是使用单 PDB 或者非 CDB 实例,一个本地用户(local user)就足够了(用 sys 管理员账号来创建并授权,避免出现权限不足等问题):

复制代码
-- Create the datakit user. Replace the password placeholder with a secure password.
CREATE USER datakit IDENTIFIED BY <PASSWORD>;

-- Grant access to the datakit user.
GRANT CONNECT, CREATE SESSION TO datakit;
GRANT SELECT_CATALOG_ROLE to datakit;
GRANT SELECT ON DBA_TABLESPACE_USAGE_METRICS TO datakit;
GRANT SELECT ON DBA_TABLESPACES TO datakit;
GRANT SELECT ON DBA_USERS TO datakit;
GRANT SELECT ON SYS.DBA_DATA_FILES TO datakit;
GRANT SELECT ON V_$ACTIVE_SESSION_HISTORY TO datakit;
GRANT SELECT ON V_$ARCHIVE_DEST TO datakit;
GRANT SELECT ON V_$ASM_DISKGROUP TO datakit;
GRANT SELECT ON V_$DATABASE TO datakit;
GRANT SELECT ON V_$DATAFILE TO datakit;
GRANT SELECT ON V_$INSTANCE TO datakit;
GRANT SELECT ON V_$LOG TO datakit;
GRANT SELECT ON V_$OSSTAT TO datakit;
GRANT SELECT ON V_$PGASTAT TO datakit;
GRANT SELECT ON V_$PROCESS TO datakit;
GRANT SELECT ON V_$RECOVERY_FILE_DEST TO datakit;
GRANT SELECT ON V_$RESTORE_POINT TO datakit;
GRANT SELECT ON V_$SESSION TO datakit;
GRANT SELECT ON V_$SGASTAT TO datakit;
GRANT SELECT ON V_$SYSMETRIC TO datakit;
GRANT SELECT ON V_$SYSTEM_PARAMETER TO datakit;

如果想监控来自 CDB 和所有 PDB 中的表空间(Table Spaces),需要一个有合适权限的公共用户(common user):

复制代码
-- Create the datakit user. Replace the password placeholder with a secure password.
CREATE USER datakit IDENTIFIED BY <PASSWORD>;

-- Grant access to the datakit user.
ALTER USER datakit SET CONTAINER_DATA=ALL CONTAINER=CURRENT;
GRANT CONNECT, CREATE SESSION TO datakit;
GRANT SELECT_CATALOG_ROLE to datakit;
GRANT SELECT ON v_$instance TO datakit;
GRANT SELECT ON v_$database TO datakit;
GRANT SELECT ON v_$sysmetric TO datakit;
GRANT SELECT ON v_$system_parameter TO datakit;
GRANT SELECT ON v_$session TO datakit;
GRANT SELECT ON v_$recovery_file_dest TO datakit;
GRANT SELECT ON v_$active_session_history TO datakit;
GRANT SELECT ON v_$osstat TO datakit;
GRANT SELECT ON v_$restore_point TO datakit;
GRANT SELECT ON v_$process TO datakit;
GRANT SELECT ON v_$datafile TO datakit;
GRANT SELECT ON v_$pgastat TO datakit;
GRANT SELECT ON v_$sgastat TO datakit;
GRANT SELECT ON v_$log TO datakit;
GRANT SELECT ON v_$archive_dest TO datakit;
GRANT SELECT ON v_$asm_diskgroup TO datakit;
GRANT SELECT ON sys.dba_data_files TO datakit;
GRANT SELECT ON DBA_TABLESPACES TO datakit;
GRANT SELECT ON DBA_TABLESPACE_USAGE_METRICS TO datakit;
GRANT SELECT ON DBA_USERS TO datakit;

注意:上述的 SQL 语句由于 Oracle 版本的原因部分可能会出现 "表不存在" 等错误,忽略即可。

DataKit 配置采集器

进入 DataKit 安装目录 C:\Program Files\datakit\conf.d\db ,复制 conf.d 目录下的配置文件并命名为 oracle.conf 。 修改配置文件中的连接信息。

复制代码
[[inputs.oracle]]
  # host name
  host = "localhost"

  ## port
  port = 1521

  ## user name
  user = "datakit"

  ## password
  password = "<PASS>"

  ## service
  service = "XE"

  ## interval
  interval = "10s"

  ## connection timeout
  connect_timeout = "30s"

  ## slow query time threshold defined. If larger than this, the executed sql will be reported.
  slow_query_time = "0s"

  ## Set true to enable election
  election = true

  ## Run a custom SQL query and collect corresponding metrics.
  # [[inputs.oracle.custom_queries]]
  #   sql = '''
  #     SELECT
  #       GROUP_ID, METRIC_NAME, VALUE
  #     FROM GV$SYSMETRIC
  #   '''
  #   metric = "oracle_custom"
  #   tags = ["GROUP_ID", "METRIC_NAME"]
  #   fields = ["VALUE"]

  [inputs.oracle.tags]
    # some_tag = "some_value"
    # more_tag = "some_other_value"

配置完成后,重启 DataKit 即可。

仪表板

在观测云的「场景」 - 「新建仪表板」,搜索"Oracle",选择 "Oracle监控视图" ,即可查看采集上来的 Oracle 指标数据。

慢查询支持

DataKit 可以将执行超过用户自定义时间的 SQL 语句报告给观测云,并在日志中显示,sourceoracle_log

该功能默认情况下是关闭的,用户可以在 Oracle 的配置文件中将其打开,方法如下:

slow_query_time 的值从 0s 改成用户心中的阈值,最小值是 1 毫秒。 一般推荐 10 秒。

指标

以下所有数据采集,默认会追加全局选举 tag,也可以在配置中通过 [inputs.oracle.tags] 指定其它标签。

复制代码
 [inputs.oracle.tags]
  # some_tag = "some_value"
  # more_tag = "some_other_value"
  # ...
oracle_process
指标名 描述 类型 单位
pga_alloc_mem 按进程分配的 PGA 内存 float B
pga_freeable_mem 按进程释放的 PGA 内存 float B
pga_max_mem 进程分配的 PGA 最大内存 float B
pga_used_mem 进程使用的 PGA 内存 float B
pid Oracle 进程标识符 int -
oracle_tablespace
指标名 描述 类型 单位
in_use 已用空间百分比,作为最大可能表空间大小的函数 float 百分比
off_use 表空间占用的总空间,以数据库块为单位 float B
ts_size 表空间大小 float B
pga_used_mem 进程使用的 PGA 内存 float B
used_space 已用空间 float B
oracle_system
指标名 描述 类型 单位
active_sessions 活动会话数 float count
buffer_cachehit_ratio 缓冲区缓存命中率 float 百分比
cache_blocks_corrupt 损坏的缓存块 float count
cache_blocks_lost 丢失缓存块 float count
consistent_read_changes 每秒一致性读取更改 float count
consistent_read_gets 每秒一致性读取获取 float count
cursor_cachehit_ratio 游标缓存命中率 float 百分比
database_cpu_time_ratio 数据库 CPU 时间比率 float 百分比
database_wait_time_ratio 每秒内存排序数 float 百分比
db_block_changes 每秒数据库数据块更改数 float count
db_block_gets 数据库块每秒获取数 float count
disk_sorts 每秒磁盘排序数 float count
enqueue_timeouts 每秒排队超时 float count
execute_without_parse 在没有解析比率的情况下执行 float count
gc_cr_block_received 收到 GC CR 块 float count
host_cpu_utilization 主机 CPU 利用率 (%) float 百分比
library_cachehit_ratio 库缓存命中率 float 百分比
logical_reads 每秒逻辑读取数 float count
logons 登录尝试次数 float count
memory_sorts_ratio 内存排序比率 float 百分比
pga_over_allocation_count 过度分配 PGA 内存计数 float count
physical_reads 每秒物理读取数 float count
physical_reads_direct 每秒直接物理读取 float count
physical_writes 每秒物理写入数 float count
redo_generated 每秒生成的重做 float count
redo_writes 每秒重做写入次数 float count
rows_per_sort 每个排序的行数 float count
service_response_time 服务响应时间 float
session_count 会话计数 float count
session_limit_usage 会话限制使用情况 float 百分比
shared_pool_free 共享池可用内存 % float 百分比
soft_parse_ratio 软解析比率 float 百分比
sorts_per_user_call 按用户调用排序 float count
temp_space_used 已用临时空间 float B
user_rollbacks 用户回滚次数 float count

监控器

点击「监控」 -「监控器」 - 「从模板新建」,添加以下两个监控器,也可以点击具体监控器进去修改对应的阈值。

Oracle 活跃会话数突变告警
Oracle 表空间不足告警

总结

通过监控 Oracle 数据库特定的指标,比如缓存命中率、表空间使用率、响应时间和数据库连接状态等,能够帮助我们优化查询效率,并进行有效的容量规划。通过综合监控这些关键指标,可以及时发现并解决潜在的性能瓶颈,从而维护 Oracle 的高效运行和稳定性。

相关推荐
技术宝哥22 分钟前
Redis(2):Redis + Lua为什么可以实现原子性
数据库·redis·lua
学地理的小胖砸2 小时前
【Python 操作 MySQL 数据库】
数据库·python·mysql
dddaidai1232 小时前
Redis解析
数据库·redis·缓存
数据库幼崽2 小时前
MySQL 8.0 OCP 1Z0-908 121-130题
数据库·mysql·ocp
Amctwd2 小时前
【SQL】如何在 SQL 中统计结构化字符串的特征频率
数据库·sql
betazhou3 小时前
基于Linux环境实现Oracle goldengate远程抽取MySQL同步数据到MySQL
linux·数据库·mysql·oracle·ogg
lyrhhhhhhhh3 小时前
Spring 框架 JDBC 模板技术详解
java·数据库·spring
喝醉的小喵5 小时前
【mysql】并发 Insert 的死锁问题 第二弹
数据库·后端·mysql·死锁
付出不多5 小时前
Linux——mysql主从复制与读写分离
数据库·mysql
初次见面我叫泰隆5 小时前
MySQL——1、数据库基础
数据库·adb