热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

Oracle数据库开发结构设计技巧-mysql教程

尽管Oracle系统本身已经提供了若干种对系统性能进行调节的技术,但是,假如数据库设计本身就有问题特别是在结构上设计得尤其糟糕

尽管Oracle系统本身已经提供了若干种对系统性能进行调节的技术,但是,假如数据库设计本身就有问题特别是在结构上设计得尤其糟糕

尽管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 数据库的特性,采用本文建议的技巧,你肯定能建立恰当的数据模型结构来支持最终用户的需求。

linux

推荐阅读
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 本文介绍了三种解决 Git Push 冲突的方法,包括创建新分支、手动解决冲突和强行推送。这些方法适用于不同的开发场景,如版本迭代、多人协作和个人开发。 ... [详细]
  • 本文介绍了 Oracle SQL 中的集合运算、子查询、数据处理、表的创建与管理等内容。包括查询部门号为10和20的员工信息、使用集合运算、子查询的注意事项、数据插入与删除、表的创建与修改等。 ... [详细]
  • Python学习day3网络基础之网络协议篇
    一、互联网协议连接两台计算机之间的Internet实际上就是一系列统一的标准,这些标准称之为互联网协议,互联网的本质就是一系列网络协议。二、为什么要有互联网协议互联网协议就相当于计 ... [详细]
  • 本文详细介绍了如何在Windows操作系统中通过Samba服务访问Red Hat Linux中的资源,包括配置Samba服务器、设置工作组名称、添加用户和共享目录等步骤。 ... [详细]
  • Java作为全球最流行的编程语言之一,应用广泛。本文将详细介绍Java开发的相关岗位及其具体职责,帮助读者更好地了解这一领域的职业发展路径。 ... [详细]
  • 2023年最新指南:如何在PHP中屏蔽警告和错误
    本文详细介绍了如何在PHP中屏蔽警告和错误,包括多种方法和最佳实践,帮助开发者提升代码质量和安全性。 ... [详细]
  • Java EE 平台集成了多种服务、API 和协议,旨在支持基于 Web 的多层应用程序开发。本文将详细介绍 Java EE 中的 13 种关键技术规范,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • Gty的二逼妹子序列 - 分块与莫队算法的应用
    Autumn 和 Bakser 正在研究 Gty 的妹子序列,但遇到了一个难题。他们希望计算某个区间内美丽度属于 [a, b] 的妹子的美丽度种类数。本文将详细介绍如何利用分块和莫队算法解决这一问题。 ... [详细]
  • 无线鼠标应用:Remote Mouse
    Remote Mouse 是一款功能强大的无线鼠标软件,可将您的手机或平板设备变为遥控器,完美模拟键盘和鼠标操作,实现手机远程控制电脑。 ... [详细]
  • 本文介绍了如何使用Postman构建和发送HTTP请求,包括四个主要部分:方法(Method)、URL、头部(Headers)和主体(Body)。特别强调了Body部分的重要性,并详细说明了不同类型的请求体。 ... [详细]
  • 本文通过基准测试(Benchmark)对.NET Core环境下Thrift和HTTP客户端的微服务通信性能进行对比分析。基准测试是一种评估系统或组件性能的方法,通过运行一系列标准化的测试来衡量其表现。 ... [详细]
  • Linux 防火墙与端口管理必备命令
    在使用 Linux 系统进行服务部署和问题排查时,防火墙和端口管理是不可或缺的操作。本文将详细介绍如何查看防火墙状态、端口占用情况,以及如何开放和关闭端口,帮助初学者更好地掌握这些技能。 ... [详细]
  • 解决SQL Server数据库sa登录名无法连接的问题
    在安装SQL Server数据库后,使用Windows身份验证成功,但使用SQL Server身份验证时遇到问题。本文将介绍如何通过设置sa登录名的密码、启用登录名状态以及开启TCP协议来解决这一问题。 ... [详细]
author-avatar
micheals
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有