尽管Oracle系统本身已经提供了若干种对系统性能进行调节的技术,但是,假如数据库设计本身就有问题特别是在结构上设计得尤其糟糕,那你纵有天大的本事又能奈何?因此,Oracle数据库的设计者完全有必要弄清楚(从项目着手设计开始)该如何创建稳固的Oracle数据结构,在保证可维护性和可扩展性的同时以最快的速度从数据库中获取信息。

  让我们把笼罩在数据库技术外围的复杂理论和存心不让人明白的技术行话扔一边去,其实,说白了你就只需要记住一点,这也是牵扯到数据库性能的最重要最简单因素:磁盘I/O。磁盘I/O正是系统消耗最大的的Oracle数据库操作。Oracle设计专家在设计数据体系结构的时候务必记得:在获取所需要的信息时一定要想尽办法把磁盘访问量降到最低!

  本文提出了一些Oracle数据库数据体系结构设计方面的技巧,有了它们,在创造出易于维护和扩展的设计方案同时还能让数据库保持在最优化的性能水准之上。

  结构设计技巧

  Oracle产品中有好些可以降低SQL查询磁盘I/O量的工具。下面就是一些能极大改进Oracle 系统性能的结构设计问题。

  采用多种大小尺度的数据块

  你完全可以故意地把不同的表和索引结构映射到具有不同大小的表空间。这种分配方案的设计依据是表内数据行的平均长度以及整个数据库内的数据访问模式。Oracle9i给你提供了以下几种选择:2K、4K、16K甚至32K的表空间大小。这一招的实质是让表和索引仅需一次磁盘I/O就可以获取所有关联数据行的信息。

  预先计算复杂的SQL查询

  Oracle提供了具体化的视图和VARRAY表,通过它们就可以预建复杂的查询并汇集到单行表内,这样即时获取信息可就快多了。即时汇集是一种优异的Oracle设计。

  采用内存数据缓冲

  你应该知道Oracle9i允许开辟很大的内存区域以便缓冲常用索引行的信息。常用索引信息的缓冲应该是一个主要的专业设计目标,因为内存访问的速度可是磁盘访问速度的至少1万倍。Oracle数据块缓冲区越大,SQL查询的执行速度就越快。内存数据缓冲区的大小对Oracle的性能具有直接的影响,如果数据缓冲区缓冲了全部数据系统就可以达到最快的运行速度。

  购买更快的处理器

  Oracle数据库服务器的CPU速度对数据库性能有直接影响。高性能64位CPU的运行速度通常比32位处理器快10次。目前几乎所有的主要平台都可以采用64位处理器了,其中包括:

  •   Windows―Intel安腾处理器
  •   HP―PA-8000处理器
  •   Solaris―500-MHz Ultrasparc-iie处理器
  •   IBM AIX―RS/6000 PowerPC处理器

  采用64位版本的Oracle

  强烈建议你在装备64位CPU体系结构的专门服务器平台上安装和运行64位的Oracle数据库系统。Oracle的64位版本可以创建大规模的SGA区域以及通常需要超过20GB内存数据缓冲区的大规模项目。32位Oracle数据库的一个严重缺陷就是SGA最大只能开辟1.7GB。

  对索引使用大数据块使磁盘I/O减到最小

  Oracle索引访问在Oracle数据库大小为16K和32K的情况下性能表现最好。你应该查询相应的应用程序和操作系统文档,为你的计算环境创建最大的索引表空间。

  使用Oracle并行查询

  所有的数据访问都应该经过调整避免大规模表扫描或者全表扫描,但在很多情况下都会有这样的查询要求,怎么办呢?你不妨保证所有的全表扫描都充分利用了Oracle并行查询机制以提高查询性能。

  选择适当的SQL优化

  优化器模式的选择对Oracle SQL性能具有关键的影响。对Oracle9i而言,所有查询中大约有一半左右在基于规则的优化条件下会运行得更快一些;另外一半则在基于开销的优化条件运行得最快。

  包固定

  所有经常被引用的PL/SQL包都应该使用dbms_shared_pool.keep过程固定到共享池。这样做将极大地加快Oracle PL/SQL的执行速度。

  在存储过程内设计所有的数据访问

  最重要的设计问题之一把所有的数据库访问代码都放到PL/SQL存储过程中。

  存储过程设计技巧

  Oracle设计目标之一是尽可能地把所有Oracle处理代码都封装进存储过程。这样做可以获得相当大的益处,主要同性能和可维护性有关。你应该把自己的工作焦点置于这一目标之上。

  数据同行为耦合

  许多数据库管理员采用Oracle8的成员方法实现存储过程与数据库对象的紧密耦合。其它人则习惯于采用命名规范。例如,假设所有同customer表有关的行为都冠以该表的名字作为前缀(customer.hire、customer.give_raise等),那么你就可以查询数据字典列出某表关联的所有行为(select * from dba_objects where owner = 'CUSTOMER')而你能很容易地辨别和重用代码。

  代码隔离

  因为所有的SQL都从外部程序移入了存储过程,所以应用程序也就不外乎只涉及到对存储过程的调用。正因如此,内外交换某一个数据库就很简单了。

  更快的SGA存取

  存储过程和触发器函数的运行速度为什么快于传统数据库操作代码呢?主要原因要涉及到Oracle SGA。在一个过程被装入SGA的共享池以后,它会一直“呆”到被调出内存给其他存储过程腾出空间为止。把过程调出内存的原则就是所谓的LRU算法。一旦装入了分享池的内存区,过程的执行速度可就快多了,这里的花招就是想办法阻止共享池承受太大的负载,因为许多存储过程会竞争有限的共享池内存量。再次重申:只要存储过程装入了共享池就要等到被调出内存为止。连续的存储过程执行就比外部代码更快。

  小结

  Oracle设计师的标志之一就是有能力创造出稳固、可维护和高效率的全面体系结构。今天的 Oracle设计专家需要设计出能支持每秒数千宗交易的系统同时还能实现快速的响应时间、简易的维护以及可扩展性。只要全面地了解Oracle9i 数据库的特性,采用本文建议的技巧,你肯定能建立恰当的数据模型结构来支持最终用户的需求。

Oracle结构设计技巧(访问数据库象访问内存一样 快)相关推荐

  1. 访问数据库_访问数据库

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  2. Java和php访问数据库对比_在Web开发方面Java和PHP的比较

    比较PHP和JSP这两个Web开发技术,在目前的情况是其实是比较PHP和Java的Web开发.以下是我就几个主要方面进行的比较: 一. 语言比较 PHP是解释执行的服务器脚本语言,首先php有简单容易 ...

  3. .Net程序员学用Oracle系列(16):访问数据库(ODP.NET)

    1..Net for Oracle 常见数据库驱动 1.1.微软提供的驱动 1.2.甲骨文提供的驱动 1.3.其它厂商提供的驱动 2.ODP.NET 常见问题分析 2.1.参数化问题 2.2.方法调用 ...

  4. Oracle中如何记录访问数据库的登录信息?

    曾有同学问过,能不能知道都有谁登陆过Oracle数据库, 碰巧看到老杨的这篇历史文章<Oracle中如何记录访问数据库的登陆信息>,介绍了几种实现这个需求的方案,学习一下. 1. 有哪些审 ...

  5. linux python连接oracle数据库_Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法...

    本文档主要描述了Linux下python数据库驱动的安装和配置,用来实现在Linux平台下通过python访问MySQL.Oracle.SQL Server数据库. 其中包括以下几个软件的安装及配置: ...

  6. ORACLE 限制特定IP访问数据库 访问白名单

    限制指定机器IP访问oracle数据库 通过使用数据库服务器端的sqlnet.ora文件可以实现禁止指定IP主机访问数据库的功能,这对于提升数据库的安全性有很大的帮助,与此同时,这个技术为我们管理和约 ...

  7. 通过PL/SQL developer工具访问远程的Oracle数据库_访问数据库_连接数据库_登录数据库

    文章目录 工具简介 电脑没有安装 Oracle 数据库 电脑安装了 Oracle 数据库 工具简介 PL/SQL Developer 是 Oracle 数据库开发工具,PL/SQL Developer ...

  8. C++ 版本ORM访问数据库之ODB访问oracle的Demo(三)

    ODB的组成部分: 1: 操作系统的ODB编译器 2: odb核心库libodb 3: 各种数据库的相关链接库 使用ODB访问数据需要的库和头文件(不懂, 请看https://www.cnblogs. ...

  9. C++版本 ORM 访问数据库之ODB 的oracle Demo测试(二)

    有上篇文章已经说了odb的环境编译, 现在直接拿来给的例子进行数据库的增删改查操作测试 1. ODB访问oracle数据库_ 插入操作(insert) 直接运行上篇编译好的exe文件会出现如下错误 错 ...

最新文章

  1. 《面向模式的软件体系结构2-用于并发和网络化对象模式》读书笔记(7)--- 事件处理模式与反应器...
  2. linux查看网络流量
  3. Java 14:instanceof的模式匹配
  4. 【OpenCV 例程200篇】92. 指数噪声、均匀噪声、椒盐噪声
  5. HibernateDaoSupport类的使用(转)
  6. C语言编程中 提取运行时间的函数,C语言中用于修改文件的存取时间的函数使用...
  7. 检测目标程序ELF bit是32还是64
  8. Java Eclipse下载安装教程
  9. web运维:跨域(NGINX跨域配置为例)
  10. uno牌的玩法图解_UNO基本玩法和技巧
  11. Windows10删除hiberfil.sys
  12. metaWRAP bin_refine 模块如何优化分箱结果
  13. 【踔厉奋发,笃行不怠】中创算力召开2021年终工作会议
  14. Backpack-problem背包九讲笔记
  15. C语言-03-基本数据类型及输入输出函数
  16. 不只是A/B测试:多臂老虎机赌徒实验
  17. html怎么做一个心形边框,使用CSS获取心形边框?
  18. spring核心编程思想—beanfacotry和applicationcontext区别
  19. Random与ThreadLocalRandom 解析
  20. ESXi thin磁盘空间回收

热门文章

  1. 加快Android Studio的编译速度
  2. 在二维数组中查找一个数
  3. Windows 2008 R2安装DHCP服务器问题及解决方法
  4. poj 1986 Distance Queries
  5. 爱情二十九课,驾驭爱情
  6. 关于数据仓库 — 总体工具介绍
  7. 使用 OpenLDAP 集中管理用户帐号
  8. 【原理图操作】原理图更新PCB时未改动元器件布局变动问题?
  9. 【mysql】mysql优化
  10. 【MongoDB】递归获取字段更新表达式,更新复杂数据类型对象