`

系统运行一段时间后,提升其速度的方法总结

    博客分类:
  • SQL
阅读更多
BI系统运行一段时间后性能明显变慢了肿么办施系统慢数据库优化
【问题描述】

系统在运行了一段时间以后,在没有变更程序,且数据量没有大幅增加的时候,系统的执行效率明显变慢了肿么办?是求助研发人员,然后各种扯皮、谩骂乃至人生攻击?还是自已动手,丰衣足食?

【问题分析】

如果没有升级程序(为什么每次升级程序总是会让系统变得更糟而不是更好呢?这是一个值得研究的问题),数据量又没有大幅增加,系统硬件环境也没有变化,那么这个现象很可能是数据库本身的问题,引起数据库变慢的原因有很多,以下是几个比较可能的原因:

1、  数据库在进行了大量的删除、插入、更新后(ETL经常会干这个事情),由于数据库里不完全从物理上删除相应的数据,所以会导致表里占用了很多无用的物理块,表的索引中也会存在很多废弃的索引键,因此会导致访问表的时候额外读取了很多的数据块(block),包括表和索引,增加了IO的代价,因此效率降低,所以这就是为什么清表的时候一定要用truncate table而不要用delete from table方式的原因;

2、  Oracle是基于代价(cost)的优化模式,也就是oracle会根据数据库的统计信息(如表有多少条记录、有哪些索引、占用了多少数据块)对执行SQL各种可能的路径进行分析,从而在其中找到一个oracle认为最优的执行计划进行查询,但是在对数据进行了大量的删除、插入、更新后会导致数据库的统计信息越来越不准确,从而导致oracle误判,选择了一个较差的执行计划,引起执行效率降低;

3、  在对记录进行更新(update)的时候,由于记录都是一行一行紧密地存储在物理块(block)中的,因此当新update的记录比原来更长(占用的字节byte更多)的时候,在该记录原有的位置已经无法容纳该记录了,这时候oracle就会把记录迁移到另一个空闲的块中,并在原有的位置记录一个链接,指向新的块地址,这就叫行迁移,这样当数据被经常这样长期的蹂躏后,物理数据的存储就会变得非常乱,到处都是各种指针,导致数据库读取数据的效率变低;

4、  操作系统或者数据库都是按block(还记得安装oracle的时候可以改的block_size吗?)进行管理的,也就是oracle每次读数据的时候都会读block_size的整数倍。当某一条记录无法被完全放进一个block的时候,就会产生行链接,将一条记录的一部分存在block1里,另一部分存在block2里,并在block1里记录一个指向block2的指针,这样当数据被经常这样长期的蹂躏后,物理数据的存储就会变得非常乱,到处都是各种指针,导致数据库读取数据的效率变低。

【问题解决】

实施人员应该养成定期生成新的数据库统计信息的习惯,最简单的方法是重新生成所有表的统计信息,用“analyze table xxx compute statistics;”这个语法,注意对于大表来说这个语句的执行会较慢,因此应该在夜深人静的时候执行。

实施人员应该经常关注数据库的碎片情况(行链接和行迁移),以便及时优化数据库,检查碎片情况可以用下面的语句:analyze table xxx list chained rows into chained_rows。注意“chained_rows”是一张物理表,默认是不生成的,可以用这个脚本来生成:$ORACLE_HOME/rdbms/admin/utlchain.sql。

解决的方法如下:

1、  定期重新生成统计信息:

1)         select ‘analyze table ‘||owner||’.’||table_name||’ validate structure ;’ from dba_tables where owner=’XXXX’ ;

2)         select ‘analyze index ‘||owner||’.’||index_name||’ compute statistics;’ from dba_tables where owner=’XXXX’;

3)         将上述语句的查询结果放到sqlplus里执行一遍,当然最好的方式是用oracle的批命令来做,怎么用批命令自己上网搜去,下面提供一个例子:

分析所有表.txt

SET HEADING OFF

SET FEEDBACK OFF



select 'analyze table bi_fbk."'||table_name||'" delete statistics;' from dba_tables where owner='BI_fbk'



SPOOL C:\1.SQL

/

SPOOL OFF



SET FEEDBACK ON



start C:\1.SQL



SET HEADING ON


然后在sqlplus中调用上面的文本:“sql > @分析所有表.txt”

2、  清除行链接和行迁移,这有几种方法:

1)         用exp/imp的方式把表(可以单表操作,也可以全库操作)重新导一遍,则会重新生成新的数据存储;

2)         先将原表的数据移到备份表,再移回来即可:

1.         create table 备份表 as select * from 原表;

2.         truncate table 原表;

3.         insert into 原表 select * from 备份表;

4.         drop table 备份表。

3)         建一个备份表空间,将事实表从源表空间移到备份表空间,再从备份表空间移回原表空间,步骤如下:

1.         Alter table xxx move tablespace 备份表空间;

2.         Alter table xxx move tablespace 原表空间;

3.         重建该表的所有索引(否则表无法正常访问):

Alter index xxx rebuild;
分享到:
评论

相关推荐

    实时数据库系统的设计浅谈.docx

    当系统运行期间发生异常时,通过观察这部分数据能够判断故障发生的具体原因,提升组态软件的稳定性。数据接收后会进入到运行模块中,服务器采集到数据变化后会在运行环境内进行搜索,快速完成数据整理任务,通过运行...

    2019数据运营思维导图

    使用间隔 平均多长时间启动/使用一次app 用户对app的依赖程度 各个时间段启动app人数分布 用户行为 短期点击行为、搜索行为、收藏行为 等级分析 各个等级平均耗时 用户成长速度 需要严格控制高端用户成长速度 各个...

    数据运营思维导图

    用户在什么节点来的多,需要重点监控该时间段app运行 用户画像 概述 是什么,有什么用,怎么做 构建用户画像的核心工作即是给用户贴“标签”,而标签是通过对用户信息分析而来的高度精炼的特征标识 作用 精准...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    6.2 系统运行环境搭建及配置 34 6.2.1 AndroidManifest.xml主程序环境配置 34 6.2.2 移动端工程资源布局 35 6.3 认我测在线认证检测系统的主要功能实现 36 6.3.1用户查询 36 6.3.2订单操作 37 6.3.3个人信息维护 37 ...

    ERP学习必看课件,详细的讲解了ERP的内容

    ERP实施成功的标志是系统运行集成化、业务流程合理化、绩效监控动态化、管理改善持续化。成功实施ERP会给企业带来看得见的效益,会使市场反应速度加快,产品生产周期加快,资金周转速度加快,客户满意度提高,产品...

    Xarm 1.0

    <br> 一、前言 由于软硬件技术的不断提升,嵌入式系统正在以前所未有的速度进入生产生活的各个领域。无论是 日常生活中人们使用的智能手机、Pocket PC还是军用的便携设备、导弹,嵌入式系统都...

    asp.net知识库

    一个时间转换的问题,顺便谈谈搜索技巧 .net中的正则表达式使用高级技巧 (一) C#静态成员和方法的学习小结 C#中结构与类的区别 C#中 const 和 readonly 的区别 利用自定义属性,定义枚举值的详细文本 Web标准和ASP...

    C#微软培训资料

    <<page 1>> page begin==================== 目 目目 目 录 录录 ...第一部分 C#语言概述.4 ...第一章 ...第一章第一章 ...第一章 .NET 编 ... 1.1 Microsoft.NET——一场新的革命.4 ...这一天 微软公司正式推出了其下一代...

    人工智能与大数据银行.pptx

    利用大数据技术加快内部数据处理速度 效率提升 依据客户消费习惯、地理位置、消费时间进行推荐 精准营销 利用数据分析报告实施产业信贷风险控制 决策支持 利用大数据计算技术为财富客户推荐产品,利用客户行为数据...

    大数据--第一章大数据概述笔记分享.pdf

    数据产⽣⽅式的变⾰促成⼤数据时代的来临 运营式系统阶段——数据产⽣⽅式是被动的 ⽤户原创内容阶段——数据产⽣⽅式是主动的 感知式系统阶段——⼤数据的产⽣(物联⽹、云计算和⼤数据) 物联⽹底层是感知层,如:...

    浅谈通信行业大数据应用.doc

    最后 在营销活动结束后,应该对营销活动执行过程中收集到的各种数据进行综合分析,通过 在海量数据中发掘出最有效的企业市场绩效度量,并且对营销活动的执行进行评估总结 ,为下一阶段的营销活动打下良好的基础。...

    二十三种设计模式【PDF版】

    件,一段时间下来,发现不过如此,挺简单好用,但是你真正理解 J2EE 了吗?你在具体案例中的应用是否也是在延伸 J2EE 的思 想? 如果你不能很好的延伸 J2EE 的思想,那你岂非是大炮轰蚊子,认识到 J2EE 不是适合...

    Android SDK开发包国内官网下载地址.pdf

    注2013/3/4:有一小部分下载链接失效,经查是由于未知原因被百度网盘禁止分享了,请过一段时间再试。 ADT Bundle 多合一下载包,里面包含了:sdk + 特定版本platform + eclipse + adt + 兼容包,解压缩即可使用。...

Global site tag (gtag.js) - Google Analytics