加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

oracle – 从v $datafile中查找表名.名字c??olum

发布时间:2020-12-31 20:04:22 所属栏目:站长百科 来源:网络整理
导读:当您查看等待事件(即使用Toad)时,您会看到一个文件#参数. 如何以表名的形式获取更多有用的信息. 是否有可能知道该表读取的记录数量? 在另一个论坛中我发现了这个建议,但似乎没有用. select segment_namefrom dba_extents extwhere ext.file_id = 828 and 10

当您查看等待事件(即使用Toad)时,您会看到一个文件#参数.
如何以表名的形式获取更多有用的信息.

是否有可能知道该表读取的记录数量?

在另一个论坛中我发现了这个建议,但似乎没有用.

select segment_name
from dba_extents ext
where ext.file_id = 828
            and 10711 between ext.block_id and ext.block_id + ext.blocks - 1
            and rownum = 1

解决方法

我们来谈谈文件,块,段和范围.

段是存储的数据库对象.它可以是表,索引,(子)分区,集群或LOB.大多数情况下,你会对表和索引感兴趣.

段由范围组成.如果您将某个细分作为一本书,那么范围就是一个章节.段(通常)以至少一个范围开始.当需要存储更多数据并且在现有范围内没有空间时,它会向该段添加另一个范围.

范围存在于数据文件中.数据文件可以有许多范围,每个范围从文件中的不同点开始并具有大小.在块10中,您可以从文件1开始有一个15个块的范围.

等待事件应标识文件和块(和行).如果等待事件是针对文件#1和块12,则转到USER_EXTENTS(或DBA_EXTENTS)并查找文件#1中的范围,其中12位于起始块位置和起始块位置之间加上块数.因此,块12将在起始块10和结束块25之间(开始加上大小).

一旦确定了范围,就会将其追溯到其父段(USER_SEGMENTS / DBA_SEGMENTS),它将为您提供表/索引名称.

理论SQL如下:

select username,sid,serial#,row_wait_obj#,row_wait_file#,row_wait_block#,row_wait_row#,ext.*
from v$session s
     join dba_extents ext on ext.file_id = row_wait_file#
     and row_wait_block# between ext.block_id and ext.block_id + ext.blocks - 1
where username = 'HR'
and status = 'ACTIVE'

对于这个我故意阻止一个会话,以便它等待行锁.

828是一个相当大的文件ID.这不是不可能,但这是不寻常的.从DBA_DATA_FILES中进行选择,看看你是否有这样的文件.如果没有,并且您只获得了一些文件,请查看所有与ext.block_id和ext.block_id ext.blocks – 1之间的“10711”匹配的对象,而不包含文件ID.你应该能够从那里找到一个可能的候选人.

例外是如果问题出在临时段上.由于这些在操作结束时被处理掉,因此没有记录永久物体.在这种情况下,表/索引的“名称”不适用,您需要以另一种方式解决任何性能问题(例如,查看SQL及其解释计划,并确定使用大量临时空间是否正确) .

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读