oracle逻辑读怎么看,oracle如何读

如何查询Oracle用户操作日志

1 查看值得怀疑的SQL

成都创新互联公司长期为数千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为乌兰企业提供专业的网站制作、做网站乌兰网站改版等技术服务。拥有十载丰富建站经验和众多成功案例,为您定制开发。

select substr(to_char(s.pct,'99.00'),2)||'%'load,

s.executions executes,

p.sql_text

from(select address,

disk_reads,

executions,

pct,

rank() over(order by disk_reads desc) ranking

from(select address,

disk_reads,

executions,

100*ratio_to_report(disk_reads) over() pct

from sys.v_$sql

where command_type!=47)

where disk_reads50*executions) s,

sys.v_$sqltext p

where s.ranking=5

and p.address=s.address

order by 1, s.address, p.piece;

2 查看消耗内存多的sql

select b.username ,a.buffer_gets ,a.executions,

a.disk_reads/decode(a.executions,0,1,a.executions),a.sql_text SQL

from v$sqlarea a,dba_users b

where a.parsing_user_id = b.user_id

and a.disk_reads 10000

order by disk_reads desc;

3 查看逻辑读多的SQL

select*

from(select buffer_gets, sql_text

from v$sqlarea

where buffer_gets500000

order by buffer_gets desc)

where rownum=30;

4 查看执行次数多的SQL

select sql_text, executions

from(select sql_text, executions from v$sqlarea order by executions desc)

where rownum81;

5 查看读硬盘多的SQL

select sql_text, disk_reads

from(select sql_text, disk_reads from v$sqlarea order by disk_reads desc)

where rownum21;

6 查看排序多的SQL

select sql_text, sorts

from(select sql_text, sorts from v$sqlarea order by sorts desc)

where rownum21;

7 分析的次数太多,执行的次数太少,要用绑变量的方法来写sql

set pagesize 600;

set linesize 120;

select substr(sql_text,1,80) "sql",count(*),sum(executions) "totexecs"

from v$sqlarea

where executions5

group by substr(sql_text,1,80)

having count(*)30

order by 2;

8 游标的观察

set pages 300;

select sum(a.value), b.name

from v$sesstat a, v$statname b

where a.statistic#=b.statistic#

and b.name='opened cursors current'

group by b.name;

select count(0) from v$open_cursor;

select user_name, sql_text,count(0)

from v$open_cursor

group by user_name, sql_text

having count(0)30;

9 查看当前用户username执行的SQL

select sql_text

from v$sqltext_with_newlines

where(hash_value, address) in

(select sql_hash_value, sql_address

from v$session

where username='username')

order by address, piece;

oracle中的一致性读是什么意思

逻辑读就是从内存中(db buffer cache)读。 SQL执行过程中,如果发生物理读,将dbf的数据加载到内存,这一步显然是非常耗时的。 所以上面的说法是错误的。 我们总是希望逻辑读越多越好,毕竟从内存读的速度要远远大大于从硬盘读

oracle如何读取数据

Oracle读取数据的最大限制取决于操作系统和Oracle对多块读IO的限制。在物理上来说,一个SQL语句要读取某个记录,必须将该记录读取到DB CACHE中,然后才能从DB CACHE中获取,这种访问我们一般称为物理读(READ),如果这个数据已经存在于DB CACHE中,那么前台进程可以直接从DB CACHE中读取数据,这样的读取成为逻辑读(GET),如果要读取的数据已经被修改,需要从UNDO中读取前映像来获取一致性的数据,那么会从UNDO中取出前映像,和当前的数据块一起形成一个一致性读块(CR BLOCK),然后再从CR BLOCK中读取数据,这种访问方式称为一致性读(CR GET)。 从逻辑上讲, Oracle读取数据通过三种途径:全表扫描( Full Table Sacn,FTS )、引扫描、通过ROWID直接访问。在阅读SQL执行计划的时候,可以通过 TABLE ACCESS子句来查看Oracle访问某个表的方法,一般来说,对于大型的表来说,如果出现 TABLE ACCESS FULL 的提示,是需要加以重视的,一般情况下,对于大表的全表扫描应该是尽量避免的。下面是一个简单的执行计划:Query Plan----------------------------------------- SELECT STATEMENT [CHOOSE] Cost=1234 TABLE ACCESS FULL LARGE [:Q65001] [ANALYZED]查看SQL的执行计划的时候,最右边的,最上面的操作是首先被执行的,上面的例子只有一个操作,就是对表“LARGE”进行全表扫描。当这个步骤执行完毕后,就会将结果集返回给上面一层的语句,上面的例子就是 SELECT STATEMENT 这个语句,一般来说 SELECT STATEMENT 是整个执行计划的顶层。 [CHOOSE]表明这个SQL语句的OPTIMIZER_GOAL ,在这个提示的右侧是COST数据,如果COST是有实际值的,那么说明使用了CBO优化器,如果COST没有实际值,那么说明使用了RBO优化器。比如: SELECT STATEMENT [CHOOSE] Cost=COST只是一个相对的值,只是优化器用来分析访问路径的优劣的,相同的SQL, COST越小的执行计划,起执行效果越好,开销越小。而不同的SQL ,其COST值是没有可比性的。 [:Q65001]指明这部分操作被采用并行查询的方式执行,

oracle中逻辑读的单位是什么?

有两种读:逻辑读和物理读

数据库读写的单位是数据块。当用户最终得到的结果可能只是某个数据块中的几行或几列。当一个查询语句被执行时,服务器进程会将相关的数据块从数据文件中写入内存(buffer cache)。这就叫做物理读。每读取一个数据块,即是一次物理读。

而用户需要的并不是整个数据块,而是其中的几行或几列。从buffer cache中提取行的过程,便是逻辑读。

而其中逻辑读又分成两种:即时读(current read)和一致性读(consistent read)。

(1)即时读::即时读就是读取数据块当前的最新数据。任何时候在buffer cache中都只有一份当前数据块。即时读通常发生在对数据进行修改,删除操作时。这时,进程会给数据加上行级锁,并且标识数据为“脏数据”。

(2)一致性读:

一致性读就是为了保证数据的一致性。在Buffer Cache中的数据块上都会有最后一次修改数据块时的SCN。

如果一个事务需要修改数据块中数据,会先在回滚段中保存一份修改前数据和SCN的数据块,然后再更新Buffer Cache中的数据块的数据及其SCN,并标识其为“脏”数据。

当其他进程读取数据块时,会先比较数据块上的SCN和自己的SCN。如果数据块上的SCN小于等于进程本身的SCN,则直接读取数据块上的数据;

如果数据块上的SCN大于进程本身的SCN,则会从回滚段中找出修改前的数据块读取数据。通常,普通查询都是一致性读。

综上所述,逻辑读的原理和过程比较复杂。逻辑读的单位并不能简单的认为是个块。

oracle需要经常统计每个会话的逻辑读和物理读信息,直接使用SQL很不方便,设计一个程序,简化查看某个会话

select t.SID,n.NAME,t.VALUE

from v$sesstat t, v$statname n

where t.STATISTIC# = n.STATISTIC#

and n.STATISTIC# in (9, 54)

and t.SID=sid

如何判断oracle的读写状态是否正常

一:查看数据库监听是否启动

lsnrctl status

二:查看数据库运行状态,是否open

select instance_name,status from v$instance;

三:查看alert日志,查看是否有错误信息

SQL show parameter background_dump

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

background_dump_dest string /u01/app/oracle/diag/rdbms/ogg1/ogg1/trace

vim / u01/app/oracle/diag/rdbms/ogg1/ogg1/trace/alert_ogg1.log


标题名称:oracle逻辑读怎么看,oracle如何读
本文链接:http://myzitong.com/article/hcgisd.html