{eval=Array;=+count(Array);}
我根据所维护的Oracle 项目经验来回答这个问题,希望能够帮助到题主及有需要的朋友。
Oracle 运行越来越慢,是有多种原因,我从由易到难的思路,介绍一下我们实际运用的方法分享给大家:
一、Oracle 数据库层自身的优化
1. 表的优化。表是Oracle中存放数据的最终载体,表的优化是核心。 随时业务系统使用时间越长,表中的数据就越多,表的优化会起到立竿见影的效果。
(1) 表的高水位问题。
表中的数据,因较多的 delete 操作,会产生高水位,此时当发生全表读的操作,将会额外消耗资源,从而造成业务人员直接感觉到系统使用慢。
补救的办法是:回收高水位。
(2) 表的统计信息过旧或者不准确
统计信息不准确,会引起执行计划出错,造成业务系统越来越慢。 表的统计信息就相当于人的基本情况,当基本情况都不准确时,如何能够保证正确的执行呢。
补救的办法是:收集表的统计信息。
(3) 未实施表分区技术
化整为零的思想。 某些表,根据业务的实际需要,未做表分区。 比如会经常用按年月来查询表中某月的数据,如果表中的数据量非常大,比如超100万条,就可以按月进行分区,让按月的查询,只需要读取所需要月份的分区表。
补救的办法是: 对表实行化整为零,转为分区表
2. 索引的优化
(1) 差索引
数据库运行慢,很多的情况是查询语句中引用的列,差索引。索引是提升速度非常重要的手段。
补救的办法是: 分析SQL 语句,对缺失的索引进行创建。
(2) 索引的统计信息不准
索引的统计信息与表的信息信息思想是一样的, 只有统计信息准确,SQL 才能够最大程度的选择最好的执行计划,以最短的时间执行完所需要的业务SQL。
补救的办法是:收集索引的统计信息。
3. SQL 语句的优化
数据库慢,很多情况是因为SQL写法不对,造成执行时间长,消耗了过多的资源。 因此优化SQL 是非常重要的方式之一。
补救的办法是:收集Oracle 数据库的 AWR, ADDM, ASH 等性能报告,找出执行时间长、消耗资源多的SQL 语句进行优化。
4. Oracle 数据库的参数优化
数据库想要运行速度快,对Oracle的运行参数进行优化是重要的手段和方法,比如大家所熟悉的 SGA、PGA、DB_Cache_Size 、Process 等参数进行分析、优化。
Oracle 数据库的运行也是要挑系统平台的,一般的中、小企业,推荐的是使用 Linux ,从每次Oracle新版本的发行就知道,首先推出的是Linux平台,然后是 Unix平台,最后才是Windows平台。
三、 升级 Oracle 数据库硬件
如经过前面 2 个大项的优化,仍然不能提升Oracle 数据库的运行速度,则可能是因为现有的硬件不能满足当前的业务需求,必须采取升级 Oracle 数据库服务器的硬件资源比如:升级CPU、内存、磁盘(特别是提升 磁盘 I/O 速度),来提升Oracle数据库的运行速度。
以上方法和思路,是我们实际项目中遇到并运用的方法和手段,欢迎大家交流。
随着业务数据的增长,以及新业务的推出,很多企业都面临着系统性能的问题,并且日益凸显。似乎用尽了所有招数,但性能就是不见改善,问题到底出在哪里?
遇到如此问题,我们一般怎么做呢?是不是都有过下面的体会?
不差钱人的做法:
升级cpu、扩内存、换固态盘存储,只能说一开始很管用,慢慢地老问题又出现了。
老实人做法:
新上线了业务系统性能不佳,怎么办呢?我们来玩打游击。把一些不重要的业务放在晚上运行,调整新业务的功能模块,或者暂时不做数据同步等
扯皮做法:
看看网络有没有问题呢,有的话就改;是不是存储的问题呢,有问题就换;运维人员有没有问题呢,服务商也随意招;但要谁来承担责任呢,每次遇到严重的故障,是不是时间用来扯皮较多?
现实中,很多运维人员都很拼命地在保障系统高效运行,但根据相关统计,80%的系统性能问题来自SQL方面的问题。所以,在基本保证网络(跟平时比,跟同时段其他业务比)、服务器(CPU、内存使用率)、存储(IO等待)等资源都问题不大的情况下,可以通过查看Oracle对应时段的AWR、ASH、ADDM来寻找同时段运行较慢的SQL。有针对性的去优化。
而SQL优化中最基本的做法就是建立索引(这个需要根据SQL执行计划去建立合适的索引)、SQL改写、HINT提示等等
性能优化是一个比较复杂的系统工程,以上仅是提示点思路吧,具体还需要根据系统的实际情况多做练习,然后再观察。优化是一个循序渐进的过程,就像我们人生病一样,先吃药治病,然后再去医院复查,看看是否已经治愈一个道理。
希望以上对题主有所帮助,也欢迎其他大牛提出更好的思路,帮助题主。
你先生成你运行慢那一时间段的性能报告,然后通过里边的指数看是你的硬件问题还是你的语句的问题,SGA区小的话加SGA区,接着再分析你的语句,看是不是你这个语句的计划任务是怎么走的,是否没走索引走了全表扫描!以上就是我的观点
0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答5
回答