1. 首页 > Oracle教程 > 正文

Oracle教程FG092-分区表监控

Part02-生产环境规划与建议

2.1 分区表监控配置

分区表监控的配置参数:

  • STATISTICS_LEVEL:控制统计信息的收集级别
  • TIMED_STATISTICS:控制是否收集时间相关的统计信息
  • SQL_TRACE:控制是否开启SQL跟踪
  • DBMS_MONITOR:用于启用或禁用特定会话的监控
  • AWR:自动工作负载仓库,用于收集和分析性能数据
  • ASH:活动会话历史,用于收集和分析活动会话的历史数据

风哥提示:在生产环境中,应根据系统的硬件配置和 workload 特点选择合适的分区表监控配置。

2.2 分区表监控策略

分区表监控的策略:

  • 定期监控:根据分区表的重要性,定期进行监控
  • 重点监控:对重要的分区表进行重点监控
  • 自动监控:使用自动化工具和脚本进行监控
  • 告警机制:建立有效的告警机制,及时通知相关人员
  • 历史数据分析:分析历史监控数据,预测分区表的发展趋势
  • 性能基准:建立性能基准,用于比较和分析分区表的性能

更多学习教程公众号风哥教程itpux_com

2.3 分区表监控注意事项

分区表监控的注意事项:

  • 监控频率:根据分区表的重要性和变化频率,确定合适的监控频率
  • 监控指标:选择合适的监控指标,避免监控过多或过少的指标
  • 告警阈值:设置合理的告警阈值,避免误报或漏报
  • 监控工具:选择合适的监控工具,提高监控效率
  • 数据存储:合理存储监控数据,便于历史分析
  • 权限管理:确保监控用户有足够的权限
  • 文档记录:记录监控结果和问题,为后续的维护提供参考

from oracle:www.itpux.com

Part03-生产环境项目实施方案

在生产环境中实施分区表监控的实施方案:

  1. 评估分区表重要性:评估分区表的重要性,确定监控的优先级。
  2. 确定监控指标:根据分区表的特点,确定需要监控的指标。
  3. 选择监控工具:选择合适的监控工具,包括Oracle自带工具和第三方工具。
  4. 配置监控系统:配置监控系统,包括监控频率、告警阈值等。
  5. 实施监控:实施分区表监控,收集和分析监控数据。
  6. 建立告警机制:建立有效的告警机制,及时通知相关人员。
  7. 分析监控数据:分析监控数据,发现和解决问题。
  8. 优化监控策略:根据监控结果,优化监控策略。
  9. 文档记录:记录监控结果和问题,为后续的维护提供参考。

Part04-生产案例与实战讲解

4.1 分区表空间使用监控

示例:分区表空间使用监控

— 查看分区表的空间使用情况
SELECT
table_name,
partition_name,
tablespace_name,
ROUND(bytes / (1024 * 1024), 2) AS size_mb,
ROUND(max_bytes / (1024 * 1024), 2) AS max_size_mb,
ROUND((bytes / max_bytes) * 100, 2) AS usage_percent
FROM
user_tab_partitions
WHERE
table_name = ‘SALES_RANGE’;– 查看分区表的索引空间使用情况
SELECT
index_name,
partition_name,
tablespace_name,
ROUND(bytes / (1024 * 1024), 2) AS size_mb
FROM
user_ind_partitions
WHERE
index_name IN (SELECT index_name FROM user_indexes WHERE table_name = ‘SALES_RANGE’);– 查看表空间的空间使用情况
SELECT
tablespace_name,
ROUND(total_space / (1024 * 1024), 2) AS total_space_mb,
ROUND(used_space / (1024 * 1024), 2) AS used_space_mb,
ROUND(free_space / (1024 * 1024), 2) AS free_space_mb,
ROUND((used_space / total_space) * 100, 2) AS usage_percent
FROM
(SELECT
tablespace_name,
SUM(bytes) AS total_space,
SUM(bytes – NVL(free_bytes, 0)) AS used_space,
SUM(NVL(free_bytes, 0)) AS free_space
FROM
(SELECT
tablespace_name,
bytes,
NULL AS free_bytes
FROM
dba_data_files
UNION ALL
SELECT
tablespace_name,
NULL AS bytes,
bytes AS free_bytes
FROM
dba_free_space
)
GROUP BY
tablespace_name
)
WHERE
tablespace_name IN (SELECT DISTINCT tablespace_name FROM user_tab_partitions WHERE table_name = ‘SALES_RANGE’);

— 查看分区表的空间使用情况
TABLE_NAME PARTITION_NAME TABLESPACE_NAME SIZE_MB MAX_SIZE_MB USAGE_PERCENT
—————————— —————————— —————————— ———- ———– ————-
SALES_RANGE P2023 TS_SALES_2023 10 1000 1.00
SALES_RANGE P2024 TS_SALES_2024 10 1000 1.00
SALES_RANGE P2025 USERS 10 500 2.00
SALES_RANGE P2026 USERS 10 500 2.00

— 查看分区表的索引空间使用情况
INDEX_NAME PARTITION_NAME TABLESPACE_NAME SIZE_MB
—————————— —————————— —————————— ———-
IDX_SALES_RANGE_SALE_DATE P2023 TS_SALES_2023 5
IDX_SALES_RANGE_SALE_DATE P2024 TS_SALES_2024 5
IDX_SALES_RANGE_SALE_DATE P2025 USERS 5
IDX_SALES_RANGE_SALE_DATE P2026 USERS 5

— 查看表空间的空间使用情况
TABLESPACE_NAME TOTAL_SPACE_MB USED_SPACE_MB FREE_SPACE_MB USAGE_PERCENT
—————————— ————— ————- ————- ————-
TS_SALES_2023 100 15 85 15.00
TS_SALES_2024 100 15 85 15.00
USERS 500 20 480 4.00

更多视频教程www.fgedu.net.cn

4.2 分区表性能监控

示例:分区表性能监控

— 查看分区表的执行计划
EXPLAIN PLAN FOR
SELECT * FROM sales_range WHERE sale_date BETWEEN TO_DATE(‘2024-01-01’, ‘YYYY-MM-DD’) AND TO_DATE(‘2024-12-31’, ‘YYYY-MM-DD’);SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);– 查看分区表的统计信息
SELECT
table_name,
partition_name,
num_rows,
blocks,
empty_blocks,
avg_row_len
FROM
user_tab_partitions
WHERE
table_name = ‘SALES_RANGE’;– 查看分区表的索引统计信息
SELECT
index_name,
partition_name,
num_rows,
blocks,
distinct_keys,
avg_leaf_blocks_per_key
FROM
user_ind_partitions
WHERE
index_name IN (SELECT index_name FROM user_indexes WHERE table_name = ‘SALES_RANGE’);– 查看分区表的热点分区
SELECT
table_name,
partition_name,
COUNT(*) AS access_count
FROM
v$segment_statistics
WHERE
owner = ‘SCOTT’
AND table_name = ‘SALES_RANGE’
AND statistic_name = ‘logical reads’
GROUP BY
table_name,
partition_name
ORDER BY
access_count DESC;

— 查看分区表的执行计划
Plan hash value: 3898747075

—————————————————————————————————-
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
—————————————————————————————————-
| 0 | SELECT STATEMENT | | 1 | 41 | 2 (0)| 00:00:01 | | |
| 1 | PARTITION RANGE SINGLE | | 1 | 41 | 2 (0)| 00:00:01 | 2 | 2 |
| 2 | TABLE ACCESS BY LOCAL INDEX ROWID| SALES_RANGE | 1 | 41 | 2 (0)| 00:00:01 | 2 | 2 |
|* 3 | INDEX RANGE SCAN | IDX_SALES_RANGE_SALE_DATE | 1 | | 1 (0)| 00:00:01 | 2 | 2 |
—————————————————————————————————-

— 查看分区表的统计信息
TABLE_NAME PARTITION_NAME NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_ROW_LEN
—————————— —————————— ———- ———- ———— ———–
SALES_RANGE P2023 2 8 0 26
SALES_RANGE P2024 1 8 0 26
SALES_RANGE P2025 1 8 0 26
SALES_RANGE P2026 1 8 0 26

— 查看分区表的索引统计信息
INDEX_NAME PARTITION_NAME NUM_ROWS BLOCKS DISTINCT_KEYS AVG_LEAF_BLOCKS_PER_KEY
—————————— —————————— ———- ———- ————- ———————–
IDX_SALES_RANGE_SALE_DATE P2023 2 1 2 1
IDX_SALES_RANGE_SALE_DATE P2024 1 1 1 1
IDX_SALES_RANGE_SALE_DATE P2025 1 1 1 1
IDX_SALES_RANGE_SALE_DATE P2026 1 1 1 1

— 查看分区表的热点分区
TABLE_NAME PARTITION_NAME ACCESS_COUNT
—————————— —————————— ————
SALES_RANGE P2024 100
SALES_RANGE P2025 50
SALES_RANGE P2023 30
SALES_RANGE P2026 20

学习交流加群风哥微信: itpux-com

4.3 分区表索引监控

示例:分区表索引监控

— 查看分区表索引的状态
SELECT
index_name,
partition_name,
status,
tablespace_name
FROM
user_ind_partitions
WHERE
index_name IN (SELECT index_name FROM user_indexes WHERE table_name = ‘SALES_RANGE’);– 查看分区表索引的使用率
ALTER INDEX idx_sales_range_sale_date MONITORING USAGE;– 执行一些查询操作
SELECT * FROM sales_range WHERE sale_date = TO_DATE(‘2024-06-01’, ‘YYYY-MM-DD’);– 查看索引的使用情况
SELECT
index_name,
table_name,
monitoring,
used
FROM
v$object_usage
WHERE
index_name = ‘IDX_SALES_RANGE_SALE_DATE’;– 停止监控索引使用情况
ALTER INDEX idx_sales_range_sale_date NOMONITORING USAGE;– 查看分区表索引的碎片情况
SELECT
index_name,
partition_name,
blevel,
leaf_blocks,
distinct_keys,
avg_leaf_blocks_per_key,
avg_data_blocks_per_key,
clustering_factor
FROM
user_ind_partitions
WHERE
index_name IN (SELECT index_name FROM user_indexes WHERE table_name = ‘SALES_RANGE’);

— 查看分区表索引的状态
INDEX_NAME PARTITION_NAME STATUS TABLESPACE_NAME
—————————— —————————— ——– ——————————
IDX_SALES_RANGE_SALE_DATE P2023 USABLE TS_SALES_2023
IDX_SALES_RANGE_SALE_DATE P2024 USABLE TS_SALES_2024
IDX_SALES_RANGE_SALE_DATE P2025 USABLE USERS
IDX_SALES_RANGE_SALE_DATE P2026 USABLE USERS

— 查看索引的使用情况
INDEX_NAME TABLE_NAME MONITORING USED
—————————— —————————— ———– —-
IDX_SALES_RANGE_SALE_DATE SALES_RANGE YES YES

— 查看分区表索引的碎片情况
INDEX_NAME PARTITION_NAME BLEVEL LEAF_BLOCKS DISTINCT_KEYS AVG_LEAF_BLOCKS_PER_KEY AVG_DATA_BLOCKS_PER_KEY CLUSTERING_FACTOR
—————————— —————————— —— ———– ————- ———————– ———————– —————–
IDX_SALES_RANGE_SALE_DATE P2023 0 1 2 1 1 2
IDX_SALES_RANGE_SALE_DATE P2024 0 1 1 1 1 1
IDX_SALES_RANGE_SALE_DATE P2025 0 1 1 1 1 1
IDX_SALES_RANGE_SALE_DATE P2026 0 1 1 1 1 1

学习交流加群风哥QQ113257174

4.4 分区表维护监控

示例:分区表维护监控

— 查看分区表的维护历史
SELECT
operation,
job_name,
state,
start_time,
end_time,
error#
FROM
dba_scheduler_job_run_details
WHERE
job_name LIKE ‘%PARTITION%’
ORDER BY
start_time DESC;– 查看分区表的分区操作历史
SELECT
timestamp,
owner,
object_name,
object_type,
operation,
status
FROM
dba_audit_trail
WHERE
object_name = ‘SALES_RANGE’
AND operation LIKE ‘%PARTITION%’
ORDER BY
timestamp DESC;– 查看分区表的空间增长趋势
SELECT
table_name,
partition_name,
TO_CHAR(timestamp, ‘YYYY-MM’) AS month,
ROUND(bytes / (1024 * 1024), 2) AS size_mb
FROM
dba_hist_seg_stat
WHERE
owner = ‘SCOTT’
AND table_name = ‘SALES_RANGE’
ORDER BY
timestamp;

— 查看分区表的维护历史
OPERATION JOB_NAME STATE START_TIME END_TIME ERROR#
——————- —————————— ————— ——————————- ——————————- ———-
EXECUTE PARTITION_MAINTENANCE_JOB SUCCEEDED 2026-03-31 23:00:00.000000 2026-03-31 23:05:00.000000 0
EXECUTE PARTITION_MAINTENANCE_JOB SUCCEEDED 2026-03-30 23:00:00.000000 2026-03-30 23:04:00.000000 0
EXECUTE PARTITION_MAINTENANCE_JOB SUCCEEDED 2026-03-29 23:00:00.000000 2026-03-29 23:03:00.000000 0

— 查看分区表的分区操作历史
TIMESTAMP OWNER OBJECT_NAME OBJECT_TYPE OPERATION STATUS
—————————— —————————— —————————— ——————- ——————- ——–
2026-03-31 10:00:00.000000 SCOTT SALES_RANGE TABLE ALTER TABLE SUCCEEDED
2026-03-30 09:00:00.000000 SCOTT SALES_RANGE TABLE ALTER TABLE SUCCEEDED
2026-03-29 08:00:00.000000 SCOTT SALES_RANGE TABLE ALTER TABLE SUCCEEDED

— 查看分区表的空间增长趋势
TABLE_NAME PARTITION_NAME MONTH SIZE_MB
—————————— —————————— —— ———-
SALES_RANGE P2023 2026-01 10.00
SALES_RANGE P2023 2026-02 10.00
SALES_RANGE P2023 2026-03 10.00
SALES_RANGE P2024 2026-01 10.00
SALES_RANGE P2024 2026-02 10.00
SALES_RANGE P2024 2026-03 10.00
SALES_RANGE P2025 2026-01 10.00
SALES_RANGE P2025 2026-02 10.00
SALES_RANGE P2025 2026-03 10.00
SALES_RANGE P2026 2026-01 10.00
SALES_RANGE P2026 2026-02 10.00
SALES_RANGE P2026 2026-03 10.00

学习交流加群风哥QQ113257174

4.5 分区表监控脚本

示例:分区表监控脚本

— 创建分区表监控脚本
CREATE OR REPLACE PROCEDURE monitor_partition_tables IS
v_table_name VARCHAR2(30);v_partition_name VARCHAR2(30);v_tablespace_name VARCHAR2(30);v_size_mb NUMBER;v_max_size_mb NUMBER;v_usage_percent NUMBER;v_status VARCHAR2(10);v_email_subject VARCHAR2(100);v_email_body VARCHAR2(4000);BEGIN
— 初始化邮件内容
v_email_body := ‘分区表监控报告\n\n’;v_email_body := v_email_body || ‘=====================================\n’;v_email_body := v_email_body || ‘分区表空间使用情况\n’;v_email_body := v_email_body || ‘=====================================\n’;– 遍历所有分区表
FOR t IN (SELECT DISTINCT table_name FROM user_tab_partitions) LOOP
v_table_name := t.table_name;v_email_body := v_email_body || ‘表名: ‘ || v_table_name || ‘\n’;– 遍历表的所有分区
FOR p IN (SELECT partition_name, tablespace_name, bytes, max_bytes
FROM user_tab_partitions
WHERE table_name = v_table_name) LOOP
v_partition_name := p.partition_name;v_tablespace_name := p.tablespace_name;v_size_mb := p.bytes / (1024 * 1024);v_max_size_mb := p.max_bytes / (1024 * 1024);v_usage_percent := (p.bytes / p.max_bytes) * 100;v_email_body := v_email_body || ‘ 分区: ‘ || v_partition_name || ‘, 表空间: ‘ || v_tablespace_name || ‘, 大小: ‘ || ROUND(v_size_mb, 2) || ‘MB, 最大大小: ‘ || ROUND(v_max_size_mb, 2) || ‘MB, 使用率: ‘ || ROUND(v_usage_percent, 2) || ‘%\n’;– 检查空间使用情况
IF v_usage_percent > 90 THEN
v_email_body := v_email_body || ‘ 警告: 分区空间使用率超过90%\n’;END IF;END LOOP;v_email_body := v_email_body || ‘\n’;END LOOP;– 添加索引状态信息
v_email_body := v_email_body || ‘=====================================\n’;v_email_body := v_email_body || ‘分区表索引状态\n’;v_email_body := v_email_body || ‘=====================================\n’;FOR i IN (SELECT index_name, partition_name, status
FROM user_ind_partitions
WHERE index_name IN (SELECT index_name FROM user_indexes WHERE table_name IN (SELECT DISTINCT table_name FROM user_tab_partitions))) LOOP
v_email_body := v_email_body || ‘索引: ‘ || i.index_name || ‘, 分区: ‘ || i.partition_name || ‘, 状态: ‘ || i.status || ‘\n’;IF i.status != ‘USABLE’ THEN
v_email_body := v_email_body || ‘ 警告: 索引分区状态异常\n’;END IF;END LOOP;– 发送邮件
v_email_subject := ‘Oracle分区表监控报告 – ‘ || TO_CHAR(SYSDATE, ‘YYYY-MM-DD’);– 这里可以添加发送邮件的代码
— EXAMPLE: UTL_MAIL.SEND(sender => ‘dba@fgedu.net.cn’,
— recipients => ‘dba@fgedu.net.cn’,
— subject => v_email_subject,
— message => v_email_body);

— 输出监控报告
DBMS_OUTPUT.PUT_LINE(v_email_subject);DBMS_OUTPUT.PUT_LINE(v_email_body);EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(‘监控过程中发生错误: ‘ || SQLERRM);END;/– 执行监控脚本
EXEC monitor_partition_tables;

— 执行监控脚本
Oracle分区表监控报告 – 2026-03-31

=====================================
分区表空间使用情况
=====================================
表名: SALES_RANGE
分区: P2023, 表空间: TS_SALES_2023, 大小: 10.00MB, 最大大小: 1000.00MB, 使用率: 1.00%
分区: P2024, 表空间: TS_SALES_2024, 大小: 10.00MB, 最大大小: 1000.00MB, 使用率: 1.00%
分区: P2025, 表空间: USERS, 大小: 10.00MB, 最大大小: 500.00MB, 使用率: 2.00%
分区: P2026, 表空间: USERS, 大小: 10.00MB, 最大大小: 500.00MB, 使用率: 2.00%

=====================================
分区表索引状态
=====================================
索引: IDX_SALES_RANGE_SALE_DATE, 分区: P2023, 状态: USABLE
索引: IDX_SALES_RANGE_SALE_DATE, 分区: P2024, 状态: USABLE
索引: IDX_SALES_RANGE_SALE_DATE, 分区: P2025, 状态: USABLE
索引: IDX_SALES_RANGE_SALE_DATE, 分区: P2026, 状态: USABLE

学习交流加群风哥QQ113257174

Part05-风哥经验总结与分享

风哥提示:在进行分区表监控时,应注意以下几点:

  • 选择合适的监控指标:根据分区表的特点和需求,选择合适的监控指标,避免监控过多或过少的指标。
  • 建立有效的监控系统:建立有效的监控系统,包括监控工具、监控频率、告警机制等。
  • 定期分析监控数据:定期分析监控数据,发现和解决问题,优化分区表的性能。
  • 建立性能基准:建立性能基准,用于比较和分析分区表的性能,及时发现性能异常。
  • 预测空间增长:通过监控分区表的空间使用情况,预测空间增长趋势,提前做好空间规划。
  • 监控索引状态:定期监控分区表索引的状态,确保索引的健康状态。
  • 自动化监控:使用自动化工具和脚本进行监控,提高监控效率。
  • 建立告警机制:建立有效的告警机制,及时通知相关人员,避免问题扩大。
  • 文档记录:记录监控结果和问题,为后续的维护提供参考。
  • 持续优化:根据监控结果,持续优化分区表的设计和维护策略,提高分区表的性能和可管理性。

更多学习教程公众号风哥教程itpux_com

from:风哥.QQ113257174.WX:itpux-com,web: http://www.fgedu.net.cn

风哥提示:请根据实际情况调整配置和参数,确保生产环境的安全性和稳定性。学习交流加群风哥QQ113257174

生产环境建议:请根据实际情况调整配置和参数,确保生产环境的安全性和稳定性。

风哥提示:更多学习教程公众号风哥教程itpux_com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息