- 浏览: 164790 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
钱少少:
programming 写道和maven相比没优势
ivy只是 ...
ant+ivy管理项目 -
programming:
和maven相比没优势
ant+ivy管理项目 -
钱少少:
kingsfighter 写道和maven相比,有什么优势?
...
ant+ivy管理项目 -
kingsfighter:
和maven相比,有什么优势?
ant+ivy管理项目 -
zhijie_zhang:
搭建java-web框架(一)
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;
【问题描述】
系统在运行了一段时间以后,在没有变更程序,且数据量没有大幅增加的时候,系统的执行效率明显变慢了肿么办?是求助研发人员,然后各种扯皮、谩骂乃至人生攻击?还是自已动手,丰衣足食?
【问题分析】
如果没有升级程序(为什么每次升级程序总是会让系统变得更糟而不是更好呢?这是一个值得研究的问题),数据量又没有大幅增加,系统硬件环境也没有变化,那么这个现象很可能是数据库本身的问题,引起数据库变慢的原因有很多,以下是几个比较可能的原因:
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;
发表评论
-
Oracle同义词创建及其作用
2014-03-05 10:30 703Oracle的同义词(synonyms)从字面上理解就是别名 ... -
oracle中将列转化为行
2012-10-25 11:40 933oracle 10g以后 wm_concat函数的运用 准备 ... -
索引的运用
2012-09-18 17:48 1319索引整理 SQL语法整理——索引 什么是索引 数据 ... -
ORACLE PL/SQL编程之八:(触发器经典实例(全))
2012-08-03 13:54 1075ORACLE PL/SQL编程之八: ... -
oracle触发器详解实例
2012-08-03 13:36 1558语法规则: Create [or replace] trigg ... -
JNDI全面总结 (tomact中配置连接池)
2012-08-02 12:42 4032JNDI全面总结 原理: 在DataSo ... -
ORACLE中函数和存储过程的区别
2012-07-20 15:40 1076函数和存储过程的区别 从参数的返回情况来看: 如果返 ... -
pl_sql中函数的基本运用
2012-05-16 17:42 8531基本函数 create or replace functio ... -
plsql中利用函数将一个逗号分隔字符串转义返回单个的列
2012-04-05 15:12 53671.传进去一个字符串,类似于'123,456'; CREATE ... -
sql中的having和where的作用
2012-02-24 16:39 1431例子: select max(orgid) from au ... -
pl-sql中函数循环插入值方式一
2012-02-14 10:39 1732create or replace function F_TE ... -
给表中增加一列或者修改列类型,大小脚本
2012-02-13 16:27 1106修改表中的某列: alter table tablename ... -
sql语句-创建索引
2012-02-07 15:59 1058语法: CREATE [索引类型] INDEX 索引名称 ON ... -
(转)SQL 优化原则(精)
2012-02-07 15:47 849(转)SQL 优化原则 一、问题的提出 在应用系统开发 ... -
pl-sql中关于函数test及存储过程中调用function函数
2012-02-07 15:20 2235对于存储过程可以直接反键test 但是对于函数就要先在过程中 ... -
UNDO_RETENTION
2011-12-28 14:01 2285深度理解Oracle10g中UNDO_RETENTION参数 ... -
oracle中恢复表数据及相关设置
2011-12-28 14:00 1016>1、从flash back里查询被删除的表 ... -
oracle中死锁及解锁
2011-12-21 17:48 2710SELECT OBJECT_ID,SESSION_ID,SER ... -
sqlserver和oracle中去除某一字段中重复字节,以逗号分隔
2011-12-15 16:19 2809sqlserver: create function ren ... -
树状数据库表:Oracle中start with...connect by prior子句用法
2011-12-15 15:57 1463Oracle中start with...connect by ...
相关推荐
此类服务不会立即加载,而是在系统启动一段时间后才开始运行,有助于提高低配电脑的启动速度。 **1.4 “手动”和“禁用”的区别** - **手动**:服务默认不启动,但在需要时可以手动启动或由其他服务激活。 - **...
Windows XP作为一款经典的桌面操作系统,在很长一段时间内占据了PC市场的主导地位。然而,随着技术的发展,越来越多的应用程序对硬件资源的需求逐渐增大,尤其是对内存的需求更为明显。由于设计限制,32位版本的...
通常情况下,较大的缓存容量和更快的访问速度能够显著提升CPU的工作效率,从而减少等待时间并提高整体性能。 #### 输入输出(I/O)管理 输入输出管理是操作系统中的关键组成部分,主要负责协调和优化设备与CPU之间...
总结来说,提升机TKD电气控制系统以其卓越的性能和高安全标准,为各种提升作业提供了有效的解决方案。它不仅提高了生产效率,也极大地减少了因设备故障或操作不当带来的安全隐患。随着工业自动化技术的不断进步,...
总结,通过“RUNTIME”和“RT_INFO”指令,用户可以在S7-1200和S7-1500 PLC中精确测量程序、子程序和特定OB的运行时间,从而优化程序性能,提升系统效率。在进行测量时,确保正确配置和使用追踪轨迹,并注意避免因...
- **技术方法**:采用微服务架构、DevOps理念和最新编程语言(如C#),提升了系统的可扩展性和维护性。 - **错误分析**:项目过程中出现的错误主要源于需求理解偏差和代码质量控制不足,通过加强需求分析和代码审查...
总结来说,这篇论文提出的混合储能系统优化控制方法,结合多级协调策略和二阶低通滤波器,有效地解决了可再生能源波动对接入电网的冲击问题,提高了新能源的消纳效率。这种方法的实施,不仅有助于电网的稳定运行,也...
根据给定文件信息,以下是详细的操作系统知识点总结: ### 操作系统简介 操作系统是一组控制和管理计算机硬件和软件资源的系统内软件,它合理组织计算机的工作流程,并为其他软件提供支持,目的是最大限度地发挥...
综上所述,本篇论文详细论述了矿井提升机调速控制系统的设计与应用,涉及到的PLC技术、调速控制原理、控制系统硬件选型、以及整个系统运行速度分析等内容,为类似系统的设计提供了参考和指导。通过这篇文章,我们...
BUG管理系统的目标就是通过集中管理在软件测试过程中发现的问题,帮助提升软件质量,确保系统的稳定运行。 - **开发背景**: 本项目基于Windows操作系统开发,采用Microsoft Visual Studio 2005作为开发工具,并使用...
总结来说,“人脸识别智能化电梯运行系统及运行方法”是一种利用先进科技提升大型写字楼运营效率和安全性的解决方案。它通过人脸识别技术实现个性化乘梯,优化电梯调度,提升用户体验,同时兼顾了数据收集和分析的...
具体而言,1号电机需根据预设的速度曲线实时调整其运行速度,而2号电机的速度则由1号电机的实际运行速度反馈值决定。 - **实验环境**:项目采用西门子S7-1200系列的PLC作为主控制器,该系列PLC以其强大的功能性和...
运行时分是指列车在某一段线路内完成整个行驶过程所需的时间。在这个过程中,需要考虑到多个因素,如列车的速度、坡度、曲线半径等。采用均衡速度法计算运行时分,主要是为了简化计算模型,使得计算结果更加接近实际...
总结,多电机时间控制系统及其控制方法是现代工业自动化的核心技术之一,它结合了硬件设计、软件算法和实时控制理论,实现了对多个电机的高效、精确管理,推动了工业生产向更高水平迈进。理解并掌握这一技术,对于...
本课题旨在研究和设计一种基于PLC的矿井提升机控制系统,重点探讨PLC在矿井提升机控制中的应用方法和技术细节,包括硬件选择、参数设置以及软件设计等方面。 #### 2. 矿井提升机概述 ##### 2.1 矿井提升机的简介 ...
2.3. 并行运行:新旧系统并行运行一段时间,以便比较效果并及时调整。 2.4. 监控与调整:上线后,通过实时监控系统性能,对出现的问题进行快速响应和优化。 3. 运行环境 3.1. 硬件环境 3.1.1. 根本硬件信息:包括...
文章指出,电力系统在发生故障或工况变化时,需要多个断路器的联锁开关动作,动作的先后次序和电力系统运行时的各项工况参数对于系统保护监控与故障分析非常重要。本文提出的基于CAN总线的电力系统结构设计,正是...
本文档旨在总结信息管理系统软件测试的经验与策略,以提升软件质量,确保系统的可靠运行。 1. 编写本文档的目的 编写此文档的主要目的是为了提供一套针对OA办公系统测试的全面指南,帮助测试团队理解和执行有效的...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其性能优化对于任何依赖它的企业或系统都至关重要。本篇文章将深入探讨一些常用的Oracle优化方法,旨在帮助数据库管理员和开发人员提升数据库性能,减少延迟...