学习动态性能表(05)--v$session
Oracle性能分析工具Statpack安装使用详解

Oracle性能分析工具Statpack安装使用详解文件版本:V1.0文件编号:发布日期:2015-03-05编制:程万超审核:批准:修订记录:修订版本号修订人修订日期修订描述V1.0程万超2014-12-17新建简介Oracle Statspack 是用来诊断数据库性能的强有力的工具,通过Statspack 我们很容易的确定Oracle的所有瓶颈,记录数据库的性能状态。
安装步骤一、Statpack原理:1.运行oracle自带脚本,生成一系列的统计表。
2.生成快照,采样。
3.根据快照生成报告。
二、安装准备1.检查部分参数值--job_queue_process:取值范围为0到1000,总共可创建多少个job进程,为了能够建立自动任务,执行数据收集,此参数大于零alter system set job_queue_processess=6;---timed_statistics,设置为true,使收集的时间信息存储在V$sessstats和V$sysstats等动态性能视图中,但会消耗资源,可以在使用Satspack之前设为true,采样过后,把该参数动态修改为false.alter system set timed_statistics=true;2. 脚本使用此功能,需要运行oracle自带脚本,在数据库中生成一系列的表和视图,用于收集各种信息。
脚本位于%oracle_home%\rdbms\admin(224数据库的该目录为/oracle/app/product/10.2.0/Db_1/rdbms/admin)目录下,oracle816下是一组以stat开头的文件,以后的版本是一组以sp开头的文件。
三、安装1.shell中切换到oracle用户:su - oracle2.以sysdba身份登录sqlplus。
9i及以后版本,可以用sys用户以sysdba身份登录:sqlplus / as sysdba(最好转到脚本所有目录%oracle_home%\rdbms\admin,便于执行脚本)3.创建表空间,用于保存采样数据create tablespace perfstat datafile '/oradata/xdgl/perfstat.dbf(表空间存储路径)' size 100m;Statspack的报表数据还是相当占空间的,特别是在多次连续采样的情况下,所以不能太小,最小100M,否则创建对象会失败。
Oracle实例的进程结构

Oracle 实例的进程结构进程是操作系统中一个独立的可以调度的活动,用于完成指定的任务。
进程与程序的区别在于前者是一个动态概念,后者是一个静态实体。
程序仅仅是指令的有序集合,而进程则强调执行过程。
进程可以动态地创建,当完成任务后即会消亡。
在Oracle 系统工作过程中,主要涉及到如下3类进程:● 用户进程 在用户连接数据库时会创建一个用户进程。
用户进程执行的是一个应用程序或Oracle 工具程序的代码,以完成用户指定的任务。
用户进程不是实例的组成部分。
● 服务器进程 这些进程根据客户的请求来完成工作。
● 后台进程 这些进程随数据库而启动,用于完成各种维护任务,如将数据块写至磁盘进程DBWR 、维护在线重做日志进程LGWR 、清理异常中止的进程等。
图2-6显示了服务器进程、用户进程和后台进程之间的关系。
共享池数据缓冲区日志缓冲区SGAData Data Data Data Data Data Data 数据文件日志文件组DBWRARCH 磁盘或磁带CKPT 服务器进程LGWR 用户进程PMON LCKn SMON RECO图2-6 服务器进程、用户进程和后台进程之间的关系1 用户进程当用户执行一个Oracle 应用程序时,或者启动一个Oracle 工具时(如SQL*Plus ),Oracle 将创建一个用户进程来执行相应的用户任务。
与用户进程相关的有两个概念:“连接”和“会话”。
连接是一个用户进程与数据库实例之间的一条通信路径,这条通信路径通过操作系统平台中的进程间通信机制或网络连接来实现。
会话则是一个用户到数据库的指定连接。
例如当一个用户启动SQL*Plus ,并输入正确的用户名和密码连接到一个数据库库后,就为该用户创建了一个会话。
会话在用户连接到实例的过程中始终存在,直到用户断开连接或终止应用程序为止。
可以看出,会话是通过连接来建立的。
同一个用户可以通过建立多个连接来创建到Oracle数据库的多个会话。
oracle性能调优汇总

性能调优---------------------方法:一、检查日志是否有错误二、检查参数是否设置正确三、检查系统IO、CPU、内存等利用率,查看哪些占用较高四、检查哪些SQL语句大量占用IO或CPU权衡性能与安全的方面:一、多个控制文件二、一个日志文件组中有多个日志文件三、频繁的执行检查点四、备份数据文件五、频繁的归档六、块检查七、同时执行操作与统计性能调优工具:查看ALTER.LOG中的信息:1、用/ORA- 能查找文件中的错误信息2、要想让ALTER.LOG文件中产生检查点开始与结束信息,得修改参数LOG_CHECKPOINTS_TO_ALERT,将之修改为TRUE。
默认为FALSE。
SQL>ALTER SYSTEM SET LOG_CHECKPOINTS_TO_ALERT = TRUE SCOPE=BOTH;在用户UDUMP目录下的文件中产生监控用户执行信息:方法1、监控自己的操作。
在自己的session中设置参数,这样就能在用户udump目录下生成执行的SQL语句信息SQL>ALTER SESSION SET SQL_TRACE=TRUE;在pl/sql或者sqlplus中,打开一个sql_window。
(1)先运行:alter session set sql_trace=true;(2)再运行你那个返回结果不正确的SQL(3)再运行:alter session set sql_trace=false;(4)马上登陆到机器上,到$ORACLE_BASE/admin/sid/udump目录下。
(5)找到刚生成的.trc文件(假设文件名是 xxx.trc),执行命令转储跟踪文件:tkprof xxx.trc aa.txt。
查看aa.txt文件。
这个文件里面有执行计划。
看看执行计划每一步返回的结果集记录数是不是正确。
方法2、SYS用户监控别的用户执行情况方法3、对所有SESSION进行监控SQL>ALTER SESSION SET SQL_TRACE=TURE;安装STATSPACK一、创建表空间,最少100M二、安装在安装时默认创建了一个用户PERFSTAT,所以密码也可以输入这个选择要将快照存放于哪个表空间使用STATSPACK手动执行生成一次快照,间隔一般为10几分钟为益,中间不要有停机。
Oracle死锁的查看以及解决办法

Oracle死锁的查看以及解决办法1、查看死锁是否存在select username,lockwait,status,machine,program from v$session where sid in(select session_id from v$locked_object);Username:死锁语句所⽤的数据库⽤户;Lockwait:死锁的状态,如果有内容表⽰被死锁。
Status:状态,active表⽰被死锁Machine:死锁语句所在的机器。
Program:产⽣死锁的语句主要来⾃哪个应⽤程序2、查看死锁的语句select sql_text from v$sql where hash_value in(select sql_hash_value from v$session where sid in(select session_id from v$locked_object));3、死锁的解决办法1)查找死锁的进程:sqlplus "/as sysdba" (sys/change_on_install)SELECT ername,l.OBJECT_ID,l.SESSION_ID,s.SERIAL#,l.ORACLE_USERNAME,l.OS_USER_NAME,l.PROCESSFROM V$LOCKED_OBJECT l,V$SESSION S WHERE l.SESSION_ID=S.SID;2)kill掉这个死锁的进程: alter system kill session ‘sid,serial#’; (其中sid=l.session_id)3)如果还不能解决:select pro.spid from v$session ses,v$process pro where ses.sid=XX and ses.paddr=pro.addr; 其中sid⽤死锁的sid替换: exitps -ef|grep spid 其中spid是这个进程的进程号,kill掉这个Oracle进程----------------------------------------------------------------------------------------------------------------------------------"ORA-00054: 资源正忙, 但指定以 NOWAIT ⽅式获取资源, 或者超时失效"的快速解决⽅法今天在导⼀个临时表的数据,导出完成后准备清空数据,执⾏truncate命令时,遇到如下问题:ORA-00054: 资源正忙, 但指定以 NOWAIT ⽅式获取资源, 或者超时失效解决⽅法如下:=========================================================SQL> select session_id from v$locked_object;SESSION_ID----------56SQL> SELECT sid, serial#, username, osuser FROM v$session where sid = 56;SID SERIAL# USERNAME OSUSER---------- ---------- ------------------------------ ------------------------------56 2088 ghb fySQL> ALTER SYSTEM KILL SESSION '56,2088';System altered执⾏完上述命令后,提⽰会话断开。
数据库题库数据库L2

1.每个数据库有且只有一个()。
A.次要数据文件B.主要数据文件C.日志文件D.索引文件↑答案:B2.当前数据库运行在open状态,LISTENER 也正常运行,此刻一个dba 执行如下命令LSNRCTL> STOP 下面的描述中那个是正确的?A.会话只能执行查询操作B.连接的会话不允许做任何操作直到监听启动C.当前连接的会话不受影响,操作继续D.会话断掉,并且当前的事物回滚↑答案:C3.onstat -g act命令是用于显示___A.VP信息B.所有线程信息当前活动线程C.↑答案:C4.HDR集群中参数DRAUTO设置为2,若此时关闭HDR主机,则___A.HDR备用数据库将转换为主用模式,原HDR主用恢复成备用模式B.由连接管理器中的FOC切换规则来切换C.HDR备用数据库将保持为备用模式,在主用恢复后自动恢复HDR连接D.HDR备用数据库将转换为标准模式,在主用恢复后自动转换为备用恢复HDR连接↑答案:A5.下列关于Oracle支持的锁粒度描述正确的是?A.数据库级、表级、行级、列级B.数据库级、表级、行级C.行级、列级D.列级、表级↑答案:A6.当执行一个存储过程时,服务器到哪里查询该存储过程( )A.modelB.masterC.sybsystemdbD.sybsystemprocs↑答案:D7.作为一个ORACLE DBA,你运行以下的SQL命令查询ASM实例,查询结果的含义是什么?SQL> select group_number, name, state fromv$ASM_DISKGROUP; GROUP_NUMBER NAME STATE 0 DGROUP1 DISMOUNTED 2 DGROUP2 MOUNTED 3 DGROUP3 MOUNTEDA.DGROUP1磁盘组被其他的DBA卸载了B.一个多余的磁盘(DGROUP1)将在磁盘组中丢失C.一个数据文件丢失,原因是DGROUP1磁盘组正在进入DISMOUNTED 状态D.这个查询在ASM实例中没有意义↑答案:A___存储中分配给服务器的一个连续的磁盘空间的单位是8.IDS.A.chunkB.dbspacesC.pageD.extentE.tblsapces↑答案:A9.为了查看SQL Server对系统资源的使用情况,可以启动系统监视器监视。
(转)总结logminer使用及各种问题处理-wy5272003的日志-网易博客

(转)总结logminer使用及各种问题处理-wy5272003的日志-网易博客(转)总结logminer使用及各种问题处理oracle 9i 2007-08-18 14:56:49 阅读13 评论2 字号:大中小订阅在前人的工作基础上,结合自己使用过程中出现的问题及解决方法给个一个新版的<<理解和使用Oracle 8i分析工具LogMiner>>:理解和使用Oracle 8i分析工具LogMinerOracle LogMiner 是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得Oracle 重作日志文件(归档日志文件)中的具体内容,特别是,该工具可以分析出所有对于数据库操作的DML(insert、update、delete等)语句,另外还可分析得到一些必要的回滚SQL语句。
该工具特别适用于调试、审计或者回退某个特定的事务。
LogMiner分析工具实际上是由一组PL/SQL包和一些动态视图(Oracle8i内置包的一部分)组成,它作为Oracle数据库的一部分来发布,是8i产品提供的一个完全免费的工具。
但该工具和其他Oracle 内建工具相比使用起来显得有些复杂,主要原因是该工具没有提供任何的图形用户界面(GUI)。
本文将详细介绍如何安装以及使用该工具。
一、LogMiner的用途日志文件中存放着所有进行数据库恢复的数据,记录了针对数据库结构的每一个变化,也就是对数据库操作的所有DML语句。
在Oracle 8i之前,Oracle没有提供任何协助数据库管理员来读取和解释重作日志文件内容的工具。
系统出现问题,对于一个普通的数据管理员来讲,唯一可以作的工作就是将所有的log文件打包,然后发给Oracle公司的技术支持,然后静静地等待Oracle 公司技术支持给我们最后的答案。
然而从8i以后,Oracle提供了这样一个强有力的工具-LogMiner。
oracle v$parameter 参数
在 Oracle 数据库中,V$PARAMETER视图是一个动态性能视图,用于查看当前数据库实例的参数信息。
该视图包含了数据库运行时的参数值,这些参数值可以通过查询V$PARAMETER视图来获取。
以下是关于V$PARAMETER视图的详细解释:1. 查看所有参数:这将返回数据库实例中所有参数的当前值和相关信息。
2. 按照参数名查找参数:替换'parameter_name'为你想要查找的具体参数的名称,这将返回特定参数的当前值和相关信息。
3. 参数信息包含的列:▪NUM:参数的序号。
▪NAME:参数的名称。
▪TYPE:参数的数据类型。
▪VALUE:参数的当前值。
▪DISPLAY_VALUE:参数的显示值。
▪ISDEFAULT:如果参数的值是默认值,该列为TRUE,否则为FALSE。
▪ISSES_MODIFIABLE:如果参数可以在线修改,该列为TRUE,否则为FALSE。
▪ISSYS_MODIFIABLE:如果参数可以通过ALTER SYSTEM修改,该列为TRUE,否则为FALSE。
▪ISINSTANCE_MODIFIABLE:如果参数可以通过ALTER SESSION修改,该列为TRUE,否则为FALSE。
▪DESCRIPTION:参数的描述。
4. 示例:上述示例查询了所有以'optimizer'开头的参数的信息,包括参数的序号、名称、类型、当前值等。
请注意,V$PARAMETER视图的内容可以根据数据库的版本和配置而有所不同。
确保在查询时查阅数据库版本对应的 Oracle 文档,以获取更准确的信息。
详细解读STATSPACK报告
详细解读STATSPACK 报告create tablespace perf_tbs datafile '' size 50m ;@/rdbms/admin/executevariable jobno number;(:jobno,';',trunc(sysdate+1/48,'MI'),'trunc(sysdate+1/48,''MI'')');@/rdbms/admin/说在前面,很容易被忽略的几个点:在读报告的时候,我们首先需要看清楚,留意3个内容,这份报告所对应的数据库版本,cluster方式,以及报告的时间段。
尤其需要注意的就是时间段,脱离了时间段的statspck将是毫无意义的,甚至会得出错误的结果。
YAPP方法:传统的优化数据库的指标是各种命中率的统计,并以命中率作为优化的目标。
随着系统和业务模式的发展,这种优化的方法已经过时,YAPP方法由此诞生。
YAPP方法的最终目标就是缩短response time。
Response Time = Service Time + Wait TimeService Time = CPU Parse + CPU Recursive + CPU Other这里的CPU Other可以理解为是SQL语句的执行时间(包括逻辑读等)。
CPU other = CPU used by this session - parse time cpu - recursive cpu usage所以优化的最终目标定位在Service Time 和 Wait Time上:1)当性能问题在Service Time上时,由上面的公式可以看到,解决问题的方向就是SQL语句的优化上面。
2)如果性能问题在Wait Time上,则解决的方向就需要找到具体的等待事件了。
如果等待时间在整个响应时间中占较大的比例,并且主要是块读取相关的等待时,下一步就是找出哪些SQL造成了过多的物理读,可以查看statspack报告中的SQL ordered by Reads部分。
oracle锁表查询和解锁方法
oracle锁表查询和解锁方法Oracle数据库提供了多种锁表查询和解锁方法,主要包括以下几种:1.查询锁表的方法:-查询数据库中的锁表信息:可以使用`V$LOCKED_OBJECT`视图来查询数据库中当前被锁定的对象和会话信息。
-查看表的锁信息:可以使用`DBA_LOCK`视图来查看指定表被锁定的信息,包括锁定的用户、锁定的模式、锁定的操作等。
-查看表上的锁信息:可以使用`DBA_OBJECTS`视图来查询指定表上的锁信息,包括锁定的用户、锁定的模式、锁定的操作等。
2.解锁表的方法:- 杀死会话:使用`ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;`语句可以立即终止指定会话。
其中,`sid`和`serial#`是要终止会话的标识符。
- 释放表锁:使用`ALTER TABLE table_name ENABLE TABLE LOCK`语句可以释放指定表的锁。
其中,`table_name`是要释放锁的表名。
- 修改会话状态:使用`UPDATE V$SESSION SET STATUS = 'KILLED' WHERE SID = sid AND SERIAL# = serial#;`语句可以将指定会话的状态修改为`KILLED`,从而间接释放表锁。
其中,`sid`和`serial#`是要释放锁的会话的标识符。
3.避免锁表的方法:-尽量使用短事务:短事务可以减少对资源的占用时间,从而降低锁表的风险。
-尽量使用较小的粒度锁:使用较小的粒度锁可以减少锁表的范围,提高并发性能。
-合理调整事务隔离级别:使用合适的事务隔离级别可以在保证数据一致性的前提下减少锁表的发生。
-分表、分区表:将大表进行分表或分区,可以减少锁表的范围,提高并发性能。
4.监控锁表情况:- 监控锁表的工具:可以使用Oracle提供的监控工具,如AWR Report、ASH Report、Enterprise Manager等,来实时监控锁表情况。
ORACLE数据库的参数调整(精)
ORACLE数据库的参数调整概述ORACLE数据库参数主要包括磁盘I/O,回滚段、RODO日志、SGA参数,适当调整ORACLE数据库的参数可以提高系统性能,但不恰当的调整也会降低系统的性能。
ORACLE数据库的参数,一部分可以通过执行SQL语句或ORACLE的工具DBA STUDIO调整,另外一部分则必须通过修改服务器上ORACLE的安装目录下的文件INIT.ORA来调整,INIT.ORA文件一般放在ORACLE安装目录\admin\ORACLE服务名\pfile下。
优化数据库磁盘I/O使用分布I/O减少磁盘竞争●将数据文件和redo log文件分开●减少与ORACLE无关的磁盘I/O避免动态空间管理如果数据库操作引起数据增加并超出了分配的表空间,ORACLE会自动扩展表空间,动态扩展会降低系统性能。
确定一段比较长的时期内数据的最大大小;选择存储参数值,使ORACLE分配足够大的分区,避免频繁自动扩展;调整Checkpoints一个checkpoint是ORACLE自动执行的一种操作,当检查点操作时,数据库中的所有缓冲区会写回磁盘,所有数据库的控制文件被更新。
Checkpoint频繁发生会加快数据库的恢复,但是增加了I/O次数,会降低系统的性能。
修改INIT.ORA文件中的参数LOG_CHECKPOINT_TIMEOUT和LOG_CHECKPOINT_INTERVAL ,增大这两个参数会减少I/O次数,提高系统性能。
调整LGWR和DBWn I/O调整LGWR I/O每次I/O写的大小依赖于LOG缓冲区的大小,该大小由LOG BUFFER 所设置,缓冲区太大会延迟写操作,太小可能导致频繁的小的I/O操作。
如果I/O操作的平均大小很大,那么LOG文件就会成为瓶颈,可以使用STRIPE REDO LOG文件避免这个问题。
调整INIT.ORA中的参数LOG_BUFFER以调节LOG缓冲区大小,把REDO LOG文件分为几个文件,放在不同的磁盘上。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[三思笔记]学习动态性能表 http://www.5ienet.com QQ:5454589君三思
学习动态性能表
第五篇--V$SESSION 2007.5.29
在本视图中,每一个连接到数据库实例中的session都拥有一条记录。包括用户session
及后台进程如DBWR,LGWR,arcchiver等等。
V$SESSION中的常用列
V$SESSION是基础信息视图,用于找寻用户SID或SADDR。不过,它也有一些列会
动态的变化,可用于检查用户。如例:
SQL_HASH_VALUE,SQL_ADDRESS:这两列用于鉴别默认被session执行的SQL语
句。如果为null或0,那就说明这个session没有执行任何SQL语句。PREV_HASH_VALUE
和PREV_ADDRESS两列用来鉴别被session执行的上一条语句。
注意:当使用SQL*Plus进行选择时,确认你重定义的列宽不小于11以便看到完整的
数值。
STATUS:这列用来判断session状态是:
Achtive:正执行SQL语句(waiting for/using a resource)
Inactive:等待操作(即等待需要执行的SQL语句)
Killed:被标注为删除
下列各列提供session的信息,可被用于当一个或多个combination未知时找到session。
Session信息
SID:SESSION标识,常用于连接其它列
SERIAL#:如果某个SID又被其它的session使用的话则此数值自增加(当一个
SESSION结束,另一个SESSION开始并使用了同一个SID)。
AUDSID:审查session ID唯一性,确认它通常也用于当寻找并行查询模式
USERNAME:当前session在oracle中的用户名。
Client信息
数据库session被一个运行在数据库服务器上或从中间服务器甚至桌面通过
SQL*Net连接到数据库的客户端进程启动,下列各列提供这个客户端的信息
OSUSER:客户端操作系统用户名
MACHINE:客户端执行的机器
TERMINAL:客户端运行的终端
PROCESS:客户端进程的ID
PROGRAM:客户端执行的客户端程序
要显示用户所连接PC的 TERMINAL、OSUSER,需在该PC的ORACLE.INI
或Windows中设置关键字TERMINAL,USERNAME。
Application信息
[三思笔记]学习动态性能表 http://www.5ienet.com QQ:5454589君三思
调用DBMS_APPLICATION_INFO包以设置一些信息区分用户。这将显示下
列各列。
CLIENT_INFO:DBMS_APPLICATION_INFO中设置
ACTION:DBMS_APPLICATION_INFO中设置
MODULE:DBMS_APPLICATION_INFO中设置
下列V$SESSION列同样可能会被用到:
ROW_WAIT_OBJ#
ROW_WAIT_FILE#
ROW_WAIT_BLOCK#
ROW_WAIT_ROW#
V$SESSION中的连接列
Column View Joined Column(s)
SID V$SESSION_WAIT,,V$SESSTAT,,V$LOCK,V$SESSION_EVENT,V$OPEN_CURSOR SID
(SQL_HASH_VALUE, SQL_ADDRESS) V$SQLTEXT, V$SQLAREA, V$SQL (HASH_VALUE, ADDRESS)
(PREV_HASH_VALUE, PREV_SQL_ADDRESS) V$SQLTEXT, V$SQLAREA, V$SQL (HASH_VALUE, ADDRESS)
TADDR V$TRANSACTION ADDR
PADDR V$PROCESS ADDR
示例:
1.查找你的session信息
SELECT SID, OSUSER, USERNAME, MACHINE, PROCESS
FROM V$SESSION WHERE audsid = userenv('SESSIONID');
2.当machine已知的情况下查找session
SELECT SID, OSUSER, USERNAME, MACHINE, TERMINAL
FROM V$SESSION
WHERE terminal = 'pts/tl' AND machine = 'rgmdbs1';
3.查找当前被某个指定session正在运行的sql语句。假设sessionID为100
select b.sql_text
from v$session a,v$sqlarea b
where a.sql_hash_value=b.hash_value and a.sid=100
寻找被指定session执行的SQL语句是一个公共需求,如果session是瓶颈的主要原因,那
根据其当前在执行的语句可以查看session在做些什么。