সূচকের বরাদ্দ এবং ব্যবহৃত আকারটি (যা আমি বিশ্বাস করি এটি আপনার বোঝার বিষয়ে বোঝার জন্য) আমি সম্ভবত ব্যবহার করব dbms_space
create or replace procedure tq84_index_size_proc
as
OBJECT_OWNER_in varchar2(30) := user;
OBJECT_NAME_in varchar2(30) := 'TQ84_SIZE_IX';
OBJECT_TYPE_in varchar2(30) := 'INDEX';
SAMPLE_CONTROL_in number := null;
SPACE_USED_out number;
SPACE_ALLOCATED_out number;
CHAIN_PCENT_out number;
SUM_SEGMENT number;
begin
dbms_space.object_space_usage (
OBJECT_OWNER => OBJECT_OWNER_in ,
OBJECT_NAME => OBJECT_NAME_in ,
OBJECT_TYPE => OBJECT_TYPE_in ,
SAMPLE_CONTROL => SAMPLE_CONTROL_in ,
SPACE_USED => SPACE_USED_out ,
SPACE_ALLOCATED => SPACE_ALLOCATED_out ,
CHAIN_PCENT => CHAIN_PCENT_out
);
select sum(bytes) into SUM_SEGMENT
from user_segments
where segment_name = OBJECT_NAME_in;
dbms_output.put_line('Space Used: ' || SPACE_USED_out);
dbms_output.put_line('Space Allocated: ' || SPACE_ALLOCATED_out);
dbms_output.put_line('Segment: ' || SUM_SEGMENT);
end;
/
এই পদ্ধতিটি * TQ84_SIZE_IX * নামের একটি সূচকের বরাদ্দ এবং ব্যবহৃত আকারের পরিমাপ করে। সম্পূর্ণতার জন্য, আমি রিপোর্ট অনুসারে বাইটগুলির গণনাও যুক্ত করেছি user_segments
।
এখন, এই পদ্ধতিটি কার্যত দেখা যায়:
create table tq84_size (
col_1 varchar2(40),
col_2 number
);
create index tq84_size_ix on tq84_size(col_1);
insert into tq84_size values ('*', 0);
commit;
exec tq84_index_size_proc;
সূচকে একটি প্রবেশের সাথে, নিম্নলিখিত পরিসংখ্যানগুলি ফিরে আসে:
Space Used: 1078
Space Allocated: 65536
Segment: 65536
সূচক পূরণ করা হচ্ছে ...
insert into tq84_size
select substr(object_name || object_type, 1, 40),
rownum
from dba_objects,
dba_types
where rownum < 500000;
commit;
... এবং আবার পরিসংখ্যান পেয়ে ...
exec tq84_index_size_proc;
... রিপোর্ট:
Space Used: 25579796
Space Allocated: 32505856
Segment: 32505856
তারপরে, যদি সূচকটি "খালি করা হয়":
delete from tq84_size;
commit;
exec tq84_index_size_proc;
এটা দেখায়:
Space Used: 4052714
Space Allocated: 32505856
Segment: 32505856
যা দেখায় যে ব্যবহৃত আকারটি বরাদ্দ করা আকারটি সঙ্কুচিত হয় না।