一些乱乱的东西
有关INITRANS,链行,和数据缓冲区读取效率的问题
我的数据库使用的是Oracle 9i。我有以下几个问题:
1、INITRANS参数表示数据库块内运转的事务的并发级别。这个参数存储在哪里?什么时候,如何去设置或者改变这个参数呢?
2、我可以通过“select name, value from v$sysstat where‘表通过连续的行抽取’”来发现我的数据库是否存在链行;如果这个数字不是0,那么就存在链行。我不知道的是哪个表或者哪些表存在这个问题?假设我可以使用ANALYZE TABLE tablename LIST CHAINED ROWS;来发现这个问题。但是如果我有100个表,我可不想对100个表来一个接一个的运行这个命令。我怎么才能判断出我的链行在哪里呢?
3、数据缓冲区读取效率(RE)定义为高速缓冲区中数据读取成功的百分比。如果一共有N个读取,M是对磁盘的读取数量,那么N-M是缓冲区中信息的命中率。因此,RE=(N-M)/100%。我如何得到这些统计数字?有没有包含了这个信息的视图?我是否必须进行某种分析才能得到这些数字?
4、还有,对程序缓冲区效率也存在类似的问题。我怎么才能得到程序缓冲区的读取效率呢?
此问题提交于2004年11月10日
以下是对你的问题的回答:
1、ITRANS是表定义中的一个属性;你可以在USER_TABLES中找到它。
2、我不知道如果不使用ANALYZE TABLE...LIST CHAINED ROWS,如何寻找链行。你可以简单的编写一个脚本(使用SQL*Plus)来执行这个命令:
set pages 0 feedb off trimspool on
select 'analyze table '||table_name||' list chained rows;' from tabs
spool antab.sql
/
spool off
3、 对于读取效率,通常使用的公式是缓存命中率(Buffer Cache Hit Ratio):
(1 - PIO/LIO) * 100
where PIO = physical I/O and LIO = logical I/O.
然而,在性能优化中使用这个比率是不可信的。你可以通过观察系统中硬的部分与软的部分的比率来衡量(至少可以间接的)共享缓冲池的效率。查看v$sesstat可获得相关的统计信息。