当前位置:网站首页>Oracle创建索引
Oracle创建索引
2022-07-26 10:33:00 【赵勇】
create table scott.idx_object_id on scott.test(object_id);
现在需要在scott.test的object_id列创建一个索引,比如创建完成后有50GB
中途我怎么查看这个过程,应该是先生成一个临时段,这个临时段的大小怎么看呢?
其他答案1:
如果你是关注索引创建的进度,可以查询v$session_longops视图。
其他答案2:
您好,我关注的不是这个进度,是那个临时段的大小变化
其他答案3:
可以试试这个,刚测了下,还不错。
select k.inst_id "INST_ID",
ktssoses "SADDR",
sid,
ktssosno "SERIAL#",
username "USERNAME",
osuser "OSUSER",
ktssosqlid "SQL_ID",
ktssotsn "TABLESPACE",
decode(ktssocnt, 0, 'PERMANENT', 1, 'TEMPORARY') "CONTENTS",
--注意在12c的v$sort_usage定义中TABLESPACE和CONTENTS已经发生变化了。
decode(ktssosegt, 1, 'SORT', 2, 'HASH', 3, 'DATA', 4, 'INDEX',
5, 'LOB_DATA', 6, 'LOB_INDEX' , 'UNDEFINED') "SEGTYPE",
ktssofno "SEGFILE#",
ktssobno "SEGBLK#",
ktssoexts "EXTENTS",
ktssoblks "BLOCKS",
round(ktssoblks*p.value/1024/1024, 2) "SIZE_MB",
ktssorfno "SEGRFNO#"
from x$ktsso k, v$session s,
(select value from v$parameter where name='db_block_size') p
where ktssoses = s.saddr
and ktssosno = s.serial#;
其他答案4:
感谢两位,今天测试已找到方法了,创建的时候dba_segments.segment_type会为TEMPORARY,直到索引创建完毕,根据dba_segments统计即可
其他答案5:
当执行创建索引动作后,可以查询以下sql来监控索引创建的进度:
select L.sid ssid, l.SERIAL#, l.START_TIME, substr(OPNAME, 1, 15) opname, target, trunc((sofar / totalwork) * 100) pct, to_char(60 * sofar * 8192 / (24 * 60 * (last_update_time - start_time)) / 1024 / 1024 / 60, '9999.0') Rate, elapsed_seconds / 60 es, time_remaining / 60 tr, PROGRAM, MACHINE from gv$session_longops L, gV$SESSION S where time_remaining > 0 AND L.SID = S.SID;
创建索引默认优先使用 PGA,当 ALLOC GB 超过 PGA 大小时,将使用到临时表空间,并且速度会比较慢,所以需要监控临时表的使用情况:
-- 临时表空间 sort segment 使用情况select tablespace_name,current_users,total_blocks,used_blocks,free_blocks,added_extents,extent_hits,freed_extents,free_requests,max_blocks,max_used_blocks,max_sort_blocks from gv$sort_segment;-- 临时表空间的会话信息select username,session_num,sql_id,tablespace,contents,segtype,segfile#,segblk#,extents,blocks from gv$tempseg_usage;-- 临时表空间使用情况select df.tablespace_name "Tablespace", df.totalspace "Total(MB)", nvl(FS.UsedSpace, 0) "Used(MB)", (df.totalspace - nvl(FS.UsedSpace, 0)) "Free(MB)", round(100 * (1-( nvl(fs.UsedSpace, 0) / df.totalspace)), 2) "Pct. Free(%)"FROM (SELECT tablespace_name, round(SUM(bytes) / 1048576) TotalSpace FROM dba_TEMP_files GROUP BY tablespace_name) df, (SELECT tablespace_name, ROUND(SUM(bytes_used) / 1024 / 1024) UsedSpace FROM gV$temp_extent_pool GROUP BY tablespace_name) fs WHERE df.tablespace_name = fs.tablespace_name(+);
当然也可以提前使用 dbms_space.create_index_cost 来评估索引的大小:,但是准确程度取决于统计信息是否准确,仅供参考:
set serveroutput onDECLARE used_bytes NUMBER; alloc_bytes NUMBER;BEGIN dbms_space.create_index_cost('创建索引的语句', used_bytes, alloc_bytes); dbms_output.put_line('index used gb: ' || round(used_bytes/1024/1024/1024,2) || 'G; ' || 'index alloc gb: ' || round(alloc_bytes/1024/1024/1024,2) || 'G;');END;/
希望能帮到你~
其他答案6:
好的,感谢感谢,收藏了
边栏推荐
猜你喜欢
随机推荐
json_object_put: Assertion `jso->_ref_count > 0‘ failed.Aborted (core dumped)
.NET 开源框架在工业生产中的应用
关于模板函数声明与定义的问题[通俗易懂]
【Halcon视觉】极坐标变换
结构体操作报错:Segmentation fault (core dumped)
函数模板与同名的非模板函数不可以重载(重载的定义)
[C language] named type and anonymous type
PLC概述
异常的概念与处理
移动端双指缩放事件(原生),e.originalEvent.touches
Nacos custom service change subscription
Tradingview tutorial
[C language] LINQ overview
[leetcode每日一题2021/8/30]528. 按权重随机选择【中等】
码云,正式支持 Pages 功能,可以部署静态页面
The reason why go language is particularly slow to develop run and build commands
【Halcon视觉】数组
Interview questions and answers for the second company (2)
2022pta usual training questions (1-10 string processing questions)
algorithm