ORACLE性能诊断实例-行迁移和行链接 .

【Qualcomm高通音频】音效调试_录音文件播放有杂音,如何定位原因? 一、录音播放数据处理过程介绍 (1)TX方向 麦克风(硅麦克风或者主机体麦克风)采集模拟音频信号,经过内部CODEC芯片中的adc转换为数字信号,在经过高通音频DSP处理音效后编码为wav/aac/amr/mp3等格式文件。 (2)RX方向 音频文件经过解码、重采样还原为pcm数据,经过DSP处理音效后送到内部CODEC,然后经过DAC转换为模拟信号,送到喇叭。 二、分析步骤 1... 阅读详情

通过我的检查,发现,我们的DB同样存在行迁移和行链接.ORACLE的dbms_stats.gather_schema_stats只会收集优化器统计信息,不会检测表的记录是否存在行迁移和行链接.(我原先被这个包给骗了,所以执行完dbms_stats.gather_schema_stats后一查数据字典:USER_TABLES,其中的字段chain_cnt值全为0).要检测表的记录是否存在row chain,需要用到ORACLE早先一点的命令:ANALYZE TABLE.所以我写了一个存储过程(P_analyze_schema)以检测DB:PVH91USRD中所有表存在行链接的情况.

         值得注意的是:数据字典 USER_TABLES.CHAIN_CNT的值是包含了行迁移和行链接的数目.请看ORACLE的解释:

CHAIN_CNT*  Number of rows in the table that are chained from one data block to another, or which have migrated to a new block, requiring a link to preserve the old ROWID


也就是说这个字段的值是行迁移和行链接的总数量,至于要知道具体行迁移有多少,行链接又是多少,ANALYZE TABLE这个命令没办法得到,只有通过DUMP BLOCK来区分(方法复杂,故没有去做).但首先我们要知道行迁移和行链接是两个不同的概念:

(1)行迁移: ORACLE一个BLOCK的DEFAULT SIZE是8K,事实上,一个BLOCK不可以存储8K的数据.一个BLOCK可以存储多少数据,由PCTFREE,PCTUSED参数控制(对于以前的手工管理的表空间而言).

PCTFREE:是指BLOCK保留空闲空间的百分比,用于UPDATE。对于已经插入到BLOCK的行而言,后面的UPDATE操作有可能使行的长度增加,PCTFREE就是用于容纳增加的那部分长度而保留的空闲空间。如果UPDATE时PCTFREE再也不能够容纳行增加的长度,则ORACLE会将整个行迁移到一个新的BLOCK,行的ROWID保留(不是太明白为什么ORACLE不改变ROWID),原来的BLOCK有一个指针指向ROW存放的新BLOCK。这就是行迁移。可见,行迁移是由于UPDATE操作所导致。从字面上理解,所谓迁移,肯定先有存在这一行,才能叫着迁移.

 

PCTUSED:是指BLOCK用于INSERT的百分比。对于INSERT操作,BLOCK可用于容纳新行的最大空间为Blocksize-pctfree-overhead.当BLOCK数据存储已高于PCTUSED,ORACLE会将该块从自由链表中移除,直到该块已使用空间降到PCTUSED以下,才会再次将此块重新加入到Freelist(这是ORACLE以前手工管理的表空间管理空闲块的原理,现在ORACLE推荐使用ASSM).

行迁移和行链接的检测:

除了我写的存储过程可以检测以外,一个简单的检测方法是:

  select b.NAME,a.VALUE from v$mystat a,v$statname b
    where a.STATISTIC#=b.STATISTIC#
    and b.NAME  like 'table fetch continued row'

当有返回值时,可以知道表的数据存在行迁移和行链接。

行迁移和行链接的清除:

能过REBUILD数据来清除行迁移:

create table MM_PM_temp as select * from MM_PM;
truncate table MM_PM;
insert into MM_PM select * from MM_PM_temp

再重新分析表:

analyze table MM_PM compute statistics;

分析过后再查看:

select t.table_name,
       t.num_rows,
       t.chain_cnt,
       t.avg_row_len,
       round((t.chain_cnt / t.num_rows) * 100, 2) as "chained rows %"
  from user_tables t
 where t.chain_cnt > 0

如果该表的chain_cnt变为0时,表示原先的chain_cnt全部是行迁移,而不是行链接。如果REBUILD数据后chain_cnt变少,但还大于0,则可以证明,这个表即包含行迁移,又包含真正的行链接。事实证明,行迁移是可以通过REBUILD数据和增加PCTFREE%来清除和减少发生频率的。注意,对于ASSM,PCTUSED,FREELIST,FREELIST GROUPS参数会被忽略。

但对于真正的行链接,只能通过将表移植到大的BLOCSIZE的表空间上,下面是我的实险:

创建一个16K的表空间:

CREATE TABLESPACE LARGETBS   BLOCKSIZE 16 K
    LOGGING
    DATAFILE '/data/app/oracle/oradata/ora33/LARGETBS_01.dbf' SIZE 64M AUTOEXTEND ON NEXT  10M
     MAXSIZE UNLIMITED
    EXTENT MANAGEMENT LOCAL
    SEGMENT SPACE MANAGEMENT  AUTO ;

在创建的时候报了个ORA-的错,原因我们没有设定16的DB_Buffer_cache,我们设定一下:

  alter system set db_16k_cache_size=34603008;

将表MOVE到16K的表空间:

alter table SRC_CS move tablespace LARGETBS;

alter table MM_PM move tablespace LARGETBS;

由于进行了迁移,表的索引会失效,所以我们要REBUILD索引:

alter index PK_SRC_CS rebuild;

alter index PK_MM_PM rebuild;

再重新分析:

analyze table SRC_CS compute statistics;

analyze table MM_PM compute statistics;

重新查询:

select t.table_name,
       t.num_rows,
       t.chain_cnt,
       t.avg_row_len,
       round((t.chain_cnt / t.num_rows) * 100, 2) as "chained rows %"
  from user_tables t
 where t.chain_cnt > 0
 order by t.table_name

发现,这些表都没有ROW CHAIN了。可见,MOVE到16K的表空间可以清除ROW CHAIN。

一般来讲,一个表如果有多于256个字段,则发生ROW CHAIN的频率比较高。

对于包含long,long raw类型的行,发生ROW CHAIN的概率也比较大。因为long,long raw会尽量先在同一行中存储字段值。而对于CLOB,BLOB等对象,一般来讲,会单独用另外的表空间来存放(oracle推荐这么做),发生ROW CHAIN的概率小一些。但是,有文档指出,当你没有为CLOB指定单独的表空间时,如果CLOB的实际值小4000 BYTE,ORACLE还是会将CLOB字段存放到同一个BLOCK,只有当CLOB的值大于4000 BYTE,ORACLE才会将该字段单独存放。如果真是这样的话,CLOB也会引起ROW CHAIN(如果CLOB和其它字段是同一表空间的话)。

附件:

create or replace procedure p_analyze_schema is
  cursor getdata is
    select table_name
      from user_tables
     order by table_name;
 v_sqlstr varchar2(4000);
begin
  for rec in getdata loop
    v_sqlstr:= 'analyze table  '||rec.table_name||' compute statistics';
    execute immediate(v_sqlstr);
  end loop;
end p_analyze_schema;

请慎重使用下面这个存储过程:

create or replace procedure p_calculate_rowlen is
  cursor getdata is
    select table_name
      from user_tables
     where table_name not in
           ('mm_pm', 'mm_pm_history', 'src_cs', 'src_cs_history')
     order by table_name;
  cursor getdata2(p_tabname varchar2) is
    select t.table_name, t.column_name
      from user_tab_columns t
     where t.table_name = p_tabname
       and t.data_type not in ('clob', 'blob')
     order by t.column_id;
  v_sqlstr clob;
begin
  dbms_output.enable(1000000);
  for rec in getdata loop
    v_sqlstr := ' ';
    for rec2 in getdata2(rec.table_name) loop
      v_sqlstr := v_sqlstr || 'nvl(vsize(' || rec2.column_name || '),0)+';
    end loop;
    v_sqlstr := substr(v_sqlstr, 1, (length(v_sqlstr) - 1));
    v_sqlstr := 'insert into t_tab_row_len select  ''' || rec.table_name ||
                ''',rl from ' || ' (select  (' || v_sqlstr ||
                ') as rl  from  ' || rec.table_name || ')  where rl>=1000';
    begin
      execute immediate (to_char(v_sqlstr));
      commit;
    exception
      when others then
        dbms_output.put_line(rec.table_name);
        return;
    end;
  end loop;
end p_calculate_rowlen;

create table t_tab_row_len
(
  table_name varchar2(60),
  row_len    number(20)
)

关于RTP时间戳以及播放器对时间戳的处理 首先,了解时间戳几个基本概念: 时间戳单位:时间戳计算的单位不是秒之类的单位,而是由采样频率所代替的单位,这样做的目的就是为了是时间戳单位更为精准。比如说一个音频的采样频率为8000Hz,那么我们可以把时间戳单位设为1 / 8000。 时间戳增量:相邻两帧之间的时间差(以时间戳单位为基准)。 采样频率: 有些地方也叫时钟频率,即 每秒钟抽取样本的次数,例如音频的采... 阅读详情

相关推荐

机器学习(三) ----------线性回归算法(梯度下降+正则化)

线性回归算法在机器学习中具有核心地位,它以其简单性和直观性为基础,为理解数据间的关系提供了基本框架。作为许多复杂算法的基础,线性回归不仅用于预测目标变量,还用于解释自变量对目标的影响。同时,它也是机器学习入门的经典算法,对于推广机器学习知识和技术具有重要意义。

2301_77539454的博客 1868

oracleBLOCK(数据块)

11.4 BLOCK(数据块) 11.4.1 BLOCK(数据块)的特点: BLOCK是Oracle进行存储空间IO操作的最小单位,BLOCK的管理方法是区的管理和段管理...

congcong112233的博客 937

Frigate进阶玩法:如何用MQTT和Python脚本扩展你的自定义目标检测算法

本文详细介绍了如何通过MQTT和Python脚本扩展Frigate的自定义目标检测算法,无需修改源码即可实现特殊场景(如工业设备异常、农业病虫害识别)的高效检测。文章涵盖Frigate配置、外部检测服务构建、高级集成技巧及性能优化实践,帮助开发者灵活扩展智能监控能力。

weixin_42662293的博客 350

ORACLE性能诊断实例-行迁移和行链接

<br />通过我的检查,发现,我们的DB同样存在行迁移和行链接.ORACLE的dbms_stats.gather_schema_stats只会收集优化器统计信息,不会检测表的记录是否存在行迁移和行链接.(我原先被这个包给骗了,所以执行完dbms_stats.gather_schema_stats后一查数据字典:USER_TABLES,其中的字段chain_cnt值全为0).要检测表的记录是否存在row chain,需要用到ORACLE早先一点的命令:ANALYZE TABLE.所以我写了一个存储过程(P_

浪缘的专栏 2202

WS2812呼吸灯效果实战:用STM32的PWM+DMA实现流畅渐变(附完整代码)

本文详细介绍了如何使用STM32的PWM+DMA技术实现WS2812呼吸灯效果,提供完整的代码示例和调试技巧。通过PWM波形编码和DMA传输机制,解决了传统IO模拟控制方式的高CPU占用问题,实现了流畅的LED渐变效果,适用于各种嵌入式开发场景。

weixin_30566063的博客 453

EDEM-FLUENT耦合报错几大原因总结(持续更新)

EDEM-FLUENT耦合报错几大原因总结(持续更新)

zheaa的博客 2761

关于Oracle行移动、行链接、行迁移

当修改不是行链接的行时,当修改后的行长度大于修改前的行长度,并且该数据块中的空闲空间已经比较小而不能完全容纳该行的数据时,就会发生行迁移。在这种情况下,Oracle会将整行的数据迁移到一个新的数据块上,而将该行原先的空间只放一个指针,指向该行的新的位置,并且该行原先空间的剩余空间不再被数据库使用,这些剩余的空间我们将其称之为空洞,这就是产生表碎片的主要原因,表碎片基本上也是不可避免的,但是我们可以将其降到一个我们可以接受的程度。这种情况下,读取一行数据就会访问2个数据块,增加IO,导致性能下降。

weixin_42821740的博客 1265

上海计算机学会2020年5月月赛C++乙组T2经济普查

中国正在以前所未有的力度推进脱贫攻坚,国家计划在2020年使得在现行标准下的贫困人口实现全面脱贫,为此,需要对居民的经济状况进行普查。 题目描述 给定一个正整数n,表示人口数量。一开始,每个居民拥有的财产记为a1​,a2​,⋯,an​,财产可能发生两种变化: 一种来源于个体,由某个居民的经济活动而产生。在某个时刻,某个居民的财产会直接变成某个数值,可能升高也可能降低。 一种来源于政策,在某个时刻,国家会对财产低于某个标准线全部的居民,实施政策支持,使得他们的财产全部正好到达标准线。 给定这些变

长春高老师编程 908

行链接和行迁移

CHAIN_CNT:虽然行链接和行迁移的概念不同,但在ORACLE里其实不太分这个,CHAIN_CNT是总的数量 PCTFREE: PCTFREE:为一个块保留的空间百分比,表示数据块在什么情况下可以被insert,默认是10,表示当数据块的可用空间低于10%后,就不可以被insert了,只能被用于update;即: 当使用一个block时,在达到pctfree之前,该block是一...

weixin_30376509的博客 107

基于语义分割的实时建图:HDMap动态更新

基于语义分割的实时建图:HDMap动态更新​ ,人工智能,计算机视觉,大模型,AI,本文围绕基于语义分割的实时建图技术在HDMap动态更新中的应用展开,介绍了语义分割基础、HDMap概述、相关实时建图技术、动态更新关键技术、系统性能评估指标、实际应用案例、面临的挑战与解决方案及未来发展趋势。阐述了该技术如何利用传感器数据和语义分割算法,解决传统HDMap构建与更新的弊端,分析了其在精度、实时性、鲁棒性等方面的表现,以及在自动驾驶和智能交通中的应用,还探讨了现存问题及未来优化方向。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 22万+

Python爬虫实战:利用Requests-HTML与异步技术高效爬取B站视频信息及弹幕数据分析

B站的弹幕,远非简单的评论功能,它是一种独特的、实时互动的社交方式,是观众情感的集体宣泄和共鸣。无论是用于内容创作者优化视频结构,还是用于社会学、传播学的研究,亦或是简单的个人兴趣分析,都具备极高的价值。stop_words = {'的', '了', '是', '我', '你', '他', '她', '它', '在', '有', '不', '吗', '吧', '啊', '这', '那'}本文不仅是代码的堆砌,更注重原理的剖析、反爬策略的应对以及工程化的思考,旨在为读者提供一份紧跟技术前沿的实战指南。

2201_76125261的博客 390

Oracle(67)什么是行迁移和行链接?

行迁移(Row Migration)和行链接(Row Chaining)都是与数据库存储管理相关的重要概念,它们可能会影响数据库的性能。行迁移发生在行更新后变大,但当前块没有足够空间时;而行链接发生在行的大小超过单个数据块时。可以通过增加PCTFREE参数、重建表或使用分区等方法来解决这些问题。

qq_43012298的博客 848

破解现代反爬虫:JS加密、OB混淆与CSS反爬的实战攻防分析

摘要: 随着反爬技术的升级,JS加密、OB混淆和CSS反爬成为主流防护手段,阻碍传统爬虫获取数据。本文解析了这些技术的工作原理,并提出破解策略:通过模拟浏览器(如Selenium、Puppeteer)执行动态JS,逆向混淆代码,以及利用开发者工具突破CSS隐藏。针对复杂防护,开发者需结合技术分析与工具应用,如API接口抓取、动态渲染破解等,以应对不断演进的反爬机制。未来,爬虫攻防将持续升级,需保持技术敏锐性。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1648

关于Oracle数据库中行迁移/行链接的问题

一、行迁移/行链接的介绍 在实际的工作中我们经常会碰到一些Oracle数据库性能较低的问题,当然,引起Oracle数据库性能较低的原因是多方面的,我们能够通过一些正确的设计和诊断来尽量的避免一些Oracle数据库性能不好,Row Migration (行迁移) & Row

jsjhbgh的专栏 413

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

数据迁徙的代价:深度解析Oracle行迁移与行链接的原理、检测与优化方案

【行迁移是整体搬家,行链接是把一个人拆成几块】一个人原来住30平米的小房子,后来东西太多了(UPDATE变长),搬到了50平米的大房子。但户口本(ROWID)上的地址还是老房子,快递员(Oracle)送快递时,先去老房子,看到门上的纸条(转发地址),再送到新房子。一个人有200平米的家具(行大于块大小),一个房间放不下,只能分三个房间存放。快递员取东西时,需要分别跑三个房间才能拿全。行迁移可以通过MOVE/SHRINK消除。行链接无法消除,只能增大块大小或拆分表。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 630

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

关于Oracle数据库中行迁移/行链接的问题 (1)

 关于Oracle数据库中行迁移/行链接的问题,在网上的这篇文章比较的好,对于深入理解行迁移/行链接以及如何消除行迁移/行链接带来的性能问题,我将它存放到我的BLOG,供自己认真学习。一、行迁移/行链接的介绍        在实际的工作中我们经常会碰到一些Oracle数据库性能较低的问题,当然,引起Oracle数据库性能较低的原因是多方面的,我们能够通过一些正确的设计和诊断来尽量的避免一些

daimin's BLOG 703

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

oracle 关于行链接和行迁移和消除

关于行链接和行迁移和消除 关于行链接和行迁移和几种消除方法(看书笔录) Oracle中行迁移和行链接的清除及检测 一、行迁移和行链接的介绍 在实际的工作中我们经常会碰到一些Oracle数据库性能较低的问题,当然,引起Oracle数据库性能较低的原因是多方面的,我们能够通过一些正确的设计和诊断来尽量的避免一些Oracle数据库性能不好,Row Migration (行迁移)

茄肥猫的窝 2140

Oracle查询行迁移,Oracle数据库行迁移,行链接

一、 行迁移/行链接的简介在实际的工作中我们经常会碰到一些Oracle数据库性能较低的问题,当然,引起Oracle数据库性能较低的原因是多方面的,我们能够通过一些正确的设计和诊断来尽量的避免一些Oracle数据库性能不好,Row Migration (行迁移) & Row Chaining (行链接)就是其中我们可以尽量避免的引起Oracle数据库性能低下的...

weixin_39785422的博客 290

行迁移/行链接 参考资料一

、行迁移/行链接的介绍在实际的工作中我们经常会碰到一些oracle数据库性能较低的问题,当然,引起oracle数据库性能较低的原因是多方面的,我们能够通过一些正确的设计和诊断来尽量的避免一些oracle数据库性能不好,row migration (行迁移) & row chaining (行链接)就是其中我们可以尽量避免的引起oracle数据库性能低下的潜在问题。通过合理的诊断行迁移/行链接,我们可以较大幅度上提高oracle数据库的性能。那究竟什么是行迁移/行链接呢,先让我们从oracle的block开始

我爱海 941

Oracle中行迁移和行链接的清除及检测

原文链接: http://9host.cn/oracle/200742218400513097.html 一、行迁移和行链接的介绍   在实际的工作中我们经常会碰到一些Oracle数据库性能较低的问题,当然,引起Oracle数据库性能较低的原因是多方面的,我们能够通过一些正确的设计和诊断来尽量的避免一些Oracle数据库性能不好,Row Migration (行迁移) & Row Ch

duanbeibei的专栏 1866

Oracle行迁移和行链接

行迁移和行链接都会导致Oracle性能下降,这篇文章将介绍什么是行迁移和行链接,它们带来的问题,如何来判断它们,并提供了解决它们的办法。 什么是行迁移和行链接 行迁移 Or...

cuiruidu3106的博客 108

关于Oracle数据库中行迁移和行链接的问题

行迁移/行链接 Row Migration (行迁移) & Row Chaining (行链接)会影响Oracle数据库性能,通过合理的诊断行迁移/行链接,我们可以较大幅度上提高Oracle数据库的性能。 行链接产生在第一次插入数据的时候如果一个block不能存放一行记录的情况下。这种情况下,Oracle将使用链接一个或者多个在这个段中保留的block存储这一行记录, 行链接比较容易发生

浪缘的专栏 1014
上一篇: latch free检查
下一篇: 设置DBWR 数量
DBA学习记录
博客等级 码龄15年 7粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值