- 浏览: 82182 次
- 性别:
- 来自: 北京
最新评论
-
streamsong:
王雨尘 写道
的确是说索引是排序的,我漏掉啦
我们为什么要用索引,用索引为什么比不用索引快 -
heerwa:
...
我们为什么要用索引,用索引为什么比不用索引快 -
liulanghan110:
那么用索引为什么会提高性能呢?因为索引(以B树索引为例)是树状 ...
我们为什么要用索引,用索引为什么比不用索引快 -
王雨尘:
我们为什么要用索引,用索引为什么比不用索引快 -
pangpang514:
居然和强哥合影过。。。。佩服!
我们为什么要用索引,用索引为什么比不用索引快
今天测试说在加载条目数据、校验数据和质检数据的时候很慢,但是又不知道这些操作的具体SQL是什么,很难分析,应用程序用的是weblogic中间件,session很难跟踪,只好追踪整个库的会话情况,由于整库跟踪需要前台只有一个人操作,跟踪结果才准确,如果多人操作,对跟踪结果会有影响,需要和测试人员约好时间,目前还未开始正式测试性能,所以以下操作都是在本人电脑上实验。
利用dbms_monitor追踪SESSION,如果在程序里指定CLIENT_ID,追踪起来相对简单些,可以使用CLIENT_ID_STAT_ENABLE来追踪,但是程序别没有指定,那么追踪单个SESSION的信息,就需要用SESSION_TRACE_ENABLE来追踪,但是WEBLOGIC连接池很可能连接数据库的不是同一个SESSION,没法确定SID和SERIAL#,也没法使用,只好使用DATABASE_TRACE_ENABLE进行整个数据库的跟踪,下面分别对SESSION_TRACE_ENABLE和DATABASE_TRACE_ENABLE进行演示。
首先演示利用SESSION_TRACE_ENABLE追踪SESSION的用法,首先需要查到要追踪会话的SID和SERIAL#。
SQL> select sid, serial# from v$session where sid in (select sid from
2 v$mystat where rownum = 1);
SID SERIAL#
---------- ----------
144 5
启动会话跟踪。
SQL> exec dbms_monitor.session_trace_enable(144, 5, true, true);
PL/SQL 过程已成功完成。
做一些操作,让dbms_monitor追踪到。
SQL> select count(*) from user_objects;
COUNT(*)
----------
52
SQL> select count(*) from tab;
COUNT(*)
----------
34
停止追踪。
SQL> exec dbms_monitor.session_trace_disable(144,5);
PL/SQL 过程已成功完成。
找到SID=144,SERIAL#=5的SESSION对应的操作系统进程号,通过操作系统进程号,找到生成的TRACE文件。
SQL> select spid from v$process p, v$session s where
s.paddr = p.addr and sid =144;
SPID
------------------------
5360
我的数据库是11gR2版本,需要到$ORACLE_BASE/diag/rdbms/$ORACLE_SID/$ORACLE_SID/trace目录下查找TRACE文件,10G默认是在UDUMP目录下。
D:\oracle\diag\rdbms\stream\stream\trace>dir stream_ora_5360*
2011-12-22 15:41 73,459 stream_ora_5360.trc
2011-12-22 15:41 366 stream_ora_5360.trm
直接打开TRACE文件,内容很多,而且格式很乱,像我这个水平很难看得懂,使用ORACLE的tkprof工具格式化之后,就很容易阅读了。
D:\oracle\diag\rdbms\stream\stream\trace>tkprof stream_ora_5360.trc
stream_5306.txt sys=no
TKPROF: Release 11.2.0.1.0 - Development on 星期四 12月 22 15:56:47 2011
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
这样TKPROF工具会把格式化后的内容保存到stream_5306.txt文件内,指定sys=no表示由sys用户执行的SQL不统计,下面贴部分格式化后的文件内容。
*******************************************************************************
count = number of times OCI procedure was executed
cpu = cpu time in seconds executing
elapsed = elapsed time in seconds executing
disk = number of physical reads of buffers from disk
query = number of buffers gotten for consistent read
current = number of buffers gotten in current mode (usually for update)
rows = number of rows processed by the fetch or execute call
*******************************************************************************
此部分是对下面的列标识的解释。
SQL ID: c30rfcmq0b6s0
Plan Hash: 0
BEGIN dbms_monitor.session_trace_enable(144, 5, true, true); END;
call count cpu elapsed disk query current rows
------- ----- ---- ------- ----- ------ ------- -----
Parse 0 0.00 0.00 0 0 0 0
Execute 1 0.01 0.03 1 51 0 1
Fetch 0 0.00 0.00 0 0 0 0
------- ----- ---- ------- ----- ------ ------- -----
total 1 0.01 0.03 1 51 0 1
Misses in library cache during parse: 0
Misses in library cache during execute: 1
Optimizer mode: ALL_ROWS
Parsing user id: 95
Elapsed times include waiting on following events:
Event waited on Times Max. Wait Total Waited
------------------------------- Waited ---------- ------------
SQL*Net message to client 1 0.00 0.00
SQL*Net message from client 1 85.75 85.75
*******************************************************************
此部分记录的是打开SESSION跟踪命令的信息,主要是SQL解析多少次,SQL执行多少此,占用的资源和哪些等待信息。
SQL ID: 8x615vyks733p
Plan Hash: 1218565518
select count(*) from user_objects
call count cpu elapsed disk query current rows
------- ----- ---- ------- ----- ------ -------- ----
Parse 1 0.03 0.06 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 2 0.04 0.05 1 978 0 1
------- ----- ---- ------- ----- ------ -------- ----
total 4 0.07 0.11 1 978 0 1
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 95
此部分和上面一样,列出了SQL的一些执行信息,下面是该SQL的执行计划。
Rows Row Source Operation
------- ---------------------------------------------------
1 SORT AGGREGATE (cr=978 pr=1 pw=0 time=0 us)
52 VIEW USER_OBJECTS (cr=978 pr=1 pw=0 time=1938 us cost=263 size=0 card=2360)
52 UNION-ALL (cr=978 pr=1 pw=0 time=1683 us)
52 FILTER (cr=977 pr=0 pw=0 time=1122 us)
61 HASH JOIN (cr=946 pr=0 pw=0 time=840 us cost=262 size=268922 card=2537)
96 INDEX FULL SCAN I_USER2 (cr=1 pr=0 pw=0 time=285 us cost=1 size=2112 card=96)(object id 47)
61 TABLE ACCESS FULL OBJ$ (cr=945 pr=0 pw=0 time=0 us cost=261 size=213108 card=2537)
7 TABLE ACCESS BY INDEX ROWID IND$ (cr=31 pr=0 pw=0 time=0 us cost=2 size=8 card=1)
16 INDEX UNIQUE SCAN I_IND1 (cr=18 pr=0 pw=0 time=0 us cost=1 size=0 card=1)(object id 41)
0 NESTED LOOPS (cr=0 pr=0 pw=0 time=0 us cost=2 size=29 card=1)
0 INDEX FULL SCAN I_USER2 (cr=0 pr=0 pw=0 time=0 us cost=1 size=20 card=1)(object id 47)
0 INDEX RANGE SCAN I_OBJ4 (cr=0 pr=0 pw=0 time=0 us cost=1 size=9 card=1)(object id 39)
0 INDEX RANGE SCAN I_LINK1 (cr=1 pr=1 pw=0 time=0 us cost=1 size=12 card=3)(object id 137)
这个SQL执行计划可够详细的,连递归调用的都列出来了,在下面就是一些等待信息。
Elapsed times include waiting on following events:
Event waited on Times Max. Wait Total Waited
------------------------------ Waited ---------- ------------
SQL*Net message to client 2 0.00 0.00
db file sequential read 1 0.01 0.01
SQL*Net message from client 2 11.97 11.97
*******************************************************************
此TRACE文件的其他内容都和这个差不多,不在列举,下面说下利用DATABASE_TRACE_ENABLE进行整库级的追踪,和用SESSION_TRACE_ENABLE的用法一样,首先打开追踪。
SESSION 1>exec dbms_monitor.database_trace_enable(true,true);
PL/SQL 过程已成功完成。
然后在查看这个SESSION的进程号,方便查找TRACE文件。
可以看到SESSION 2,进程号为1004的会话并没有被追踪到,SESSION 1和SESSION 3的会话信息被追踪到,下面用tkprof格式化SESSION 1生成的TRACE文件。
D:\oracle\diag\rdbms\stream\stream\trace>tkprof stream_ora_1544.trc stream_1544.txt sys=no
TKPROF: Release 11.2.0.1.0 - Development on 星期一 12月 26 10:46:56 2011
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
格式化后,查看SESSION 1格式化后的信息,限于篇幅,只列举追踪到的SQL语句。
1:SQL ID: 3p2jjjccp3rsd
Plan Hash: 0
BEGIN dbms_monitor.database_trace_enable(true,true); END;
2:SQL ID: c4v426hbuhmt2
Plan Hash: 1985757361
select spid
from
v$process p, v$session s where s.paddr = p.addr and sid =(select sid from
v$mystat where rownum = :"SYS_B_0")
3:SQL ID: a026j4p77v02a
Plan Hash: 0
BEGIN dbms_monitor.database_trace_disable; END;
在看下SESSION 3格式化后的信息。
1:SQL ID: c4v426hbuhmt2
Plan Hash: 1985757361
select spid from v$process p, v$session s where s.paddr = p.addr and sid =(select sid from v$mystat where rownum = :"SYS_B_0")
2:SQL ID: f6kwymknrt7z1
Plan Hash: 1067070269
select count(*) from tab
还有写SQLPLUS自动执行的SQL也会被追踪到,还有些递归调用的SQL,这些SQL这里没有列举,可以在未被tkprof格式化的TRACE文件里通过dep不等于0查到,dep=0表示未递归的SQL。
在格式化后的TRACE文件里,可以看到USER_ID,这表示这个SQL是被哪个USER执行的,例如:
SESSION 1的TRACE文件的USER_ID信息。
Misses in library cache during parse: 0
Optimizer mode: ALL_ROWS
Parsing user id: 95
SESSION 3的TRACE文件USER_ID信息。
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 104
查看这两个USER_ID对应的是哪个用户。
SQL>select username,user_id from dba_users where user_id in(104,95);
USERNAME USER_ID
------------------------------ ----------
STREAM 95
META 104
SESSION 1我是用STREAM用户登录的,SESSION 2我是用THAMS用户登录的,SESSION 3我是用META用户登录的,SESSION 2的信息没有被追踪到,在TRACE文件的最下面ORACLE还对这个SESSION的信息做了总结,描述的非常详细。
OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS
call count cpu elapsed disk query current rows
--------- ------ ---- -------- ----- ------ ------- -----
Parse 41 0.00 0.00 0 0 0 0
Execute 45 0.01 0.03 0 22 2 2
Fetch 97 0.00 0.04 5 144 0 66
--------- ------ ---- -------- ------ ----- ------- -----
total 183 0.01 0.07 5 166 2 68
Misses in library cache during parse: 0
Elapsed times include waiting on following events:
Event waited on Times Max. Wait Total Waited
----------------------------- Waited ---------- ------------
Disk file operations I/O 1 0.00 0.00
db file sequential read 5 0.01 0.04
16 user SQL statements in session.
37 internal SQL statements in session.
53 SQL statements in session.
*******************************************************************
Trace file: stream_ora_2460.trc
Trace file compatibility: 11.1.0.7
Sort options: default
1 session in tracefile.
16 user SQL statements in trace file.
37 internal SQL statements in trace file.
53 SQL statements in trace file.
42 unique SQL statements in trace file.
1209 lines in trace file.
40 elapsed seconds in trace file.
很多时候,比如我的这个项目,测试的就说数据库慢,可是又不清楚客户操作调用的是哪些SQL,就可以对测试人员的操作做下追踪,更直接更准确的定位问题SQL,ORACLE提供的工具有些还是很好用的。
发表评论
-
将博客搬至CSDN
2013-12-06 15:49 56将博客搬至CSDN -
博客地址更换通知
2012-09-29 09:23 633自2011年8月,博客使用新地址www.dbdream.org ... -
SHM不足导致导致数据库宕机
2012-02-21 20:17 1284今天早上到办公室,开发说测试环境应用程序挂掉,看日志说是连接不 ... -
PCTFREE和PCTUSED及将LOB存到行外
2012-02-17 11:14 1481今天的ADDM报告建议重建存放图片的表并增大PCTFREE,这 ... -
SGA_TARGET大于SGA_MAX_SIZE的真实案例
2012-02-17 11:05 1401今天在给库户数据库健康检查的时候,发现个很奇怪的问题,S ... -
利用闪回、logmnr找回误删除的数据
2011-10-25 23:54 1283朋友遇到了非常经典的ORACLE事故——误删除,开发人员告诉他 ... -
ORACLE随机取数据
2011-10-25 23:53 956目前负责的这个数字化项目,需要开发个质检工具,实现每次随机取2 ... -
oracle将一行拆分为多行
2011-10-12 00:51 2192客户的业务涉及大量的图片信息,之前这些图片信息只在数据库里存着 ... -
ORA-01034、ORA-27101和ORA-28056错误解决方法
2011-10-11 00:40 2278今天登录数据库的时候遇到了ORA-01034和ORA-2710 ... -
查看某个用户下的所有空表
2011-10-09 15:01 1094今天在群里有人问如何 ... -
SQL*LOADER加载图片、TXT
2011-10-09 15:02 1142朋友打电话问我如何利 ... -
oracle10gR2新特性--透明加密(TDE)
2011-10-09 15:02 2009从10gR2开始,oracle推出了透明数据加密技术(Tran ... -
NAMES.DIRECTORY_PATH客户端连接参数
2011-10-08 22:38 3911今天在做oracle10gR2新特性透明加密(TDE)的时候, ... -
tnsping通却连接不上数据库
2011-10-08 22:26 2499今天在Windows XP上装可个11gR2数据库,却出现个很 ... -
ORACLE字符集检查工具CSSCAN
2011-10-08 22:22 1875我们在创建数据库的时候,通常会把字符集设置为ZHS16GBK, ... -
SQL*LOADER和外部表加载
2011-10-08 22:17 1364最近一直在用SQL*LOADER加载数据,用外部表也可以实现, ... -
创建本地Duplicate数据库
2011-10-08 22:14 1072Duplicate是RMAN的一个组成部分,利用Duplica ... -
由ACOUG、云和恩墨主办的”Oracle技术嘉年华(OTN China Tour 2011)“活动已经正式拉开帷幕。
2011-09-01 12:00 821由ACOUG、云和恩墨主办的”Oracle技术嘉年华(OTN ... -
enq: TX - row lock contention
2011-07-19 17:52 1161今天,收到客户的邮件说上周每天早上10点多,数据库都会有很多锁 ... -
ORA-600汇总(上)
2011-07-04 15:28 1313此文转载 http://space.itpub.net/135 ...
相关推荐
Session的概念源远流长,但其核心在于“保持状态”,即确保在一系列操作或消息传递过程中,服务器能够识别并追踪特定用户的状态信息。 #### HTTP协议与状态保持挑战 HTTP协议,作为互联网上应用最为广泛的通信协议...
会话(session)是在用户与服务器交互的过程中,一系列连续的请求和响应形成的连接。例如,当用户浏览一个电子商务网站并添加商品到购物车时,服务器需要识别这个用户,以便在后续请求中知道应该将哪些商品关联到...
具体实现上,当用户浏览商品并添加到购物车时,服务器会为该用户的会话创建或更新相应的Session对象,并将商品信息存储在这个Session对象中。这样,即使用户关闭浏览器重新打开,只要Session没有过期,购物车中的...
释放这些session同样重要,以防止它们占用资源或阻塞其他会话。通常情况下,当使用`ALTER SYSTEM KILL`命令杀死一个会话后,该会话将自动释放。然而,在某些复杂场景下,可能需要手动干预,如重新启动数据库实例或...
之后,每当客户端发送请求时,都会将这个Session ID一起发送回去,服务器通过识别这个ID来找到对应的Session数据,从而追踪用户的状态。 2. **Session的创建与销毁** 创建Session通常是通过编程语言中的特定API...
- **会话安全性**:防止Session Hijacking(会话劫持)和Session Fixation(会话固定)攻击,应定期更换Session ID,确保敏感信息的安全。 总之,JSP会话追踪是实现Web应用状态管理的核心技术,它通过HttpSession...
传统的会话管理通常在服务器端进行,通过Session ID存储在服务器的内存中,但这种做法在分布式环境下难以应对,因为每个服务器可能无法访问其他服务器上的Session数据。 为了解决这个问题,我们可以引入Cookie和...
要利用扩展事件获取Session级别的等待信息,你需要创建一个扩展事件会话,定义感兴趣的等待类型,并设置适当的触发条件,如开始和结束执行的SQL语句。这样,当满足条件时,会话将捕获并记录等待事件的详细信息。在...
这个视图提供了关于当前活动会话(session)的详细信息,包括用户的SID(会话标识符)、执行的SQL语句等关键数据。本文将详细介绍`V$SESSION`中的各个列代表的意思及其作用,并通过实例演示如何利用这些信息来诊断和...
Session则是在服务器端存储用户状态的一种方式,它为每个会话创建一个唯一的ID,保存在服务器的内存中,通过这个ID来追踪用户的状态。 在C#中,`System.Web`命名空间提供了对Cookie和Session的操作接口。下面我们将...
3. SSL Session ID会话保持:这种方法是使用SSL Session ID来保持会话,服务器根据客户端的SSL Session ID来识别客户的身份。 4. 基于HTTP Header的会话保持:这种方法是使用HTTP Header来保持会话,服务器根据...
为了实现跨多个应用服务器的Session共享,开发者需要使用外部存储系统(如数据库、缓存服务器等)来保存Session数据,或者使用专门的Session管理技术(如黏性会话、集中式Session存储等)。 在本文中,作者详细解释...
6. **错误处理与日志记录**:Zebra_Session内置了错误处理机制,并可以记录到日志,便于开发者调试和追踪问题。 7. **安装与配置**:从提供的"install"文件来看,该类库应有一个明确的安装过程,可能包括设置配置...
- **Session**:Session是服务器为了跟踪用户的会话而创建的一个对象,用来存储特定用户会话所需的属性及配置信息。当用户在应用程序的页面之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中...
当多个服务器或服务需要协同工作,为用户提供一致性的会话体验时,如何在集群之间共享Session信息就显得至关重要。本项目"session共享项目测试"正是针对这一需求进行设计和实现的。其主要目标是探讨和实践如何有效地...
服务器可以根据这个Session ID检索对应的会话状态信息。 #### 五、理解`javax.servlet.http.HttpSession` 在Java Web应用程序中,`javax.servlet.http.HttpSession`接口是处理Session的核心API之一。它提供了与...
而session则在服务器端存储用户信息,并通过唯一的session ID在客户端和服务器之间建立关联。 三、理解cookie机制 Cookie是由服务器发送到客户端的小型文本文件,存储了用户的相关数据。每次客户端发起请求时,...
- **存储结构上的session**:有时“session”特指用于存储会话数据的数据结构或存储区域。 - **特定语言实现**:在特定编程语言中,“session”可能指的是该语言提供的会话管理API,如Java中的`javax.servlet....
- **Cookie与Session的核心区别**:Cookie主要用于在客户端存储小量数据,而Session则是在服务器端存储数据,用于跟踪用户的会话状态。 - **应用场景选择**:Cookie适用于不需要高度安全性的场景,如记录用户的偏好...
当用户访问Web应用并登录后,服务器创建一个Session对象,并将用户的登录信息或其他关键数据存储在其中。这个Session对象通过一个唯一的Session ID与客户端浏览器关联,通常这个ID会被作为Cookie发送回浏览器,之后...