我想统计一下一段时间内,整个数据库读写总量是多少, 听说可用v$filestat视图,于是我在window下装oracle测试,操作如下:
1 建立表空间
create tablespace user_data datafile
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\data01.dbf' size 100m
extent management local autoallocate;
select tablespace_name,initial_extent,next_extent,
min_extents,max_extents,pct_increase from dba_tablespaces;
2 建用户
create user user1 identified by user1
default tablespace user_data;
grant select on v_$sysstat to user1;
grant create session, create table to user1;
alter user user1 quota unlimited on user_data;
3 建表
create table toms (str varchar2(64));
SQL> insert into toms values('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from toms;
STR
----------------------------------------------------------------
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
SQL> insert into toms select * from toms;
已创建 1 行。
SQL> /
已创建2行。
SQL> /
已创建4行。
SQL> /
已创建8行。
SQL> /
已创建16行。
SQL> /
已创建32行。
SQL> /
.......
SQL> /
已创建8192行。
SQL> commit;
提交完成。
SQL> select count(*) from toms;
COUNT(*)
----------
16384
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
4 开始测试:
select file#,name from v$datafile;
select phyrds,phyblkrd from v$filestat where file#=7
PHYRDS PHYBLKRD PHYWRTS PHYBLKWRT
---------- ---------- ---------- ----------
4 4 1 1
SQL> select count(*) from toms; //产生读操作
COUNT(*)
----------
16384
SQL> select phyrds,phyblkrd,PHYWRTS,PHYBLKWRT from v$filestat where file#=7;
PHYRDS PHYBLKRD PHYWRTS PHYBLKWRT
---------- ---------- ---------- ----------
82 690 1 1
结果发生变化, 似乎是对的。
可再次执行,结果却是一样的不变
SQL> select count(*) from toms; //产生读操作
COUNT(*)
----------
16384
SQL> select phyrds,phyblkrd,PHYWRTS,PHYBLKWRT from v$filestat where file#=7;
PHYRDS PHYBLKRD PHYWRTS PHYBLKWRT
---------- ---------- ---------- ----------
82 690 1 1
此数字和上次一样, 这里我就搞不明白了,写操作也是一样,数字再也不变了,那么我想请问一样,这个v$filestat是不是有什么开关之类,必须打开才能收集信息?或者有什么其它的设置?