Oracle段顾问、怎么处理行链接行迁移、降低高水位

Oracle 有3个定时运行的后台程序,段顾问建议、SQL语句诊断、收集 统计信息,其中段顾问建议是用来分析表数据在数据块中的分布是否合理,如是否产生行链接、行迁移、高水位情况是否合理。

查看段顾问建议是否启用

SELECT client_name ,status ,consumer_group
FROM dba_autotask_client
ORDER BY client_name;

查看 auto space advisor 这一行的状态

启用段顾问建议

--启用
BEGIN
  DBMS_AUTO_TASK_ADMIN.ENABLE(
  client_name => 'sql tuning advisor',
  operation => NULL,
  window_name => NULL);
END;
/
--查看
SELECT window_name,TO_CHAR(window_next_time,'YYYY-MM-DD HH24:MI:SS')
,sql_tune_advisor
FROM dba_autotask_window_clients;

查看段顾问建议内容

SELECT
'Segment Advice --------------------------'|| chr(10) ||
'TABLESPACE_NAME : ' || tablespace_name || chr(10) ||
'SEGMENT_OWNER : ' || segment_owner || chr(10) ||
'SEGMENT_NAME : ' || segment_name || chr(10) ||
'ALLOCATED_SPACE : ' || allocated_space || chr(10) ||
'RECLAIMABLE_SPACE: ' || reclaimable_space || chr(10) ||
'RECOMMENDATIONS : ' || recommendations || chr(10) ||
'SOLUTION 1 : ' || c1 || chr(10) ||
'SOLUTION 2 : ' || c2 || chr(10) ||
'SOLUTION 3 : ' || c3 Advice
FROM
TABLE(dbms_space.asa_recommendations('FALSE', 'FALSE', 'FALSE'));

select
'Task Name : ' || f.task_name || chr(10) ||
'Start Run Time : ' || TO_CHAR(execution_start, 'dd-mon-yy hh24:mi') || chr (10) ||
'Segment Name : ' || o.attr2 || chr(10) ||
'Segment Type : ' || o.type || chr(10) ||
'Partition Name : ' || o.attr3 || chr(10) ||
'Message : ' || f.message || chr(10) ||
'More Info : ' || f.more_info || chr(10) ||
'------------------------------------------------------' Advice
FROM dba_advisor_findings f
,dba_advisor_objects o
,dba_advisor_executions e
WHERE o.task_id = f.task_id
AND o.object_id = f.object_id
AND f.task_id = e.task_id
AND e. execution_start > sysdate - 1
AND e.advisor_name = 'Segment Advisor'
ORDER BY f.task_name;

什么是行链接

行链接是因为自身数据量大(初始或者后来更新的),导致一行数据需要跨多个数据块,这就是行链接。

什么是行迁移

一个行数据块初始比较小或者被更新后比较小,导致被放到有空间的别的数据块中,在原数据块只保留一个指针,指向存储数据的数据块,这就是行迁移。

行链接和行迁移有什么坏处

读取数据时会产生多余的I/O.

怎么处理行链接和行迁移

1.移动

  1. 移动表 alter table xxx move;
  2. 重建该表的所有索引

要注意,这个期间这个表不能有事务发生。

2.数据迁移

  1. 运行一个分析脚本分析产生链接的数据
  2. 将行链接和行迁移产生的数据插入到临时表
  3. 删除原表产生行链接和行迁移的数据
  4. 将临时表的数据再插入原表

3.利用数据泵导入导出重建表

什么是高水位

高水位是未使用数据块和已经使用数据块的分界线,查询数据的时候从高水位线开始往下找。

怎么降低高水位

有4中方法:

1.收缩表

  1. 启用行迁移 alter table emp enable row movement
  2. 执行收缩 alter table emp shrink space;
  3. 重建索引

2.truncate 表

3.移动表(需要重建索引)

4.使用数据泵将表导出,删除表,重新导入

猜你喜欢

转载自blog.csdn.net/x6_9x/article/details/119760477
今日推荐