আমি কীভাবে ওরাকলে টেবিলগুলির আকার গণনা করব


128

এমএসএসকিউএল-এর অভ্যন্তরে (এবং সম্ভাব্যভাবে নষ্ট হয়ে) অভ্যস্ত হয়ে উঠছি, আমি ভাবছি যে কীভাবে আমি ওরাকল 10 জি-তে টেবিল আকার পেতে পারি। আমি এটি গুগল করেছি তাই এখন আমি সচেতন হয়েছি যে আমার কাছে এসপি_স্পেসেসের মতো সহজ বিকল্প নেই not তবুও আমার কাছে পাওয়া সম্ভাব্য উত্তরগুলি বেশিরভাগ সময় পুরানো বা কাজ করে না। সম্ভবত কারণ আমি যে স্কিমা নিয়ে কাজ করছি তাতে কোনও ডিবিএ নেই।

কারও কাছে কি সমাধান এবং সুপারিশ থাকবে?


যদি কোনও প্রোকিউর দেওয়া উত্তর নষ্ট হয়ে যায় তবে আপনি যে উত্তরগুলি পেয়েছেন সেগুলি এখান থেকে এনে একটি পদ্ধতিতে জড়িয়ে রাখুন এবং কল করুন ... ডুন ডুন দুহ ... এসপি_স্পেসযুক্ত used এটিতে খুব সামান্য জাদু আছে।

1
@ মার্কব্রেডি সম্ভবত যাদু নয়, তবে এক টন আরকেন জ্ঞান প্রয়োজন।
jpmc26

উত্তর:


201

আপনি এই প্রশ্নে আগ্রহী হতে পারে। এটি আপনাকে জানায় যে প্রতিটি টেবিলের জন্য সূচীগুলি এবং টেবিলে থাকা কোনও এলওবিগুলিকে গ্রহণ করে কত টেবিলের জন্য বরাদ্দ রয়েছে। প্রায়শই আপনি কেবলমাত্র টেবিলের চেয়ে "ক্রয় অর্ডার টেবিল যে কোনও সূচী সহ" কতগুলি জায়গা নেন তা জানতে আগ্রহী হন। আপনি সর্বদা বিশদ অনুসন্ধান করতে পারেন। নোট করুন যে এর জন্য ডিবিএ_ * ভিউগুলিতে অ্যাক্সেস দরকার।

COLUMN TABLE_NAME FORMAT A32
COLUMN OBJECT_NAME FORMAT A32
COLUMN OWNER FORMAT A10

SELECT
   owner, 
   table_name, 
   TRUNC(sum(bytes)/1024/1024) Meg,
   ROUND( ratio_to_report( sum(bytes) ) over () * 100) Percent
FROM
(SELECT segment_name table_name, owner, bytes
 FROM dba_segments
 WHERE segment_type IN ('TABLE', 'TABLE PARTITION', 'TABLE SUBPARTITION')
 UNION ALL
 SELECT i.table_name, i.owner, s.bytes
 FROM dba_indexes i, dba_segments s
 WHERE s.segment_name = i.index_name
 AND   s.owner = i.owner
 AND   s.segment_type IN ('INDEX', 'INDEX PARTITION', 'INDEX SUBPARTITION')
 UNION ALL
 SELECT l.table_name, l.owner, s.bytes
 FROM dba_lobs l, dba_segments s
 WHERE s.segment_name = l.segment_name
 AND   s.owner = l.owner
 AND   s.segment_type IN ('LOBSEGMENT', 'LOB PARTITION')
 UNION ALL
 SELECT l.table_name, l.owner, s.bytes
 FROM dba_lobs l, dba_segments s
 WHERE s.segment_name = l.index_name
 AND   s.owner = l.owner
 AND   s.segment_type = 'LOBINDEX')
WHERE owner in UPPER('&owner')
GROUP BY table_name, owner
HAVING SUM(bytes)/1024/1024 > 10  /* Ignore really small tables */
ORDER BY SUM(bytes) desc
;

1
মনে রাখবেন যে এই উত্তরটি সেগমেন্টগুলি গণনা করে, যা বর্তমানে ব্যবহৃত ব্যবহৃত বনাম স্থানের মধ্যে পার্থক্য করে না previously স্পষ্টতই, একবার কোনও বিভাগকে কোনও টেবিলের জন্য বরাদ্দ করা হলে, স্থানটি খালি করা হলেও সর্বদা এটি একটি টেবিলে বরাদ্দ করা হয়। এখানে দেখুন । আমার ধারণা আপনি আসলে কতটা জায়গা ব্যবহার করছেন তা দেখতে আপনাকে সীমার স্তরে যেতে হবে ?
jpmc26

43
-- Tables + Size MB
select owner, table_name, round((num_rows*avg_row_len)/(1024*1024)) MB 
from all_tables 
where owner not like 'SYS%'  -- Exclude system tables.
and num_rows > 0  -- Ignore empty Tables.
order by MB desc -- Biggest first.
;


--Tables + Rows
select owner, table_name, num_rows
 from all_tables 
where owner not like 'SYS%'  -- Exclude system tables.
and num_rows > 0  -- Ignore empty Tables.
order by num_rows desc -- Biggest first.
;

দ্রষ্টব্য: এগুলি প্রাক্কলনের পরিসংখ্যানগুলির সাথে আরও নির্ভুলভাবে তৈরি করা অনুমান:

exec dbms_utility.analyze_schema(user,'COMPUTE');

2
এই পরিসংখ্যানগুলি null( num_rows, avg_row_len) হতে পারে , আপনাকে নিম্নলিখিত বিবৃতিটির আগে কিছু বিশ্লেষণ করতে হবেANALYZE TABLE your_table COMPUTE STATISTICS
ব্রাইস

এগুলি বিশ্লেষণ করা খুব দীর্ঘ হতে পারে!
Brice

যখন আমি কোনও
টেবিলস্পেসের

30

প্রথমত, আমি সাধারণত সাবধান করে দেব যে স্থান বিশ্লেষণ করার জন্য সারণীর পরিসংখ্যান সংগ্রহ করা একটি সম্ভাব্য বিপজ্জনক জিনিস। পরিসংখ্যান সংগ্রহের ফলে ক্যোয়ারী পরিকল্পনাগুলি পরিবর্তন হতে পারে, বিশেষত যদি ডিবিএ একটি পরিসংখ্যান সংগ্রহের কাজটি কনফিগার করেছে যা আপনার কল ব্যবহার করছে না এমন ডিফল্ট প্যারামিটার ব্যবহার করে এবং ওরাকলকে সেই প্রশ্নের সারণীটি পুনরায় বিভাজক করবে যা প্রশ্নে টেবিলটি কার্যকর করতে পারে আঘাত। যদি ডিবিএ ইচ্ছাকৃতভাবে পরিসংখ্যান ব্যতীত কিছু টেবিল ছেড়ে যায় (যদি আপনার পছন্দ OPTIMIZER_MODEহয় তবে সাধারণ ), পরিসংখ্যান সংগ্রহ করার ফলে ওরাকল নিয়ম-ভিত্তিক অপটিমাইজার ব্যবহার বন্ধ করে দিতে পারে এবং কোয়েরিগুলির সেটগুলির জন্য ব্যয়ভিত্তিক অপ্টিমাইজার ব্যবহার শুরু করতে পারে যা একটি বড় পারফরম্যান্স হতে পারে performance মাথাব্যথা যদি এটি উত্পাদনে অপ্রত্যাশিতভাবে করা হয়। যদি আপনার পরিসংখ্যান নির্ভুল হয় তবে আপনি জিজ্ঞাসা করতে পারেন USER_TABLES( ALL_TABLESবাDBA_TABLES) সরাসরি কল না করে GATHER_TABLE_STATS। যদি আপনার পরিসংখ্যান সঠিক না হয় তবে সম্ভবত এটির জন্য একটি কারণ রয়েছে এবং আপনি স্থিতিটি বিশৃঙ্খলা করতে চান না।

দ্বিতীয়ত, এসকিউএল সার্ভার sp_spaceusedপদ্ধতির সবচেয়ে কাছের সমতুল্য সম্ভবত ওরাকেলের DBMS_SPACEপ্যাকেজ। টম কিয়েটের একটি দুর্দান্ত show_spaceপদ্ধতি রয়েছে যা এই প্যাকেজটির জন্য একটি সহজ ইন্টারফেস সরবরাহ করে এবং কী sp_spaceusedপ্রিন্ট করে তার মতো তথ্য মুদ্রণ করে।


8

প্রথমে টেবিলে অপটিমাইজারের পরিসংখ্যান সংগ্রহ করুন (যদি আপনি ইতিমধ্যে না থাকেন):

begin
   dbms_stats.gather_table_stats('MYSCHEMA','MYTABLE');
end;
/

সতর্কতা: জাস্টিন তার উত্তরে যেমন বলেছেন, অপ্টিমাইজারের পরিসংখ্যান সংগ্রহ করা ক্যোয়ারী অপ্টিমাইজেশানকে প্রভাবিত করে এবং যথাযথ যত্ন এবং বিবেচনা ব্যতীত করা উচিত নয় !

তারপরে উত্পন্ন পরিসংখ্যানগুলি থেকে টেবিলের দ্বারা দখল করা ব্লকের সংখ্যাটি সন্ধান করুন:

select blocks, empty_blocks, num_freelist_blocks
from   all_tables
where  owner = 'MYSCHEMA'
and    table_name = 'MYTABLE';
  • সারণীতে বরাদ্দকৃত মোট সংখ্যা ব্লকগুলি + খালি_ব্লকগুলি + নাম_ফ্রিলিস্ট_ব্লকস।

  • ব্লকগুলি হ'ল ব্লকের সংখ্যা যা আসলে ডেটা থাকে।

স্থানটি গ্রাস করতে ব্লকের সংখ্যাটি ব্যবহারের ক্ষেত্রে (সাধারণত 8 কেবি) দিয়ে গুণ করুন - যেমন 17 ব্লক এক্স 8 কেবি = 136 কেবি।

স্কিমাতে সমস্ত টেবিলের জন্য একবারে এটি করতে:

begin
    dbms_stats.gather_schema_stats ('MYSCHEMA');
end;
/

select table_name, blocks, empty_blocks, num_freelist_blocks
from   user_tables;

দ্রষ্টব্য: এই অ্যাসটম থ্রেডটি পড়ার পরে উপরের পরিবর্তনগুলি


7

আমি আরও বিশদ তথ্য সরবরাহ করতে ডাব্লুডাব্লু এর ক্যোয়ারী পরিবর্তন করেছি:

SELECT * FROM (
  SELECT
    owner, object_name, object_type, table_name, ROUND(bytes)/1024/1024 AS meg,
    tablespace_name, extents, initial_extent,
    ROUND(Sum(bytes/1024/1024) OVER (PARTITION BY table_name)) AS total_table_meg
  FROM (
    -- Tables
    SELECT owner, segment_name AS object_name, 'TABLE' AS object_type,
          segment_name AS table_name, bytes,
          tablespace_name, extents, initial_extent
    FROM   dba_segments
    WHERE  segment_type IN ('TABLE', 'TABLE PARTITION', 'TABLE SUBPARTITION')
    UNION ALL
    -- Indexes
    SELECT i.owner, i.index_name AS object_name, 'INDEX' AS object_type,
          i.table_name, s.bytes,
          s.tablespace_name, s.extents, s.initial_extent
    FROM   dba_indexes i, dba_segments s
    WHERE  s.segment_name = i.index_name
    AND    s.owner = i.owner
    AND    s.segment_type IN ('INDEX', 'INDEX PARTITION', 'INDEX SUBPARTITION')
    -- LOB Segments
    UNION ALL
    SELECT l.owner, l.column_name AS object_name, 'LOB_COLUMN' AS object_type,
          l.table_name, s.bytes,
          s.tablespace_name, s.extents, s.initial_extent
    FROM   dba_lobs l, dba_segments s
    WHERE  s.segment_name = l.segment_name
    AND    s.owner = l.owner
    AND    s.segment_type = 'LOBSEGMENT'
    -- LOB Indexes
    UNION ALL
    SELECT l.owner, l.column_name AS object_name, 'LOB_INDEX' AS object_type,
          l.table_name, s.bytes,
          s.tablespace_name, s.extents, s.initial_extent
    FROM   dba_lobs l, dba_segments s
    WHERE  s.segment_name = l.index_name
    AND    s.owner = l.owner
    AND    s.segment_type = 'LOBINDEX'
  )
  WHERE owner = UPPER('&owner')
)
WHERE total_table_meg > 10
ORDER BY total_table_meg DESC, meg DESC
/

6

উপবিভাজনযুক্ত টেবিল এবং সূচিগুলির জন্য আমরা নিম্নলিখিত কোয়েরিটি ব্যবহার করতে পারি



    SELECT owner, table_name, ROUND(sum(bytes)/1024/1024/1024, 2) GB
    FROM
    (SELECT segment_name table_name, owner, bytes
     FROM dba_segments
     WHERE segment_type IN ('TABLE', 'TABLE PARTITION', 'TABLE SUBPARTITION')
     UNION ALL
     SELECT i.table_name, i.owner, s.bytes
     FROM dba_indexes i, dba_segments s
     WHERE s.segment_name = i.index_name
     AND   s.owner = i.owner
     AND   s.segment_type IN ('INDEX', 'INDEX PARTITION', 'INDEX SUBPARTITION')
     UNION ALL
     SELECT l.table_name, l.owner, s.bytes
     FROM dba_lobs l, dba_segments s
     WHERE s.segment_name = l.segment_name
     AND   s.owner = l.owner
     AND   s.segment_type = 'LOBSEGMENT'
     UNION ALL
     SELECT l.table_name, l.owner, s.bytes
     FROM dba_lobs l, dba_segments s
     WHERE s.segment_name = l.index_name
     AND   s.owner = l.owner
     AND   s.segment_type = 'LOBINDEX')
    WHERE owner in UPPER('&owner')
    GROUP BY table_name, owner
    HAVING SUM(bytes)/1024/1024 > 10  /* Ignore really small tables */
    ORDER BY SUM(bytes) DESC
    ;

5

আইআইআরসি আপনার যে সারণীগুলির প্রয়োজন তা হ'ল ডিবিএ_টিএবিএলএস, ডিবিএ_একএসটিএনটিএস বা ডিবিএ_এসইজিএমএনটিএস এবং ডিবিএ_ডাটা_ফাইলেস। টেবিলগুলির জন্য এগুলির USER_ এবং ALL_ সংস্করণগুলিও রয়েছে আপনি দেখতে পাচ্ছেন যে আপনার মেশিনে প্রশাসনের অনুমতি নেই কিনা।


4

ডাব্লুডাব্লুএস এর উত্তরের একটি বৈকল্পিকতা রয়েছে, এতে উপরের অন্যরা যেমন পরামর্শ দিয়েছে সেভাবে পার্টিশন এবং উপ-পার্টিশন রয়েছে, পাশাপাশি টিওয়াইপিই প্রদর্শন করার জন্য একটি কলাম: সারণী / সূচক / এলওবি ইত্যাদি includes

SELECT
   owner, "Type", table_name "Name", TRUNC(sum(bytes)/1024/1024) Meg
FROM
(  SELECT segment_name table_name, owner, bytes, 'Table' as "Type"
   FROM dba_segments
   WHERE segment_type in  ('TABLE','TABLE PARTITION','TABLE SUBPARTITION')
 UNION ALL
   SELECT i.table_name, i.owner, s.bytes, 'Index' as "Type"
   FROM dba_indexes i, dba_segments s
   WHERE s.segment_name = i.index_name
   AND   s.owner = i.owner
   AND   s.segment_type in ('INDEX','INDEX PARTITION','INDEX SUBPARTITION')
 UNION ALL
   SELECT l.table_name, l.owner, s.bytes, 'LOB' as "Type"
   FROM dba_lobs l, dba_segments s
   WHERE s.segment_name = l.segment_name
   AND   s.owner = l.owner
   AND   s.segment_type IN ('LOBSEGMENT','LOB PARTITION','LOB SUBPARTITION')
 UNION ALL
   SELECT l.table_name, l.owner, s.bytes, 'LOB Index' as "Type"
   FROM dba_lobs l, dba_segments s
   WHERE s.segment_name = l.index_name
   AND   s.owner = l.owner
   AND   s.segment_type = 'LOBINDEX')
   WHERE owner in UPPER('&owner')
GROUP BY table_name, owner, "Type"
HAVING SUM(bytes)/1024/1024 > 10  /* Ignore really small tables */
ORDER BY SUM(bytes) desc;

3
select segment_name,segment_type,bytes/1024/1024 MB
from dba_segments
where segment_name='TABLENAME' and owner ='OWNERNAME' order by mb desc;

2

আমি টেবিলস্পেসে স্কিমা আকার পেতে ক্যোয়ারীটি পরিবর্তন করেছি ..

SELECT owner,
     tablespace_name,
     TRUNC (SUM (bytes) / 1024 / 1024)   Meg,
     ROUND (ratio_to_report (SUM (bytes)) OVER () * 100) Percent
FROM (SELECT tablespace_name, owner, bytes
        FROM dba_segments
       WHERE segment_type IN
                 ('TABLE', 'TABLE PARTITION', 'TABLE SUBPARTITION')
      UNION ALL
      SELECT i.tablespace_name, i.owner, s.bytes
        FROM dba_indexes i, dba_segments s
       WHERE     s.segment_name = i.index_name
             AND s.owner = i.owner
             AND s.segment_type IN
                     ('INDEX', 'INDEX PARTITION', 'INDEX SUBPARTITION')
      UNION ALL
      SELECT l.tablespace_name, l.owner, s.bytes
        FROM dba_lobs l, dba_segments s
       WHERE     s.segment_name = l.segment_name
             AND s.owner = l.owner
             AND s.segment_type IN ('LOBSEGMENT', 'LOB PARTITION')
      UNION ALL
      SELECT l.tablespace_name, l.owner, s.bytes
        FROM dba_lobs l, dba_segments s
       WHERE     s.segment_name = l.index_name
             AND s.owner = l.owner
             AND s.segment_type = 'LOBINDEX')
WHERE owner IN UPPER ('&owner')
GROUP BY owner, tablespace_name
--HAVING SUM(bytes)/1024/1024 > 10  /* Ignore really small tables */
ORDER BY tablespace_name -- desc
;

1

"টেবিলের আকার" দ্বারা আপনি কী বোঝাতে চান তা নির্ভর করে। একটি টেবিল ফাইল সিস্টেমের একটি নির্দিষ্ট ফাইলের সাথে সম্পর্কিত নয়। একটি টেবিলটি একটি টেবিল স্পেসে অবস্থান করবে (সম্ভবত এটি বিভাজনযুক্ত একাধিক টেবিল স্পেস, এবং সম্ভবত আপনি যদি টেবিলের অ্যাকাউন্ট সূচকগুলিতেও নিতে চান তবে একাধিক টেবিল স্পেস)। একটি টেবিল স্পেসে প্রায়শই এটিতে একাধিক টেবিল থাকে এবং এটি একাধিক ফাইলের মধ্যে ছড়িয়ে থাকতে পারে।

আপনি যদি টেবিলের ভবিষ্যতের বৃদ্ধির জন্য আপনার কতটুকু স্থান প্রয়োজন তা অনুমান করে থাকেন, তবে টেবিলের সারিগুলির সংখ্যার (বা আপনি সারণীতে প্রত্যাশিত সারিগুলির সংখ্যা) দিয়ে গড় গুণমান औसत গাইড হবে _ তবে ওরাকল প্রতিটি ব্লকে কিছুটা জায়গা ফাঁকা রাখবে, আংশিকভাবে সারিগুলি আপডেট হওয়ার পরে 'বাড়তে' দেবে, আংশিক কারণ block ব্লকের আরও একটি সম্পূর্ণ সারি ফিট করা সম্ভব না (যেমন 8 কে ব্লকটি কেবল 2 সারি ফিট করে) 3 কে, যদিও এটি একটি চূড়ান্ত উদাহরণ হিসাবে 3K বেশিরভাগ সারি আকারের তুলনায় অনেক বড়)। সুতরাং ব্লকগুলি (USER_TABLES এ) একটি আরও ভাল গাইড হতে পারে।

তবে যদি আপনার কোনও টেবিলে 200,000 সারি থাকে, এর অর্ধেক মুছে ফেলা হয়, তবে টেবিলটি এখনও একই সংখ্যক ব্লকের মালিকানা পাবে। অন্যান্য টেবিলগুলি ব্যবহার করার জন্য এটি সেগুলি ছেড়ে দেয় না। এছাড়াও, ব্লকগুলি পৃথকভাবে কোনও টেবিলের সাথে যুক্ত করা হয় না, তবে গ্রুপগুলিতে একটি 'ব্যাপ্তি' বলা হয়। সুতরাং সাধারণত একটি টেবিলে EMPTY_BLOCKS (USER_TABLES এও) থাকবে।


1

বিভাজনযুক্ত টেবিলগুলির জন্য সংশোধন:

SELECT owner, table_name, ROUND(sum(bytes)/1024/1024/1024, 2) GB
FROM
(SELECT segment_name table_name, owner, bytes
 FROM dba_segments
 WHERE segment_type IN ('TABLE', 'TABLE PARTITION', 'TABLE SUBPARTITION')
 UNION ALL
 SELECT i.table_name, i.owner, s.bytes
 FROM dba_indexes i, dba_segments s
 WHERE s.segment_name = i.index_name
 AND   s.owner = i.owner
 AND   s.segment_type IN ('INDEX', 'INDEX PARTITION', 'INDEX SUBPARTITION')
 UNION ALL
 SELECT l.table_name, l.owner, s.bytes
 FROM dba_lobs l, dba_segments s
 WHERE s.segment_name = l.segment_name
 and   s.owner = l.owner
 AND   s.segment_type in ('LOBSEGMENT', 'LOB PARTITION', 'LOB SUBPARTITION')
 UNION ALL
 SELECT l.table_name, l.owner, s.bytes
 FROM dba_lobs l, dba_segments s
 WHERE s.segment_name = l.index_name
 AND   s.owner = l.owner
 AND   s.segment_type = 'LOBINDEX')
WHERE owner in UPPER('&owner')
GROUP BY table_name, owner
HAVING SUM(bytes)/1024/1024 > 10  /* Ignore really small tables */
order by sum(bytes) desc
;

0

সরল নির্বাচন যা ব্লকের আকারের উপর ভিত্তি করে টেবিলগুলির কাঁচা আকারগুলি দেয়, এছাড়াও সূচী সহ আকারও অন্তর্ভুক্ত করে

টেবিল_নাম, (ডিবিএ ইন্ডেক্সেস এ, এনবিএল ((যোগফলগুলি (ব্লকগুলি নির্বাচন করুন) এ, ডিবিএ_ বিভাগগুলি বি যেখানে a.index_name = বি.সেটমেন্ট_নাম এবং a.table_name = dba_tables.table_name), 0) + ব্লকগুলি নির্বাচন করুন) * 8192/1024 টোটাল সাইজ, ব্লকস * 8 3 দ্বারা dba_tables অর্ডার থেকে টেবিল সাইজ


0

আমি এটি কিছুটা নির্ভুল বলে মনে করেছি:

SELECT
   owner, table_name, TRUNC(sum(bytes)/1024/1024/1024) GB
FROM
(SELECT segment_name table_name, owner, bytes
FROM dba_segments
WHERE segment_type in  ('TABLE','TABLE PARTITION')
UNION ALL
SELECT i.table_name, i.owner, s.bytes
FROM dba_indexes i, dba_segments s
WHERE s.segment_name = i.index_name
AND   s.owner = i.owner
AND   s.segment_type in ('INDEX','INDEX PARTITION')
UNION ALL
SELECT l.table_name, l.owner, s.bytes
FROM dba_lobs l, dba_segments s
WHERE s.segment_name = l.segment_name
AND   s.owner = l.owner
AND   s.segment_type IN ('LOBSEGMENT','LOB PARTITION')
UNION ALL
SELECT l.table_name, l.owner, s.bytes
FROM dba_lobs l, dba_segments s
WHERE s.segment_name = l.index_name
AND   s.owner = l.owner
AND   s.segment_type = 'LOBINDEX')
---WHERE owner in UPPER('&owner')
GROUP BY table_name, owner
HAVING SUM(bytes)/1024/1024 > 10  /* Ignore really small tables */
ORDER BY SUM(bytes) desc

7
আমার উত্তর কিছুটা মনে হচ্ছে?
ডাব্লুডাব্লু

0
select segment_name as tablename, sum(bytes/ (1024 * 1024 * 1024)) as tablesize_in_GB
From dba_segments /* if looking at tables not owned by you else use user_segments */
where segment_name = 'TABLE_WHOSE_SIZE_I_WANT_TO_KNOW'
and   OWNER = 'WHO OWNS THAT TABLE' /* if user_segments is used delete this line */ 
group by segment_name ;

-2

সেখানে আরও একটি বিকল্প রয়েছে যা যোগদানের সাথে "নির্বাচন করুন" আকার এবং বিকল্প হিসাবে সারণির আকার পেতে দেয়

-- 1
EXPLAIN PLAN
   FOR
      SELECT
            Scheme.Table_name.table_column1 AS "column1",
            Scheme.Table_name.table_column2 AS "column2",
            Scheme.Table_name.table_column3 AS "column3",
            FROM Scheme.Table_name
       WHERE ;

SELECT * FROM TABLE (DBMS_XPLAN.display);

-3

আমার সর্বশেষের মতো একই বৈকল্পিক রয়েছে যা টেবিলের ডেটা, টেবিল সূচী এবং ব্লব-ফিল্ডগুলির বিভাগগুলি গণনা করে:

CREATE OR REPLACE FUNCTION
  SYS.RAZMER_TABLICY_RAW(pNazvanie in varchar, pOwner in varchar2)
return number
is
  val number(16);
  sz number(16);
begin
  sz := 0;

  --Calculate size of table data segments
  select
    sum(t.bytes) into val
  from
    sys.dba_segments t
  where
    t.segment_name = upper(pNazvanie)
  and
    t.owner = upper(pOwner);
  sz := sz + nvl(val,0);

  --Calculate size of table indexes segments
  select
    sum(s.bytes) into val
  from
    all_indexes t
  inner join
    dba_segments s
  on
    t.index_name = s.segment_name
  where
    t.table_name = upper(pNazvanie)
  and
    t.owner = upper(pOwner);
  sz := sz + nvl(val,0);

  --Calculate size of table blob segments
  select
    sum(s.bytes) into val
  from
    all_lobs t
  inner join
    dba_segments s on t.segment_name = s.segment_name
  where
    t.table_name = upper(pNazvanie)
  and
    t.owner = upper(pOwner);
  sz := sz + nvl(val,0);

  return sz;

end razmer_tablicy_raw;

উত্স

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.