性能是我们评估一个系统是否可用的一个标准。一个性能良好的系统能够提高工作效率,而性能差的系统甚至会令人无法忍受。
为了改善系统性能,需要进行调优。
通常来说,OLTP系统中我们主要考虑的并非响应时间(这个很容易错),而是系统的吞吐量。通常我们要的结果应该是在现有环境下能够容纳更多的用户并发,而OLAP系统一般并发较少,需要的是响应时间更快。而CPU、I/O等因素和响应时间是正相关的。如果响应时间过慢,通常可以从CPU、I/O、内存、网络几方面进行考虑,找到主要矛盾(瓶颈),并重点解决。随着性能指标的优化,数据库完成同一件事所执行的步骤、访问的数据、连接的次数少了,响应时间自然会减少。
oracle将数据库的性能问题分为sql问题、实例问题。
DBA应该知道自己管理的系统负载高峰在哪个(哪些)时段。在系统中手工或自动设置的基线baselines可以在问题发生时方便我们进行比较,从而知道系统的瓶颈所在。理想情况下基线中包含了应用、数据库、操作系统、网络及I/O统计信息。
在问题环境和基线信息比较时需要分清问题主次、症状和根源,从根源上解决。
实例调优有三种方式:改变应用或应用被使用的方法、改变oracle数据库、改变硬件配置。
相比之下sql调优则更加精细,方法更多、要求更高。
oracle提供了ADDM、AWR、SQL TUNING ADVISOR、SQLACCESS ADVISOR、端对端应用跟踪、系统告警、企业管理器相关检测工具等。v$开头的性能视图也可以作为我们调优的助手。
调优时需要考虑成本和收益,某些问题可以通过更换硬件的方式得到性能提升,但可能并没有从根源上解决问题。dba需要用最小的代价使数据库更好地运行。
前面提到了OLTP和OLAP的要求不同,但特定系统的要求可能有差异。在进行调优工作前就需要首先了解系统的特点和调优目标,在系统的承载能力范围内尽量使性能线性变化。
如果是在系统规划、选型时期,应该综合考虑cpu、内存、i/o、网络,选择适合的结构。系统设计时应用尽量简单、数据模型应该考虑未来的可扩容、表及索引的设计合理、少用视图,考虑用户连接方式是否恰当、变量管理时合理使用游标(绑定变量)。
具体来说,应用的设计中,数据长度要充足、评估系统负载可以根据相似的系统进行、测试阶段综合运用多种方式确保性能、新系统上线时避免一次性大量的数据迁移或长时间缓慢的迁移。
生产系统上性能问题通常是使用者反映给dba的,这时需要搞清楚问题的范围、影响的时间、发生前有无异常操作(通常是有的),还有就是尽可能全地了解系统配置和采用的相关监控手段。
oracle官方提供的10个最常见的导致性能问题的原因
1.连接管理方式问题
2.游标和共享池问题
3.sql书写问题
4.初始化参数设置问题
5.获取数据库I/O问题(应该根据网络带宽设计数据流,即I/O,而不是根据各个磁盘的大小)
6.在线重做日志设置问题
7.空闲队列、空闲队列组、事务槽缺失或回滚段太小导致缓存区buffer cache中的数据块顺序读
8.大规模的全表扫描
9.大量的递归sql(对SYS的大量调用)
10.部署或迁移问题
在紧急情况下,即使知道问题原因也可能无法快速解决,可以考虑将瓶颈发生部分的应用停掉,确保其他部分正常,再找到最好的方法,测试后实施。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26451536/viewspace-752088/ ,如需转载,请注明出处,否则将追究法律责任。