这不是“空帐”,Oracle的大表,小表与全表扫描简介 - 数据库应用 - 编程开发 - ...

来源:百度文库 编辑:神马文学网 时间:2024/04/25 08:28:12
通常对于小表,Oracle建议通过全表扫描进行数据访问,对于大表则应该通过索引以加快数据查询,当然如果查询要求返回表中大部分或者全部数据,那么全表扫描可能仍然是最好的选择。

  从V$SYSSTAT视图中,我们可以查询得到关于全表扫描的系统统计信息:

  SQL> col name for a30

  SQL> select name,value from v$sysstat

  2 where name in ("table scans (short tables)","table scans (long tables)");

  NAME VALUE

  ------------------------------ ----------

  table scans (short tables) 828

  table scans (long tables) 101

  其中table scans (short tables)指对于小表的全表扫描的此时;table scans (long tables)指对于大表的全表扫描的次数。

  从Statspack的报告中,我们也可以找到这部分信息:

  Instance Activity Stats for DB: CELLSTAR Instance: ora8i Snaps: 20 -

  谈情说案分集剧情Statistic Total per Second per Trans

  --------------------------------- ---------------- ------------ ------------

  。。。。。。

  table scan blocks gotten 38,228,349 37.0 26.9

  table scan rows gotten 546,452,583 528.9 383.8

  table scans (direct read) 5,784 0.0 0.0

  table scans (long tables) 5,990 0.0 0.0

  table scans (rowid ranges) 5,850 0.0 0.0

  table scans (short tables) 1,185,275 1.2 0.8

  通常,如果一个数据库的table scans (long tables)过多,那么db file scattered read等待事件可能同样非常显著,和以上数据来自同一个report的Top5等待事件就是如此:

  Top 5 Wait Events

  ~~~~~~~~~~~~~~~~~ Wait % Total

  Event Waits Time (cs) Wt Time

  -------------------------------------------- ------------ ------------ -------

  log file parallel write 1,436,993 1,102,188 10.80

  log buffer space 16,698 873,203 8.56

  log file sync 1,413,374 654,587 6.42

  control file parallel write 329,777 510,078 5.00

  db file scattered read 425,578 132,537 1.30

  数据库内部,很多信息和现象都是紧密相关的,只要我们加深对于数据库的了解,在优化和诊断数据库问题时就能够得心应手。

  Oracle通过一个内部参数_small_table_threshold来定义大表和小表的界限。缺省的该参数等于2%的Buffer数量,如果表的大小小于该参数定义,Oracle认为该表为小表,否则Oracle认为该表为大表。

  我们看一下Oracle9iR2中的情况:

  SQL> @@GetParDescrb.sql

  Enter value for par: small

  old 6: AND x.ksppinm LIKE "%&par%"

  new 6: AND x.ksppinm LIKE "%small%"

  NAME VALUE DESCRIB

  ------------------------------ -------------------- ------------------------------------------------------------

  _small_table_threshold 200 恶作剧之吻分集介绍 threshold level of table size for direct reads

  以上数据库中,200正好约为Buffer数量的2%:

  SQL> show parameter db_cache_size

  NAME TYPE VALUE

  ------------------------------------ ----------- ------------------------------

  db_cache_size big integer 83886080

  SQL> select (83886080/8192)*2/100 from dual;

  (83886080/8192)*2/100

  ---------------------

  204.8

  所以要区分大小表(Long/Short)是因为全表扫描可能引起Buffer Cache的抖动,缺省的大表的全表扫描会被置于LRU的末端,以期尽快老化,减少Buffer的占用。从Oracle8i开始,Oracle的多缓冲池管理技术(Default/Keep/Recycle池)给了我们另外一个选择,对于不同大小、不同使用频率的数据表,从建表之初就可以指定其存储Buffer,以使得内存使用更加有效。

 

本文地址:【伊甸网】http://www.edenw.com/tech/devdeloper/database/2010-07-15/4710.html
这不是“空帐”,Oracle的大表,小表与全表扫描简介 - 数据库应用 - 编程开发 - ... Oracle内存分配与调整讲解 - 数据库应用 - 编程开发 - 伊甸网 Oracle锁简单介绍 - 数据库应用 - 编程开发 - 伊甸网 Oracle数据库几种启动方式详解 - 数据库应用 - 编程开发 - 伊甸网 SQL Server在客户端调用DTS包简介 - 数据库应用 - 编程开发 - 伊甸网 ODAC 3.0-----Delphi/BCB 开发的Oracle 数据库应用的利器 全表扫描 SQL Server查询上传文件的方案描述 - 数据库应用 - 编程开发 - 伊甸网 MySQL内存使用的全局共享讲解 - 数据库应用 - 编程开发 - 伊甸网 MySQL内存使用的线程独享讲解 - 数据库应用 - 编程开发 - 伊甸网 SQL Server Express的卸载方法讲解 - 数据库应用 - 编程开发 - 伊甸... Oracle 数据库的备份与恢复 培训Java开发使用Oracle数据库的注意事项 数据库安全知识:关于 Oracle数据库的备份与恢复 oracle 表空间_Oracle技术教程_Oracle_数据库 移动Oracle数据库表空间文件。 - 塞外风 - 博客园 [ 永远的UNIX > ORACLE应用经验(5)-表空间 ] oracle数据库表空间文件收缩实例 - 47522341的专栏 - CSDN博客 oracle数据库表空间文件收缩实例 - 47522341的专栏 - CSDN博客 小投入实现大理想—开源数据库应用调查与分析 通过JDBC连接oracle数据库的十大技巧1 WEB编程开发常用的代码-ASP教程,ASP应用 小投入实现大理想—开源数据库应用调查与分析--网界网 cnw.cn 中国最好的网络专业网站 [精彩] oracle 数据库的维护