摘 要
本文主要从大型数据库ORACLE环境四个不同级别的调整分析入手,分析ORACLE的系统结构和工作机理,从九个不同方面较全面地总结了ORACLE数据库的优化调整方案。
关键词 orACLE数据库 环境调整 优化设计 方案
对于ORACLE数据库的数据存取,主要有四个不同的调整级别,第一级调整是操作系统级包括硬件平台,第二级调整是ORACLE
RDBMS级的调整,第三级是数据库设计级的调整,最后一个调整级是SQL级。通常依此四级调整级别对数据库进行调整、优化,数据库的整体性能会得到很大的改善。下面从九个不同方面介绍ORACLE数据库优化设计方案。
一.数据库优化自由结构OFA(Optimal flexible Architecture)
数据库的逻辑配置对数据库性能有很大的影响,为此,ORACLE公司对表空间设计提出了一种优化结构OFA。使用这种结构进行设计会大大简化物理设计中的数据管理。优化自由结构OFA,简单地讲就是在数据库中可以高效自由地分布逻辑数据对象,因此首先要对数据库中的逻辑对象根据他们的使用方式和物理结构对数据库的影响来进行分类,这种分类包括将系统数据和用户数据分开、一般数据和索引数据分开、低活动表和高活动表分开等等。
本文主要从大型数据库ORACLE环境四个不同级别的调整分析入手,分析ORACLE的系统结构和工作机理,从九个不同方面较全面地总结了ORACLE数据库的优化调整方案。
关键词 orACLE数据库 环境调整 优化设计 方案
对于ORACLE数据库的数据存取,主要有四个不同的调整级别,第一级调整是操作系统级包括硬件平台,第二级调整是ORACLE
RDBMS级的调整,第三级是数据库设计级的调整,最后一个调整级是SQL级。通常依此四级调整级别对数据库进行调整、优化,数据库的整体性能会得到很大的改善。下面从九个不同方面介绍ORACLE数据库优化设计方案。
一.数据库优化自由结构OFA(Optimal flexible Architecture)
数据库的逻辑配置对数据库性能有很大的影响,为此,ORACLE公司对表空间设计提出了一种优化结构OFA。使用这种结构进行设计会大大简化物理设计中的数据管理。优化自由结构OFA,简单地讲就是在数据库中可以高效自由地分布逻辑数据对象,因此首先要对数据库中的逻辑对象根据他们的使用方式和物理结构对数据库的影响来进行分类,这种分类包括将系统数据和用户数据分开、一般数据和索引数据分开、低活动表和高活动表分开等等。
Tags: 优化
首先,我们从数据库的内存SGA说起,根据SQL语句缓冲区的原理:SQL语句会先进入此区进行SQL对比,如果有此SQL语句,将直接执行,如果没有时才进行分析。由于SQL语句的经常使用,有良好的SQL语句规范,会给数据库带来一定程序上的优化。比如说,在一个项目组里面,定义一个表的别名,如果设定规范。那么就可以省去SQL缓冲区的分析步骤。
二、是块缓冲区高速缓存,管理员可以根据内存大小,把常用的表预先加入缓冲区。要知道在内存中读取要比在硬盘中读取快得多。
三、还有SGA里面的重做日志缓冲区的设置也可以起到一定的优化作用。在用户做DML操作的时候,系统会把旧数据库放入此缓冲区,如果频繁使用DML操作的数据库。这个缓冲区作大一些。
四、在进程方面,归档进程因为是做时时恢复工作,所以会对机器性能影响比较大。
五、在逻辑结构方面,表空间中的块默认值是8K。管理员可以手动去设置。
六、除了本身的这些以外,合理的设计表和管理表,1.比如说表空间的分区。分区扫描要比全表扫描快得多。
七、在做族(cluster)的时候,合理的分配参数可以起到控制碎片的作用。
八、别名的使用,在大型数据库中,使用一个字母的别名,要比建连接表的速度快1.5倍。
二、是块缓冲区高速缓存,管理员可以根据内存大小,把常用的表预先加入缓冲区。要知道在内存中读取要比在硬盘中读取快得多。
三、还有SGA里面的重做日志缓冲区的设置也可以起到一定的优化作用。在用户做DML操作的时候,系统会把旧数据库放入此缓冲区,如果频繁使用DML操作的数据库。这个缓冲区作大一些。
四、在进程方面,归档进程因为是做时时恢复工作,所以会对机器性能影响比较大。
五、在逻辑结构方面,表空间中的块默认值是8K。管理员可以手动去设置。
六、除了本身的这些以外,合理的设计表和管理表,1.比如说表空间的分区。分区扫描要比全表扫描快得多。
七、在做族(cluster)的时候,合理的分配参数可以起到控制碎片的作用。
八、别名的使用,在大型数据库中,使用一个字母的别名,要比建连接表的速度快1.5倍。
Tags: 优化
上次写的分页查询是先把值取出来,再在Action中进行截取,如:
复制内容到剪贴板 程序代码
//通过PageController对象的一系列运算赋值之后,得到开始行和结束行,再传入原来的集合进行截取
public ArrayList ReCurlist(int pagestartrow,int pageendrow,ArrayList results) //辅助方法
{
ArrayList curpagelist=new ArrayList();
log.info("results:"+results);
for(int i=pagestartrow-1;i<pageendrow;i++)
{
DomainVO domainvo = (DomainVO) results.get(i);
public ArrayList ReCurlist(int pagestartrow,int pageendrow,ArrayList results) //辅助方法
{
ArrayList curpagelist=new ArrayList();
log.info("results:"+results);
for(int i=pagestartrow-1;i<pageendrow;i++)
{
DomainVO domainvo = (DomainVO) results.get(i);
Tags: 分页
Struts分页的一个实现
在Web应用程序里,分页总让我们开发人员感到很头疼,倒不是因为技术上有多么困难,只是本来和业务没有太多关系的这么一个问题,你却得花不少功夫来处理。要是稍不留神,时不时出点问题就更郁闷了。我现在做的一个项目也到了该处理分页的时候了,感觉以前处理得都不好,所以这次有所改变,基本目标是在现有(未分页)的代码基础上,尽量少做修改,并且同样的代码可以应用于不同模块的分页。以下就是我用的方法:
首先,考虑分页绝大多数发生在列表时,组合查询时也需要用到。在我的项目里,列表的Action一般名字为ListXXXActioin,例如客户列表是ListClientsAction等等。在未分页前,ListXXXAction里会把所有的对象取出,通过request.setAttribute()放在request里,然后将请求转向到列表的jsp(例如listClients.jsp)显示出来(你可能会说不要在Action里放业务逻辑,但现在这不是我们考虑的重点)。而分页后,我们只取用户请求页对应的那些对象。为了最大限度的达到代码重用,我做了以下工作:
1、新建一个Pager类,该类有beginPage、endPage、currentPage、pageSize和total等int类型的属性,分别代表开始页、结束页、当前页、每页记录数和总记录数,它主要是让jsp页面显示页导航使用的。请注意currentPage属性是从0开始的。
2、新建一个AbstractListActioin类,并让所有ListXXXAction都继承它。在这个类里覆盖execute()方法,可以在这里判断权限等等,并在判断权限通过后执行一个abstract的act()方法,这个act()由ListXXXAction来实现。
3、在AbstractListAction里增加getPage()方法,用来从request得到用户请求的页码(若未请求则认为是第0页):
protected int getPage(HttpServletRequest request) {
String p = request.getParameter("p");
if (p == null)
return 0;
else
try {
return Integer.parseInt(p);
} catch (NumberFormatException e) {
return 0;
}
}
String p = request.getParameter("p");
if (p == null)
return 0;
else
try {
return Integer.parseInt(p);
} catch (NumberFormatException e) {
return 0;
}
}
4、在AbstractListAction里增加makePager()方法,用来向request里增加一个Pager类的实例,供jsp页面显示页导航:
protected Pager makePager(HttpServletRequest request, int total) {
Pager pager=new Pager();
pager.setTotal(total);
pager.setPageSize(Config.getInstance().getPageSize());
pager.setBeginPage(0);
pager.setEndPage(((pager.getTotal()) - 1) / pager.getPageSize() + 1);
pager.setCurrentPage(getPage(request));
return pager;
}
Pager pager=new Pager();
pager.setTotal(total);
pager.setPageSize(Config.getInstance().getPageSize());
pager.setBeginPage(0);
pager.setEndPage(((pager.getTotal()) - 1) / pager.getPageSize() + 1);
pager.setCurrentPage(getPage(request));
return pager;
}
Tags: 分页