; java数据库连接(jdbc)api是一系列能够让java编程人员访问数据库的接口,各个开发商的接口并不完全相同。在使用多年的oracle公司的jdbc后,我积累了许多技巧,这些技巧能够使我们更好地发挥系统的性能和实现更多的功能。
1、在客户端软件开发中使用thin驱动程序
在开发java软件方面,oracle的数据库提供了四种类型的驱动程序,二种用于应用软件、applets、servlets等客户端软件,另外二种用于数据库中的java存储过程等服务器端软件。在客户机端软件的开发中,我们可以选择oci驱动程序或thin驱动程序。oci驱动程序利用java本地化接口(jni),通过oracle客户端软件与数据库进行通讯。thin驱动程序是纯java驱动程序,它直接与数据库进行通讯。为了获得最高的性能,oracle建议在客户端软件的开发中使用oci驱动程序,这似乎是正确的。但我建议使用thin驱动程序,因为通过多次测试发现,在通常情况下,thin驱动程序的性能都超过了oci驱动程序。
2、关闭自动提交功能,提高系统性能
在第一次建立与数据库的连接时,在缺省情况下,连接是在自动提交模式下的。为了获得更好的性能,可以通过调用带布尔值false参数的connection类的setautocommit()方法关闭自动提交功能,如下所示:
connsetautocommit(false);
值得注意的是,一旦关闭了自动提交功能,我们就需要通过调用connection类的commit()和rollback()方法来人工的方式对事务进行管理。
3、在动态sql或有时间限制的命令中使用statement对象
在执行sql命令时,我们有二种选择:可以使用preparedstatement对象,也可以使用statement对象。无论多少次地使用同一个sql命令,preparedstatement都只对它解析和编译一次。当使用statement对象时,每次执行一个sql命令时,都会对它进行解析和编译。这可能会使你认为,使用preparedstatement对象比使用statement对象的速度更快。然而,我进行的测试表明,在客户端软件中,情况并非如此。因此,在有时间限制的sql *** 作中,除非成批地处理sql命令,我们应当考虑使用statement对象。
此外,使用statement对象也使得编写动态sql命令更加简单,因为我们可以将字符串连接在一起,建立一个有效的sql命令。因此,我认为,statement对象可以使动态sql命令的创建和执行变得更加简单。
4、利用helper函数对动态sql命令进行格式化
在创建使用statement对象执行的动态sql命令时,我们需要处理一些格式化方面的问题。例如,如果我们想创建一个将名字o'reilly插入表中的sql命令,则必须使用二个相连的“''”号替换o'reilly中的“'”号。完成这些工作的最好的方法是创建一个完成替换 *** 作的helper方法,然后在连接字符串心服用公式表达一个sql命令时,使用创建的helper方法。与此类似的是,我们可以让helper方法接受一个date型的值,然后让它输出基于oracle的to_date()函数的字符串表达式。
5、利用preparedstatement对象提高数据库的总体效率
在使用preparedstatement对象执行sql命令时,命令被数据库进行解析和编译,然后被放到命令缓冲区。然后,每当执行同一个preparedstatement对象时,它就会被再解析一次,但不会被再次编译。在缓冲区中可以发现预编译的命令,并且可以重新使用。在有大量用户的企业级应用软件中,经常会重复执行相同的sql命令,使用preparedstatement对象带来的编译次数的减少能够提高数据库的总体性能。如果不是在客户端创建、预备、执行preparedstatement任务需要的时间长于statement任务,我会建议在除动态sql命令之外的所有情况下使用preparedstatement对象。
6、在成批处理重复的插入或更新 *** 作中使用preparedstatement对象
如果成批地处理插入和更新 *** 作,就能够显著地减少它们所需要的时间。oracle提供的statement和 callablestatement并不真正地支持批处理,只有preparedstatement对象才真正地支持批处理。我们可以使用addbatch()和executebatch()方法选择标准的jdbc批处理,或者通过利用preparedstatement对象的setexecutebatch()方法和标准的executeupdate()方法选择速度更快的oracle专有的方法。要使用oracle专有的批处理机制,可以以如下所示的方式调用setexecutebatch():
preparedstatement pstmt3d null;try {((oraclepreparedstatement)pstmt)setexecutebatch(30);pstmtexecuteupdate();}
调用setexecutebatch()时指定的值是一个上限,当达到该值时,就会自动地引发sql命令执行,标准的executeupdate()方法就会被作为批处理送到数据库中。我们可以通过调用preparedstatement类的sendbatch()方法随时传输批处理任务。
7、使用oracle locator方法插入、更新大对象(lob)
oracle的preparedstatement类不完全支持blob和clob等大对象的处理,尤其是thin驱动程序不支持利用preparedstatement对象的setobject()和setbinarystream()方法设置blob的值,也不支持利用setcharacterstream()方法设置clob的值。只有locator本身中的方法才能够从数据库中获取lob类型的值。可以使用preparedstatement对象插入或更新lob,但需要使用locator才能获取lob的值。由于存在这二个问题,因此,我建议使用locator的方法来插入、更新或获取lob的值。
8、使用sql92语法调用存储过程
在调用存储过程时,我们可以使用sql92或oracle pl/sql,由于使用oracle pl/sql并没有什么实际的好处,而且会给以后维护你的应用程序的开发人员带来麻烦,因此,我建议在调用存储过程时使用sql92。
9、使用object sql将对象模式转移到数据库中
既然可以将oracle的数据库作为一种面向对象的数据库来使用,就可以考虑将应用程序中的面向对象模式转到数据库中。目前的方法是创建java bean作为伪装的数据库对象,将它们的属性映射到关系表中,然后在这些bean中添加方法。尽管这样作在java中没有什么问题,但由于 *** 作都是在数据库之外进行的,因此其他访问数据库的应用软件无法利用对象模式。如果利用oracle的面向对象的技术,可以通过创建一个新的数据库对象类型在数据库中模仿其数据和 *** 作,然后使用jpublisher等工具生成自己的java bean类。如果使用这种方式,不但java应用程序可以使用应用软件的对象模式,其他需要共享你的应用中的数据和 *** 作的应用软件也可以使用应用软件中的对象模式。
10、利用sql完成数据库内的 *** 作
我要向大家介绍的最重要的经验是充分利用sql的面向集合的方法来解决数据库处理需求,而不是使用java等过程化的编程语言。
如果编程人员要在一个表中查找许多行,结果中的每个行都会查找其他表中的数据,最后,编程人员创建了独立的update命令来成批地更新第一个表中的数据。与此类似的任务可以通过在set子句中使用多列子查询而在一个update命令中完成。当能够在单一的sql命令中完成任务,何必要让数据在网上流来流去的?我建议用户认真学习如何最大限度地发挥sql的功能
oraclecount一直出不来数量的原因和优化方法有索引问题、数据库性能问题、数据库锁问题、数据库版本问题。
1、索引问题:如果查询条件中的字段没有建立索引,或者索引失效,可能会导致oraclecount查询速度变慢,甚至无法返回结果。此时,可以通过建立索引或者优化查询语句来解决问题。
2、数据库性能问题:如果数据库的性能较差,例如内存不足、CPU占用率过高等,也可能导致oraclecount查询缓慢或者无法返回结果。此时,可以通过优化数据库配置或者增加服务器硬件资源来提升数据库性能。
3、数据库锁问题:如果在查询时出现了锁表或者锁行的情况,也会导致oraclecount无法返回结果。此时,可以通过查看数据库锁的情况,或者优化并发访问控制来解决问题。
4、数据库版本问题:如果使用的Oracle数据库版本较老,可能存在一些已知的Bug或者性能问题,需要升级到较新的版本来解决问题。
实例
就是管理相关库的内存结构的名字(由SGA、PGA、服务器进程、用户进程、后台进程等组成)
数据库
就是实际的磁盘上的文件(数据文件、日志文件、控制文件等),负责保存数据,但由对应的实例来 *** 作它的数据
其实,在我们传统的概念里,数据库是一个统称的名字,在Oracle中,你可以把“数据库”理解成一个大概念,也要把它理解成一个小概念
oracle导入数据库报错,提示遇到oracle错误12154的解决方法如下:
1、首先,在桌面找到计算机图标,右键点击选择属性:
2、然后,在d出的窗口中选择高级系统设置,并点击:
3、之后,在d出的对话框中选择,环境变量:
4、接着,添加两个环境变量,分别是:oracle_home和oracle_sid和oracle_home:
5、最后,添加完成之后显示已经成功ping通,这样就能顺利的连接oracle了。到此,oracle导入数据库报错的问题就被解决了:
第一章 安装 目标完成本课 您将能够:列出新的安装特性列出安装性能的增加安装新特性支持数据库存储选项 文件系统 自动存储管理(a ) 裸设备数据库管理选项 企业管理器网格控制器 企业管理器数据库控制器数据库备份和恢复选项电子邮件通知选项cluster ready服务克隆oracle g报告下面的新安装特性:配置使用oraclea 安装和配置新的企业管理器(EM)框架 如果你选择使用oracle企业管理器数据库控制器 你可以有配置使用oracle推荐的默认备份策略的选项如果你在安装的时候使用oracle企业管理器数据库控制器 你可以配置em发送警告到你知道的email地址 这些警告包括磁盘空间到了严重的界限或数据库非正常关闭 RAC的加强 g安装支持RAC新特性 尤其是安装Cluster ready服务 oracle的homes可以使用企业配置管理工具进行克隆 这个工具是附带在grid control中的 安装的性能加强内存需求 有数据库控制器的实例 m 无数据库控制器的实例 m磁盘需求 G的交换分区(或Ram的两倍) /tmp目录下要有 m的空间 oracle软件大概要 g到 g g可配置的数据库(可选) g的闪回区(可选) 减少了安装数据库的总大小 去掉了旧的选项完全安装大概 min只需要一张cd查看安装前的必要条件 查看是否有足够的临时空间 位和 位的问题 检查正确的os 检查ps的patch 系统包 系统/内核参数 x 服务器的许可 足够的交换空间 非空的oracle_home混杂的安装加强sys和system密码只需要输入一次干净的反安装 没有文件留下 oracle home外的文件都被清除 windows中的注册表记录被清除有特定的 oc j需求b_idsableStartMenu变量受到ISV的支持CD pack的内容oracle database g cdpanion cdoracle iAS infrastructure cdoracle database g clientoracle enterprise manger cdoracle documentation g cdoracle database g demos cdpanion cd 有 dbworkflowohssqlj jpublishercontext knowledgelegato storage managerexamples管理选项如果你在安装的时候选择创建启动数据库 你可以看到很多屏幕问你配置启动数据库的下面的信息命名数据库字符集schema样本数据库管理文件存储选项文件系统 把文件存储在你配置的os文件系统上ASm ASM文件是自动创建和配置的 你可以得到额外的镜向 条带化等益处 裸设备(分区) 上面没有文件系统的磁盘分区 备份和恢复选项安装的时候会提示你要不要进行自动备份口令安装的时候你可以为所有的用户设置同一个口令 也可以单独为他们设置 第二章 服务器配置 完成本章之后 您将能够:描述使用dbca安装完数据库之后oracle g功能性的支持同时使用初始化参数的子集来简化实例配置从dbca安装样本schema(可选的)从oem中查看数据库使用统计dbca的加强dbca为oracle标准提供快速创建功能齐全的马上可以使用的数据库:自动创建sysaux辅助表空间应用闪回去 并且设置闪回备份和恢复策略out of the box管理资料库自动统计的收集自动ldap注册oracle g为了简化当年的将来的自我管理活动 引进了许多特性上的改善 这次改善包括存储所有辅助元数据和工作负载信息和为了优化性能的监控工具的公用体系结构 这些改善都是被dbca完全支持和应用的 新的属于系统的sysaux表空间为所有的不存在system表空间的辅助数据库元数据提供了集中的位置 它减少了创建摩尔表空间的数目 无论是种子数据库还是用户定义的数据库 dbca现在自动的配置默认的闪回区 这是为需要恢复的文件和数据库活动的统一存储位置 oem资料库 作业 事件子系统现在都是自动的配置 减少了人工安装的需要 以个新的嵌入和完全自我管理的资料库捕捉工作负载信息和与性能有关的统计 这样减少了管理成本 dbca配置的新目录减少了使用网络api配置ldap ora的需要 简化种子数据库 简化初始化参数 减小大小 样本schema的可选安装为磁盘存储的自动存储管理ASM现在oracle数据库的配置更容易 dba只需要注意少量几个初始化参数 参数现在分成两组 基本的和高级的参数 在大多数情况下 为了得到合理的性能 你之需要设置或修改基本参数 他们大概有 个 你现在可以时候dbca配置a 为oracle数据库文件建立的和文件系统和卷管乐器的综向集成 为了常规和rac环境 使用数据库控制器进行管理在这个dbca屏幕上 你可以设置你的数据库使用grid控制器还是数据库控制器 当你运行dbca的时候 它要确定oracle管理代理已经在这个计算机上安装了 如果有 你就可以从下拉框选择oracle管理服务和grid control选项来进行中央化管理 当你完成安装的时候 这个服务作为被管理的目标是自动启动的 如果你不中央管理你的oracle环境 你仍然可以使用em来管理你的数据库 em database control在你数据库安装的时候 自动安装了 你可以使用db control提供的基于web的特性来监控 管理你安装的单实例或集群数据库 你也可以配em为sy an用户接受电子邮件通知 当metric到了一定严重或警告的时候 当你选择db control的时候 你还可以配置每天备份到闪回区 SYSAUX和dbcadbca支持强制创建sysaux表空间 在数据库存储页 sysaux是tablespace文件夹必要的原始 你可以通过单击 存储标签或在datafile文件夹相应的sysaux入口来改变sysaux的数据库文件和存储参数 数据文件和存储参数有默认的值 但你单击finish的时候 dbca就会和其它的数据库创建事件一起创建sysaux表空间和它的schema 所有的种子数据库都有sysaux表空间 使用企业管理器启动控制台os> emctl start dbconsole访问数据库控制器 //hostname: /em要提供sys/passwd as sysdba;你要从一个客户端浏览器访问em 数据库控制器 必须要运行dbconsole进程 安装之后 dbconsole进程是自动会启动的 然后 如果这个集成没有启动 你可以向下面的命令行手工的启动它: 到$ORACLE_HOME/bin目录下 执行下面的命令: emctl start dbconsole这样你就可以打开web浏览器 输入下面的url ortnumber/em TARGET=//hostnameortnumber/em来访问em db control host那么是你的计算机的名字或地址 portnumber是em db control 的端口号 这是在安装的时候指定的 默认的是 你可以在$ORACLE_HOME/install/portlist ini文件中找到这个值 如果实例启动了 EM就会显示db control登录页 你必须使用授权访问db control的用户登录到数据库 一开始是sys用户 使用在安装的时候你确定的sys用户的密码 从connect as 下拉框选sysdba 然后点登录 这样就会出现db control的主页 数据库克隆在你成功的配置调整和测试新的实例之后 你也许需要克隆数据库到一个已有的oracle home 你可以使用em clone database向导来完成克隆 要克隆一个数据库 你可以到要克隆的数据库的维护页 然后在deployment区点击clone 数据库 克隆数据库工具有下列特性:克隆数据库可以从 或后来的版本可以在源数据库打开的时候进行克隆备份数据文件 把它copy到指定的oracle home下 然后通过备份的数据库文件和归档恢复数据库来创建新的数据库 新的数据库跟到备份开始的源数据库一模一样 在指定的oracle home下创建新的数据库实例 密码文件 设置网络文件 根据源实例配置创建初始化参数文件和spfile 然后启动新的实例到open模式 clone database工具是使用rman来完成数据库克隆的 metalink的集成oem G 通过内置的metalink集成大大简化了安装补丁 em会自动的警告你关键更新和系统需要指定补丁的标注 你可以使用em patch向导来看哪些临时补丁可以安装 你还可以使用patch向导来选择补丁和查看你的系统是否需要这个补丁 你可以直接从em看到补丁的详细信息已经readme 按照下面的步骤访问补丁向导 在db control主页选maintenance标签 在deployments区下面 lishixinzhi/Article/program/Oracle/201311/17212
这是hibernate中的hql查询语句,是写在java程序中的,而不能用oracle直接查询,它通过java中的pojo类和这个类中的字段对应于数据库中的某张表和表中的字段,是通过一个映射文件来说明的。
Sole是java类名(对应于数据库中的一张表),sole是表别名,然后通过导航,old和users是Sole类中的字段(对应于表中的字段),应该还有个User类,其中有个objId字段。
总之,hql查询的是java类和类中的字段,而类和类中的字段同数据库表和表字段的关系由映射文件规定
另外,这条hql查询语句有错误,hql没有select ,可以改为select sole或省略。
实现思路:可以通过w3c的dom解析器进行 *** 作,之后通过getName获取到xmltpye中的属性值。
举例:
import javaioFile;
import javaxxmlparsersDocumentBuilder;
import javaxxmlparsersDocumentBuilderFactory;
import orgw3cdomDocument;
import orgw3cdomElement;
import orgw3cdomNodeList;
public class DomTest1
{
public static void main(String[] args) throws Exception
{
// step 1: 获得dom解析器工厂(工作的作用是用于创建具体的解析器)
DocumentBuilderFactory dbf = DocumentBuilderFactorynewInstance();
// Systemoutprintln("class name: " + dbfgetClass()getName());
// step 2:获得具体的dom解析器
DocumentBuilder db = dbfnewDocumentBuilder();
// Systemoutprintln("class name: " + dbgetClass()getName());
// step3: 解析一个xml文档,获得Document对象(根结点)
Document document = dbparse(new File("candidatexml"));
NodeList list = documentgetElementsByTagName("PERSON");
for(int i = 0; i < listgetLength(); i++)
{
Element element = (Element)listitem(i);
String content = elementgetElementsByTagName("NAME")item(0)getFirstChild()getNodeValue();
Systemoutprintln("name:" + content);
Systemoutprintln("--------------------------------------");
}
}
}
1、1、调整数据结构的设计。这一部分在开发信息系统之前完成,程序员需要考虑是否使用ORACLE数据库的分区功能,对于经常访问的数据库表是否需要建立索引等。
2、2、调整应用程序结构设计。这一部分也是在开发信息系统之前完成,程序员在这一步需要考虑应用程序使用什么样的体系结构,是使用传统的Client/Server两层体系结构,还是使用Browser/Web/Database的三层体系结构。不同的应用程序体系结构要求的数据库资源是不同的。
3、3、调整数据库SQL语句。应用程序的执行最终将归结为数据库中的SQL语句执行,因此SQL语句的执行效率最终决定了ORACLE数据库的性能。ORACLE公司推荐使用ORACLE语句优化器(Oracle Optimizer)和行锁管理器(row-level manager)来调整优化SQL语句。
4、4、调整服务器内存分配。内存分配是在信息系统运行过程中优化配置的,数据库管理员可以根据数据库运行状况调整数据库系统全局区(SGA区)的数据缓冲区、日志缓冲区和共享池的大小;还可以调整程序全局区(PGA区)的大小。需要注意的是,SGA区不是越大越好,SGA区过大会占用 *** 作系统使用的内存而引起虚拟内存的页面交换,这样反而会降低系统。
5、5、调整硬盘I/O,这一步是在信息系统开发之前完成的。数据库管理员可以将组成同一个表空间的数据文件放在不同的硬盘上,做到硬盘之间I/O负载均衡。
6、6、调整 *** 作系统参数,例如:运行在UNIX *** 作系统上的ORACLE数据库,可以调整UNIX数据缓冲池的大小,每个进程所能使用的内存大小等参数。
实际上,上述数据库优化措施之间是相互联系的。ORACLE数据库性能恶化表现基本上都是用户响应时间比较长,需要用户长时间的等待。但性能恶化的原因却是多种多样的,有时是多个因素共同造成了性能恶化的结果,这就需要数据库管理员有比较全面的计算机知识,能够敏感地察觉到影响数据库性能的主要原因所在。另外,良好的数据库管理工具对于优化数据库性能也是很重要的。
ORACLE数据库性能优化工具
常用的数据库性能优化工具有:
1、1、ORACLE数据库在线数据字典,ORACLE在线数据字典能够反映出ORACLE动态运行情况,对于调整数据库性能是很有帮助的。
2、2、 *** 作系统工具,例如UNIX *** 作系统的vmstat,iostat等命令可以查看到系统系统级内存和硬盘I/O的使用情况,这些工具对于管理员弄清出系统瓶颈出现在什么地方有时候很有用。
3、3、SQL语言跟踪工具(SQL TRACE FACILITY),SQL语言跟踪工具可以记录SQL语句的执行情况,管理员可以使用虚拟表来调整实例,使用SQL语句跟踪文件调整应用程序性能。SQL语言跟踪工具将结果输出成一个 *** 作系统的文件,管理员可以使用TKPROF工具查看这些文件。
4、4、ORACLE Enterprise Manager(OEM),这是一个图形的用户管理界面,用户可以使用它方便地进行数据库管理而不必记住复杂的ORACLE数据库管理的命令。
5、5、EXPLAIN PLAN——SQL语言优化命令,使用这个命令可以帮助程序员写出高效的SQL语言。
ORACLE数据库的系统性能评估
信息系统的类型不同,需要关注的数据库参数也是不同的。数据库管理员需要根据自己的信息系统的类型着重考虑不同的数据库参数。
1、1、在线事务处理信息系统(OLTP),这种类型的信息系统一般需要有大量的Insert、Update *** 作,典型的系统包括民航机票发售系统、银行储蓄系统等。OLTP系统需要保证数据库的并发性、可靠性和最终用户的速度,这类系统使用的ORACLE数据库需要主要考虑下述参数:
l l 数据库回滚段是否足够?
l l 是否需要建立ORACLE数据库索引、聚集、散列?
l l 系统全局区(SGA)大小是否足够?
l l SQL语句是否高效?
2、2、数据仓库系统(Data Warehousing),这种信息系统的主要任务是从ORACLE的海量数据中进行查询,得到数据之间的某些规律。数据库管理员需要为这种类型的ORACLE数据库着重考虑下述参数:
l l 是否采用B-索引或者bitmap索引?
l l 是否采用并行SQL查询以提高查询效率?
l l 是否采用PL/SQL函数编写存储过程?
l l 有必要的话,需要建立并行数据库提高数据库的查询效率
SQL语句的调整原则
SQL语言是一种灵活的语言,相同的功能可以使用不同的语句来实现,但是语句的执行效率是很不相同的。程序员可以使用EXPLAIN PLAN语句来比较各种实现方案,并选出最优的实现方案。总得来讲,程序员写SQL语句需要满足考虑如下规则:
1、1、尽量使用索引。试比较下面两条SQL语句:
语句A:SELECT dname, deptno FROM dept WHERE deptno NOT IN
(SELECT deptno FROM emp);
语句B:SELECT dname, deptno FROM dept WHERE NOT EXISTS
(SELECT deptno FROM emp WHERE deptdeptno = empdeptno);
这两条查询语句实现的结果是相同的,但是执行语句A的时候,ORACLE会对整个emp表进行扫描,没有使用建立在emp表上的deptno索引,执行语句B的时候,由于在子查询中使用了联合查询,ORACLE只是对emp表进行的部分数据扫描,并利用了deptno列的索引,所以语句B的效率要比语句A的效率高一些。
2、2、选择联合查询的联合次序。考虑下面的例子:
SELECT stuff FROM taba a, tabb b, tabc c
WHERE aacol between :alow and :ahigh
AND bbcol between :blow and :bhigh
AND cccol between :clow and :chigh
AND akey1 = bkey1
AMD akey2 = ckey2;
这个SQL例子中,程序员首先需要选择要查询的主表,因为主表要进行整个表数据的扫描,所以主表应该数据量最小,所以例子中表A的acol列的范围应该比表B和表C相应列的范围小。
3、3、在子查询中慎重使用IN或者NOT IN语句,使用where (NOT) exists的效果要好的多。
4、4、慎重使用视图的联合查询,尤其是比较复杂的视图之间的联合查询。一般对视图的查询最好都分解为对数据表的直接查询效果要好一些。
5、5、可以在参数文件中设置SHARED_POOL_RESERVED_SIZE参数,这个参数在SGA共享池中保留一个连续的内存空间,连续的内存空间有益于存放大的SQL程序包。
6、6、ORACLE公司提供的DBMS_SHARED_POOL程序可以帮助程序员将某些经常使用的存储过程“钉”在SQL区中而不被换出内存,程序员对于经常使用并且占用内存很多的存储过程“钉”到内存中有利于提高最终用户的响应时间。
CPU参数的调整
CPU是服务器的一项重要资源,服务器良好的工作状态是在工作高峰时CPU的使用率在90%以上。如果空闲时间CPU使用率就在90%以上,说明服务器缺乏CPU资源,如果工作高峰时CPU使用率仍然很低,说明服务器CPU资源还比较富余。
使用 *** 作相同命令可以看到CPU的使用情况,一般UNIX *** 作系统的服务器,可以使用sar –u命令查看CPU的使用率,NT *** 作系统的服务器,可以使用NT的性能管理器来查看CPU的使用率。
数据库管理员可以通过查看v$sysstat数据字典中“CPU used by this session”统计项得知ORACLE数据库使用的CPU时间,查看“OS User level CPU time”统计项得知 *** 作系统用户态下的CPU时间,查看“OS System call CPU time”统计项得知 *** 作系统系统态下的CPU时间, *** 作系统总的CPU时间就是用户态和系统态时间之和,如果ORACLE数据库使用的CPU时间占 *** 作系统总的CPU时间90%以上,说明服务器CPU基本上被ORACLE数据库使用着,这是合理,反之,说明服务器CPU被其它程序占用过多,ORACLE数据库无法得到更多的CPU时间。
数据库管理员还可以通过查看v$sesstat数据字典来获得当前连接ORACLE数据库各个会话占用的CPU时间,从而得知什么会话耗用服务器CPU比较多。
出现CPU资源不足的情况是很多的:SQL语句的重解析、低效率的SQL语句、锁冲突都会引起CPU资源不足。
1、数据库管理员可以执行下述语句来查看SQL语句的解析情况:
SELECT FROM V$SYSSTAT
WHERE NAME IN
('parse time cpu', 'parse time elapsed', 'parse count (hard)');
这里parse time cpu是系统服务时间,parse time elapsed是响应时间,用户等待时间
waite time = parse time elapsed – parse time cpu
由此可以得到用户SQL语句平均解析等待时间=waite time / parse count。这个平均等待时间应该接近于0,如果平均解析等待时间过长,数据库管理员可以通过下述语句
SELECT SQL_TEXT, PARSE_CALLS, EXECUTIONS FROM V$SQLAREA
ORDER BY PARSE_CALLS;
来发现是什么SQL语句解析效率比较低。程序员可以优化这些语句,或者增加ORACLE参数SESSION_CACHED_CURSORS的值。
2、数据库管理员还可以通过下述语句:
SELECT BUFFER_GETS, EXECUTIONS, SQL_TEXT FROM V$SQLAREA;
查看低效率的SQL语句,优化这些语句也有助于提高CPU的利用率。
3、3、数据库管理员可以通过v$system_event数据字典中的“latch free”统计项查看ORACLE数据库的冲突情况,如果没有冲突的话,latch free查询出来没有结果。如果冲突太大的话,数据库管理员可以降低spin_count参数值,来消除高的CPU使用率。
内存参数的调整
内存参数的调整主要是指ORACLE数据库的系统全局区(SGA)的调整。SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。
1、 1、 共享池由两部分构成:共享SQL区和数据字典缓冲区,共享SQL区是存放用户SQL命令的区域,数据字典缓冲区存放数据库运行的动态信息。数据库管理员通过执行下述语句:
select (sum(pins - reloads)) / sum(pins) "Lib Cache" from v$librarycache;
来查看共享SQL区的使用率。这个使用率应该在90%以上,否则需要增加共享池的大小。数据库管理员还可以执行下述语句:
select (sum(gets - getmisses - usage - fixed)) / sum(gets) "Row Cache" from v$rowcache;
查看数据字典缓冲区的使用率,这个使用率也应该在90%以上,否则需要增加共享池的大小。
2、 2、 数据缓冲区。数据库管理员可以通过下述语句:
SELECT name, value FROM v$sysstat WHERE name IN ('db block gets', 'consistent gets','physical reads');
来查看数据库数据缓冲区的使用情况。查询出来的结果可以计算出来数据缓冲区的使用命中率=1 - ( physical reads / (db block gets + consistent gets) )。
这个命中率应该在90%以上,否则需要增加数据缓冲区的大小。
3、 3、 日志缓冲区。数据库管理员可以通过执行下述语句:
select name,value from v$sysstat where name in ('redo entries','redo log space requests');查看日志缓冲区的使用情况。查询出的结果可以计算出日志缓冲区的申请失败率:
申请失败率=requests/entries,申请失败率应该接近于0,否则说明日志缓冲区开设太小,需要增加ORACLE数据库的日志缓冲区。
以上就是关于JDBC连接Oracle数据库之十大技巧全部的内容,包括:JDBC连接Oracle数据库之十大技巧、oraclecount一直出不来数量,如何优化、简述Oracle数据库中实例和数据库的概念以及它们之间的关系等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)