‘壹’ 如何诊断Oracle数据库运行缓慢或hang住的问题 第3页
如何诊断Oracle数据库运行缓慢或hang住的问题
1 JDK是c/c++写的, 编译就是把JDK编译成可以运行的状态, 可运行的意思是指可以编译运行.java文件. 而一般情况下官方下载的JDK都是已经帮你编译好而已.
2 作者可以用自己编译的, 也可以用官方编译好的. 这个要看书中的说明了
3 JDK是c/c++写的, 里面和其他c++程序没什么区别, windows下面是一堆dll和一堆exe. 你说的.java文件是JDK的功能之一, 帮你编译java文件成class, JVM是运行class文件的容器
‘贰’ Oracle数据库里什么情况下select操作会hang住
你说的问题比较奇怪,可能是你的程序逻辑问题,不应该是Oracle的问题
oracle支持MVCC,允许你在加写锁的时候,其它查询可以读取这个数据。但不会出现把所有记录A字段的值变掉的问题。
你再仔细确认一边吧,关注中。。。
‘叁’ 数据库实例HANG住了,具体是什么原因
可以看一下系统中是否有多个pmon进程,如果有几个pmon进程,就说明有几个实例。命令如下: ps -ef|grep ora_pmon 解释:pmon进程,进程监视器(Process Monitor)oracle中用于恢复失败的数据库用户的强制性进程,它先获取失败用户的标识,释放该用户占有的所有数据库资源。一般一个oracle实例只能有一个pmon进程,可能通过查看pmon进程的多少来判断有几个实例。
‘肆’ 数据库因为什么情况会出现checkpoint not complete
当我们进行redo 切换的时候,会触发checkpoint 事件。 触发该事件有5个条件。 下文有说明。 Checkpoint做的事情之一是触发DBWn把buffer cache中的Dirty cache磁盘。另外就是把最近的系统的SCN更新到datafile header和control file(每一个事务都有一个SCN),做第一件事的目的是为了减少由于系统突然宕机而需要的恢复时间,做第二件事实为了保证数据库的一致性。
Checkpoint will flush dirty block to datafile, 从而触发DBWn书写dirty buffer,等到redo log覆盖的dirty block全部被写入datafile后才能使用redo log(循环使用),如果DBWn写入过慢,LGWR必须等待DBWn完成,则这时会出现“checkpoint not completed!”。 所以当出现checkpointnot competed的时候,还会伴随cannot allocate new log的错误。
如果遇到这个问题,可以增加日志组和增大日志文件,当然也可以修改 checkpoint参数使得检查点变频繁一些。
在出现这个错误的时候,数据库是短暂hang住的,等待checkpoint的完成。 在hang住的时候,没有日志产生。
‘伍’ 如何诊断Oracle数据库运行缓慢或hang住的问题
把oralcle的OracleServiceORCL服务设置为手动启动就可以了。每次开机启动肯定会让你电脑慢,特别是电脑内存小。至于怎嘛找应该知道吧:我的电脑右键-》管理-》服务-》OracleServiceORCL-》手动
‘陆’ 连接本地oracle数据库卡死
你说的卡死,就是数据库hang住了吧
先看看操作系统资源使用情况
再看看alert日志中有没有记录
‘柒’ 服务器 文件系统hang住是什么意思
暂时停止执行。
如果系统HANG住了,这个时候做一个SYSTEM STATE DUMP,对于分析HANG的原因十分重要,但是很多情况下,系统HANG住了就无法登录。
找到一个前台进程的PID(ps -ef|grep LOCAL),然后用gdb $ORACLE_HOME/bin/oracle进行跟踪来解决此问题。
‘捌’ oracle停止过程中hang住怎么解决
1. 在V$ACCESS视图中找到要停止进程的SID:
SELECT SID FROM V$ACCESS WHERE NAME='存储过程名称';
2. 在V$SESSION视图中查找到查出SID和SERIAL#
SELECT SID,SERIAL#,FROM V$SESSION WHERE SID='刚才查到的SID'。
3.杀掉查找出来的进程
alter system kill session 'SID,SERIAL#' immediate;
解释:进程都有唯一的进程id(SID)和序列号(SERIAL#),之后通过kill命令即可强制停止进程。
‘玖’ 如何mysql 进程 hang 住
Class.forName(className) 实际上是调用Class.forName(className, true, this.getClass().getClassLoader())。注意第二个参数,是指Class被loading后是不是必须被初始化。 ClassLoader.loadClass(className)实际上调用的是ClassLoader.loadClass(name, false),第二个参数指出Class是否被link。 区别就出来了。Class.forName(className)装载的class已经被初始化,而ClassLoader.loadClass(className)装载的class还没有被link
‘拾’ oracle 的hint有什么用
相对而言ORACLE优化器已经非常智能,产生的执行计划也是最优的,但是ORACLE还是提供了一些hint供用户显示的控制执行计划,因为大千世界各种各样的业务都有,ORACLE优化器生成的执行计划并不一定适用于所有业务,同时hint对于DBA而言更是一件利器,我们可以通过hint看到优化后的执行计划,总结一下常用hint。1.全表扫描hintfull(table_name)相对而言,全表扫描hint使用场合较少,但是要知道,全表扫描并不一定比索引效率低,特别是查询表中80%以上的数据库,全表扫描的效率要高于索引扫描。2.索引hintindex(table_nameindex_name)这两种hint一个是强制使用索引,另一个是强制执行计划不要走索引,什么用呢?常用于SQL调优过程中对比索引和非索引扫描。3.索引快速扫描hintindex_ffs(table_nameindex_name)这种索引称之为索引快速扫描,常用于统计索引列键值的个数,如count(object_id),跟全表扫描很像,但效率要比全表扫描要高很多,也就是执行计划中看到的FASTFULLSCN。4.索引跳跃扫描hintindex_ss(table_nameindex_name)该hint在执行计划中就是传说中的INDEXSKIPSCAN这个对新手而言不太好理解,举个例子索引有两个列(A,B)类型组合索引,但是查询中where条件只有B没有Aselect*fromwhereb=1,此时ORACLE优化器走的索引就是所谓的索引跳跃扫描,只在CBO下适用,在RBO不适用。5.表关联hintuser_nl(table_name1table_name2)此hint是表之间关联效率最高的一种,通常用于一大一小两表之间进行关联查询,小表作驱动表进行全表扫描,大表上要求有索引,走索引扫描,代价最低。6.表关联hintuse_hash(table_name1table_name2)如果两个表一大一小,但是大表没有索引就会选择HASH,如果两个结果集比较小还可以承受,但是如果两个较大的表HASH的话,会直接将数据库HANG住,最好避免这种算法7.表关联hintuser_merge(table_name1table_name2)两个表进行关联,分别对全个表进行全表扫描后排序然后进行合并,排序既消耗内存又消耗CPU,总之代价比较大,常通过在两个表上创建索引避免此类连接的发生。因此对比后发现,只有nested_loop方式进行关联是最优的。8.表顺序hintleading(table_name1table_name2)在RBO模式下,我们常常通过考虑from后面表的先后顺序来进行SQL优化,但是此方法对RBO模式不再适用,CBO模式下按照顺序选择驱动表9.数据加载hintappend()直接路径加载,对于大表操作极为有用,原理是什么呢?打个比方,好比两个超市理货员,一人一箱货需要上架到货架上,一个人去找货架中空闲位置去放,可能需要找N个空闲位,另一个人找一个空的货架直接放上去,那个效果最高?当然是第二个,此hint的作用就是让ORACLE找一个大空亲块直接存放新数据,而不是挤空闲位置去放新数据,如果此hint同时加上nologing联合使用效果更高,常用于数据迁移项目中。10.dblink处理端hintdriving_site(table_name)此hint常用于通过dblink连接处理数据的业务,它的作用是将本地表推送到远端数据库进行关联然后将结果返回,常用于本地表较小,远端表较大的情况,效果很是不错。11.数据返回模式hintfirst_rows该hint是影响数据返回模式hint,添加后ORACLE将边处理边返回,数据仓库中用的比较多,但是在OLTP系统中也常见,上次系统优化就因为一兄弟在添加hint时,添加后发现执行计划没变,于是将原有的hintfirst_rows然后添加hintdriving_site(),执行计划是变了,变化是因去去掉first_rows引起的,并且通过dblink远端数据库执行时查询全变成的全表扫描,导致两个业务大表hash,业务高峰直接将数据库宕机,因此该hint添加或删除一定要看远端执行计划有无发生变化,否则后果不开设想(切记)。