摘要:部署在WAS上的J2EE应用程序,其性能是由多个因素决定的。例如网络、数据库、内存分配、WAS服务器的配置以及应用程序的设计。对于一个标准的J2EE应用,一个请求到来时,往往需要经过多次转发:网络> Web服务器Web容器 > EJB容器 >数据库。而每一次转发,都可能造成请求处理的瓶颈,使得应用程...
阅读全文
摘要:插入数据库,在大家开发过程中是很经常的事情,假设我们有这么一个需求:1、 我们需要接收一个外部的订单,而这个订单号是不允许重复的2、 数据库对外部订单号没有做唯一性约束3、 外部经常插入相同的订单,对于已经存在的订单则拒绝处理对于这个需求,很简单我们会用下面的代码进行处理(思路:先查找数据库,如果数...
阅读全文
摘要:从Java平台的逻辑结构上来看,我们可以从下图来了解JVM:从上图能清晰看到Java平台包含的各个逻辑模块,也能了解到JDK与JRE的区别对于JVM自身的物理结构,我们可以从下图鸟瞰一下:对于JVM的学习,在我看来这么几个部分最重要:Java代码编译和执行的整个过程JVM内存管理及垃圾回收机制下面将...
阅读全文
摘要:Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。概述:对于从事C、C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的皇帝又是执行最基础工作的劳动人民——拥有每一个对象的“所有权”,又担负着每一个对象生命开始到终结的维护责任。...
阅读全文
摘要:Java语言出来之前,大家都在拼命的写C或者C++的程序,而此时存在一个很大的矛盾,C++等语言创建对象要不断的去开辟空间,不用的时候有需要不断的去释放控件,既要写构造函数,又要写析构函数,很多时候都在重复的allocated,然后不停的~析构。于是,有人就提出,能不能写一段程序在实现这块功能,每次...
阅读全文
摘要:在上文中我们分析了很多性能监控工具,介绍这些工具的目的只有一个,那就是找出对应的性能瓶颈。盲目的性能调优是没有效果的,只有充分知道了哪里出了问题,针对性的结果才是立竿见影的。解决了主要的性能问题,那些次要的性能问题也就不足为虑了!我们知道,性能问题无非就这么几种:CPU、内存、磁盘IO、网络。那我们...
阅读全文
摘要:我们知道,在JVM编译期和加载器,甚至运行期已经做了大量的调优操作,但是那些都是JVM针对Java程序所做的通用的、简单的优化,程序在运行时由于运行环境的复杂性、业务逻辑的复杂性,很多JVM是无法进行优化处理的,这就需要我们自己在写代码的时候就注意,以便我们的程序在特定的业务场景发挥到最佳性能。要进...
阅读全文
摘要:摘要:关于性能优化这是一个比较大的话题,在《由12306.cn谈谈网站性能技术》中我从业务和设计上说过一些可用的技术以及那些技术的优缺点,今天,想从一些技术细节上谈谈性能优化,主要是一些代码级别的技术和方法。关于性能优化这是一个比较大的话题,在《由12306.cn谈谈网站性能技术》中我从业务和设计上...
阅读全文
摘要:1. 编译型语言好处是高效,缺点是:他们多半运行在底层,所处理的是字节,整数,浮点数或是其他机器层级的对象。脚本编程语言通常是解释型,这类程序的执行,是由解释器读入程序代码,将其转换为内部的形式。解释器本身是一般的编译型程序。确定是:效率不如编译型语言。shell脚本是简单性,可移植性,开发容易的特...
阅读全文
摘要:jstack Dump 日志文件中的线程状态dump 文件里,值得关注的线程状态有:死锁,Deadlock(重点关注)执行中,Runnable 等待资源,Waiting on condition(重点关注)等待获取监视器,Waiting on monitor entry(重点关注)暂停,Suspen...
阅读全文
摘要:JVM调优总结-序 几年前写过一篇关于JVM调优的文章,前段时间拿出来看了看,又添加了一些东西。突然发现,基础真的很重要。学习的过程是一个由表及里,再由里及表的过程。呵呵,所谓的“温故而知新”。而真正能走完这个轮回的人,也就能称为大牛或专家了。这个过程可能来来回回,这就是所谓“螺旋上升”,而每一次轮...
阅读全文
摘要:1. 查看Oracle数据库是否存在IO相关的竞争等待有下面三种方法:statpack报告的top 5 wait events或者AWR报告中的top 5 timed events。数据库等待事件的sql语句跟踪中主要都是IO相关的等待事件的限制。操作系统工具显示存储数据库文件的存储磁盘有非常高的利...
阅读全文
摘要:1. 会话等待事件性能视图:v$system_event, v$session_event, v$session_waitv$system_event: 查看整个系统级或者说最高级别的整体系统性能情况,这里面没有每个会话的相关信息,而是对每个事件总计了从系统启动以来在所有会话中发生过的情况。这个视图...
阅读全文
摘要:1. Shared pool是SGA设置中最复杂也是最重要的一部分内容,Oracle通过Shared pool来实现sql共享,减少代码硬分析等,从而提高数据库的性能。Shared pool的大小可以通过初始化参数shared_pool_size设置。2. 把Shared pool的内存结构在lev...
阅读全文
摘要:使用SQL_Trace和10046事件进行数据库诊断步骤:1. 利用top命令找到当前占用cpu资源最高的一个数据库进程的PID。2. 在数据库中根据PID号找到相应的SID号和SERIAL#select s.sid, s.serial# from v$session s, v$process p ...
阅读全文
摘要:1. SQL*Plus登陆:在cmd中,使用sqlplus [usernam]/[pwd]或者sqlplus [usernam]/[pwd] as sysdba或者sqlplus [usernam]/[pwd]@[netsvr],netsvr是已定义的网络服务名。2. 获得帮助索引:help ind...
阅读全文
摘要:1. 优化器(Optimizer)是sql分析和执行的优化工具,它负责制定sql的执行计划,负责保证sql执行效率最高,比如决定oracle以什么方式访问数据,全表扫描(full table scan)还是索引范围(index range scan)扫描,还是全索引快速扫描(index fast f...
阅读全文
摘要:10053事件:将CBO如何做出这个执行计划的整个过程展示出来。10053同样会在$Oracle_base/admin/sid/udump下产生一个trace文件,这个trace文件不能用tkprof工具处理,tkprof工具只能处理sql_trace或者10046事件。windows系统在D:\O...
阅读全文
摘要:1. SQL_TRACE命令将sql的整个过程输出到一个trace文件,通过读取这个trace文件来了解这个sql执行过程中oracle究竟做了什么事情。设置SQL_TRACE生成的trace文件标识:alter session set tracefile_identifier='mytest';在...
阅读全文
摘要:在oracle中,和用户有关的表有三种:用户自己创建的表,数据字典视图,动态性能视图。在后2种视图中,用户可以查询自己关心的信息。数据字典是一种系统表,它在数据库被创建时自动产生,由数据库服务器进行维护和更新。有三类主要的数据字典视图,这些视图名称分别以以下标识符开始:user_ : 存储当前用户所...
阅读全文
摘要:1. 当一个用户与数据库建立起链接以后,会向数据库发出操作请求,一条或者多条sql语句,Oracle接收到sql之后,首先将这个sql做一个hash函数运算,得到一个hash值,然后到共享池中寻找是否有和这个hash值匹配的sql,如果找到,oracle将直接使用已经存在的sql的执行计划去执行当前...
阅读全文
摘要:CBO的机制是收集尽可能多的对象信息和系统信息,通过对这些信息进行计算,分析,评估,最终得出一个成本最低的执行计划。为了让CBO总是做出最正确的执行计划,就需要给CBO提供尽可能多的段对象(表,表分区,索引等)信息。1. 如果一个表没有做分析,数据库将自动对它做动态采样分析,如果想模拟在没有分析数据...
阅读全文
摘要:Hint是Oracle提供的一种sql语法,它允许用户在sql中插入相关的语法来影响sql的执行方式。如果CBO(基于成本的优化器)认为使用Hint会导致错误的结果,Hint将被忽略1. 访问路径相关的Hint:FULL Hint: 告诉优化器对指定的表通过全表扫描的方式访问数据select /*+...
阅读全文
摘要:Latch是Oracle为了保护内存结构而发明的一种资源。就如同在SGA中,各种数据被反复从磁盘读取到内存,又重新写回到磁盘上,如果有并发用户做相同的事情,Oracle必须有一种机制,来保证数据在读取的时候,只能由一个会话来完成,这种保护机制就用到了Latch。Latch是一种轻量级锁,它不会引起阻...
阅读全文
摘要:锁是由并发产生,并发(concurrency)指超过两个以上的用户对同样的数据做修改,可能包括插入,删除和修改。并行(parallel)指将一个任务分成很多小的部分,每一个部分同时执行,最后将执行结果汇总成最后的结果。查看数据库中是否存在锁:1. 查看会话SID:select sid from v$...
阅读全文
摘要:Oracle表空间按存储数据类型可分为SYSTEM表空间,SYSAUX表空间,UNDO表空间,临时表空间和用户表空间,按存储空间方式可分为字典管理表空间和本地管理表空间,按是否支持大文件可分为大文件表空间和小文件表空间。创建临时表空间create temporary tablespace[temp_...
阅读全文
摘要:Oracle用户是一个数据库对象,用户所有的操作默认在自己的模式下进行,模式是一个用户所拥有的数据库对象的集合,每个用户都有自己的模式,用户和模式之间是一一对应的,模式的名字与用户名相同。例如,SCOTT用户的模式为SCOTT,在这个模式中包含了用户SCOTT拥有的所有数据库对象,包括表,视图,索引...
阅读全文