一般來說,查表佔據了多少的物理空間用的是dba_segments這個資料字典,這個資料字典展示了segment_type(段型別,如table,index,function,procedure 等等的段型別),bytes(段大小),blocks(段占用了多少個資料塊)extents(分配了多少個區)等吧,資訊很詳細,可以直接select * from dba_segments;檢視,用具有檢視資料字典許可權的使用者檢視。(給使用者授予了select_catalog_role角色,普通使用者就具有了查詢資料字典的許可權。)一般不要給普通使用者dba角色,保持許可權最小化原則。
1. 檢視一般表的大小
select segment_name,segment_type,bytes/1024/1024 m from dba_segments where segment_name='settings$' and segment_type='table';
2. 檢視帶有lob欄位的表的大小
lob欄位是有額外的專門區域存放,檢視帶有lob欄位的表的大小比較複雜,分為了普通的字段大小,lob欄位大小,lob索引字段大小,三個部分。
select (select sum(s.bytes/1024/1024/1024)
-- the table segment size
from dba_segments s where s.owner = upper('表的owner') and (s.segment_name = upper('表名'))) + (select
sum(s.bytes/1024/1024/1024)
-- the lob segment size
from dba_segments s, dba_lobs l where s.owner = upper('表的owner') and (l.segment_name = s.segment_name and l.table_name = upper('表名') and l.owner =
upper('表的owner'))) + (select sum(s.bytes/1024/1024/1024)
-- the lob index size
from dba_segments s, dba_indexes i where s.owner = upper('表的owner') and
(i. index_name = s.segment_name and i.table_name = upper('表名') and index_type= 'lob' and i.owner = upper('表的owner'))) "total table size" from dual;
詳細介紹內容可以檢視doc id 118531.1
如果想檢視這個庫里有多少個帶有lob欄位的表呢?通過dba_lobs可以檢視。
例如:select distinct owner,table_name from dba_lobs where owner in ('***',』***』);
如果搜出幾百個幾千個lob欄位的表,乙個個查大小,會很久…………
怎麼把帶有lob欄位的表一次性列出來呢?
先建立乙個臨時表:
sql> create table candidates (owner varchar2(30),segment_name varchar2(81));
再把上面查出來的帶有lob欄位的表插入進臨時表裡:
sql> insert into candidates values ('owner','table_name');
然後利用游標:
sql> set serveroutput on
sql> declare
cursor cur_temp is select owner, segment_name from candidates;
v_owner varchar2(30);
v_segment_name varchar2(81);
v_total_table_size number;
begin
open cur_temp;
fetch cur_temp into v_owner,v_segment_name;
while cur_temp%found
loop
select
select
nvl(sum(s.bytes/1024/1024/1024),0)
from
dba_segments s
where
s.owner = upper(v_owner) and
(s.segment_name = upper(v_segment_name)))
(select
nvl(sum(s.bytes/1024/1024/1024),0)
from
dba_segments s,
dba_lobs l
where
s.owner = upper(v_owner) and
(l.segment_name = s.segment_name and l.table_name = upper(v_segment_name) and
l.owner = upper(v_owner))
(select
nvl(sum(s.bytes/1024/1024/1024),0)
from
dba_segments s,
dba_indexes i
where
s.owner = upper(v_owner) and
(i.index_name = s.segment_name and i.table_name = upper(v_segment_name) and index_type= 'lob' and i.owner = upper(v_owner))
) "total table size" into v_total_table_size
from
dual;
dbms_output.put_line('table '||v_segment_name||': '||v_total_table_size);
fetch cur_temp into v_owner,v_segment_name;
end loop;
end;
就會把帶有lob欄位的表大小都列出來了。
一般查大小就只查dba_segments了,查lob的時候好像不多。偶爾查一下就用步驟2的方法就行,也是官方提供的。
mysql有多大記憶體?能存多少資料?
mysql mysql 3.22 限制的表大小為4gb。myisam 儲存引擎 最大表尺寸增加到了65536tb 2567 1位元組 由於允許的表尺寸更大,mysql資料庫的最大有效表尺寸通常是由作業系統對檔案大小的限制決定的,而不是由mysql內部限制決定的。innodb 儲存引擎 innodb ...
大資料有多大?
本文計算人類產生資料的能力。那麼,大資料到底有多大?是不是像某些人想的那樣,可以趨近於無限大呢?在某些時候,我也會這麼想,可是不能把科幻寫成吹牛皮,明明4k的畫質就已經很清晰了,偏偏科幻出乙個4000k的畫質,這沒有意義。下文中,我們就具體計算一下,人類到底能夠產生多大的資料。計算過程 80億人 8...
這個產品能支援多大資料量?
經常有使用者會問這個問題,你家的產品能處理多大資料量?似乎是這個值越大產品就越牛。這個問題,其實沒多大意義。能處理多大的資料量,還有個很關鍵的因素是期望的響應時間,在脫離這個因素單純談大資料產品的資料處理量,就不知道怎麼回答了。考慮只有單台機器的簡單情況。如果是希望秒級響應的olap式彙總,那麼gb...