基于大型Oracle数据库应用开发已有6个年头了,经历了从最初零数据演变到目前上亿级的数据存储。在这个经历中,遇到各种各样的性能问题及各种性能优化。
在这里主要给大家分享一下数据库性能优化的一些方法和见解。
1、服务器要求及配置
服务器处理器性能很关键,CPU的主频要高,要有较大的内存,IO读写速度块。
如何验证一台服务器的IO读写效率如何了,可以通过IOPS这个指标来衡量。普及一下IOPS的定义:IOPS (Input/Output Operations Per Second),即每秒进行读写(I/O)操作的次数,多用于数据库等场合,衡量随机访问的性能。目前SSD硬盘的IOPS基本是万级别。但相对的成本也是比较高的。
在Oracle数据使用场景中,可以实现如下语句来查看当前服务器的IOPS:
max_iops_out pls_integer ;
max_mbps_out pls_integer ;
actual_latency_out pls_integer ;
begin
dbms_resource_manager.calibrate_io(
max_iops=>max_iops_out,
max_mbps=>max_mbps_out,
actual_latency=>actual_latency_out);
dbms_output.put_line('max_iops = ' || max_iops_out
|| ',max_mbps = ' || max_mbps_out
|| ',actual_latency = ' || actual_latency_out);
end;
2、Oracle系统级的优化
这里主要是针对ORACLE核心的优化,包括Oracle内存设置、文件大小、日志文件大小、回滚日志及各种系统级参数的设定。
那么如何发现目前的设置是否合理了,
A、在Oracle中提供一个性能分析报告AWR和ASH报告.可以通过命令来获取该份报告。里面涉及到各种指标值:内存设定是否合理、影响ORACLE慢的几大因素,数据文件读写速度等。
B、也可以通过ORALCE-EM中的性能模块,来检测每个时间节点ORALCE的运行情况,从中捕获那些耗资源的SQL语句,从而进行优化。
3、Oracle SQL语句的优化
数据库在百万级别,遇到的任何性能问题时,均可以通过SQL语句的优化。优化的层面有2种:
1、通过索引,这种优化的速度最快,而且见效也很明显。索引的合理使用我就不在这里叙述,网上很多。
2、通过更改SQL语句的查询逻辑和算法。有一个比较很效的原则是:先过滤小的结果集,然后通过这个小的结果集和其他表做关联。
在这里希望大家可以提提一些其他观点或不同看法。