表的性能部分取决于在建立以前所应用的数据库特性。例如:在最初建立数据库时采用的物理存储特性以及相关的表空间都会在后来影响表的性能。相似地,表性能还受到最开始选择的物理特性的影响。例如:表类型和数据类型。linux
所以应用实践中使用的数据库、表空间、和表的建立标准(并将性能问题放在心上),就造成了优化数据可能性和可扩展性的基础。数据库
在建立数据库的时候,能够选择应用一些与性能相关的特性。例如文件的初始布局以及表空间的管理类型,都是在建立数据库时制定。这时所实现的架构上的决策,一般都会产生很长远的影响。安全
如图1-1所描述的那样,表空间是支持管理一组数据文件的逻辑结构。数据文件就是磁盘的物理文件。配置表空间时,要注意一些对性能会产生深远影响的特性,也就是本地管理表空间以及自动段存储管理的表空间。若是合理地设计这些特性,未来也就能最大限度得可接受到表性能服务器
图1-1 逻辑存储于物理存储之间的关系图网络
表是数据库中存储数据的对象。数据库性能衡量的是应用可以以什么样的速度插入、更新、删除、和查询数据。所以,此书就从优化表性能的攻略讲起。架构
本章首先介绍建立数据库和表空间时,可能会影响表性能的各方面因素,而后,讨论另一些主题,好比根据于性能相关的业务需求,选择表类型和数据类型。稍后介绍的主题包括管理表空间使用状况的物理实现方式。本章还会详细介绍其余问题。例如探测表碎片、处理位于高水位线下方的空闲空间、行连接以及数据压缩。除此以外还会描述Oracle段顾问(Oracle Segment Advisor).这个工具很好用,可以帮助你自动探测并解决碎片和未使用的空间问题。oracle
最初建立数据库时,有一些属性(若是启用了的话)将会对数据库中的表的性能和可用性产生长远的影响。具体来讲,建立数据库时,须要作下面这些事情。工具
1:强制数据库中建立的每个表空间都必须是本地管理的。本地管理表空间能比已经被弃用的字典管理技术提供更好性能。布局
2:确保数据库为每一个用户自动分配一个默认的永久表空间。这能够保证在建立用户时,自动分配一个默认的表空间,而不是system系统表空间。因为有延迟段(Deferred Segment Feature),若是一个用户具备 create table 的权限,即便其在system 表空间中没有空间配额,也能在其中建立对象。这并不可取。固然,用户不会向没有空间爱你配额的表中插入数据,但他们能够建立对象,从而可能在不经意间使system表空间变得很杂乱。性能
3:确保数据库会为每一个用户自动分配一个默认的临时表空间。。这能够保证在建立用户时,若是没有显示指定,自动分配一个临时表空间。
可使用两种不一样的工具来建立Oracle数据库:
1:在SQL*Plus中使用Create Database 语句。
2:dbca(Databae Configuration Assistant,数据库配置助手)
使用相似下面这样的脚本建立遵循合理标准的数据库,这就为数据库的高性能打下良好的基础:
CREATE DATABASE O12C MAXLOGFILES 16 MAXLOGMEMBERS 4 MAXDATAFILES 1024 MAXINSTANCES 1 MAXLOGHISTORY 680 CHARACTER SET AL32UTF8 DATAFILE '/u01/dbfile/O12C/system01.dbf' SIZE 500M REUSE EXTENT MANAGEMENT LOCAL UNDO TABLESPACE undotbs1 DATAFILE '/u02/dbfile/O12C/undotbs01.dbf' SIZE 800M SYSAUX DATAFILE '/u01/dbfile/O12C/sysaux01.dbf' SIZE 500M DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '/u02/dbfile/O12C/temp01.dbf' SIZE 500M DEFAULT TABLESPACE USERS DATAFILE '/u01/dbfile/O12C/users01.dbf' SIZE 50M LOGFILE GROUP 1 ('/u01/oraredo/O12C/redo01a.rdo', '/u02/oraredo/O12C/redo01b.rdo') SIZE 200M, GROUP 2 ('/u01/oraredo/O12C/redo02a.rdo', '/u02/oraredo/O12C/redo02b.rdo') SIZE 200M, GROUP 3 ('/u01/oraredo/O12C/redo03a.rdo', '/u02/oraredo/O12C/redo03b.rdo') SIZE 200M USER sys IDENTIFIED BY f0obar USER system IDENTIFIED BY f0obar;
上面这段Create database 脚本经过实现下列功能,为数据库的性能打下良好的基础
1:经过 extent management local 子句,将system表空间定义为本地管理表空间。这确保了数据库中建立的全部表空间都是本地管理的。从oracle 12c版本开始,system表空间老是建立为本地管理表空间。为建立时没有显示定义默认表空间的用户,定义为一个默认的表空间USER。这就能够防止用户分配sysem系统表空间为默认表空间。
2;为全部用户定义一个默认临时表空间,名为temp。这能够防止为用户分配system 表空间做为默认的临时表空间。建立system做为默认临时表空间的用户,对性能有负面影响,由于这会形成system表空间中的资源争夺。
良好的性能始于正确的数据库配置。以上推荐的这些为配置有助于为表数据建立一个可靠的基础结构。
Oracle 的dbca 工具具备图形界面和命令行模式。能够用来建立和配置数据库。图形工具使用很是简单,具备很直观的界面。在linux、unix 环境下经过图形界面模式使用dbca,须要正确的安装X软件。而后提交XHOST + 命令,而且确保设置了DISPLAY变量。例如:
1 $ xhost + 2 $echo $DISPLAY 3 :0.0 4 $ xhost + 5 $ echo $DISPLAY 6 :0.0
像下面这样来从操做系统中调用dbca; $dbca
这样会给一系列让用户能够选择配置项的页面。能够选择“高级模式”选项,以便更好地控制文件位置和多个在线重作日志等方面。
默认地,dbca 将会建立一个具备如下特色的数据库:
与SQL*plus方法相似。这都是一些好的特性。为在其上建立应用打下良好基础。
dbca 工具还容许不使用图形组件,直接经过静默模式来建立数据库。在静默模式下,经过响应文件来使用DBCA;是一种以一致的、可重复的方式来建立数据库的高效方法。当在网络链接较慢或者没有安装相应的X软件的远程服务器上进行安装时,这也是一种很好的方法。
首先,打开Oracle 数据库安装文件所在的文件夹,使用find命令来查找dbca.rsp文件所在的位置;
1 $find . -name dbca.rsp 2 3 ./12.1.0.1/database/response/dbca.rsp
使用cd命令进入 dbca.rsp文件目录中进行复制该文件,以免修改原始文件
1 2 cd ./12.1.0.1/databse/response/ 3 $cp dbca.rsp mydb.rsp
如今,编辑mydb.rsp 文件。修改内容(事例)以下:
1 [CREATEDATABSE] 2 GDBNAME='O12C' 3 SID ='O12C' 4 TEMPLATENAME ='General_Purpose.dbc' 5 SYSPASSWORD='foobar' 6 SYSTEMPASSWORD ='foobar' 7 SYSMANPASSWORD='foobar' 8 DBSNMPASSWORD='foobar' 9 DATAFILEDESTINATION='/u01/dbfile' 10 STORAGETYPE='FS' 11 CHARACTERSET='AL32UTF8' 12 NATIONALCHARACTERSET='UTF8' 13
使用一个响应文件在静默模式下运行dbca工具:
1 $ dbca -silent -responseFile /home/oracle/orainst/mydb.rsp
应该是能够看到类是下面的执行输出:
Copying database files
1% complete
…
62% complete
Completing Database Creation
…
100% complete
Loke at the log file … for further details.
若是查看日志文件,注意dbca工具使用rman工具来存储数据库所使用的数据文件。而后,将会建立实例,并进行安装后的步骤。在linux系统中,还会为新数据库在/etc/oratab文件中建立一条新概率。
许多数据库管理员在图形模式下调用dbca工具和配置数据库,可是不多人会选择使用响应文件。有效使用响应文件,能够是数据库建立过程保持自动化。能够修改响应文件,以在ASM上建立数据库,甚至建立RAC环境下的数据库。此外,几乎可以控制响应文件的全部方面,就像在图形模式中调用dbca 同样。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------工做原理-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
合理地配置并建立数据库有助于保证数据库的优良性能。尽管确实能够在建立数据库以后再来修改其功能;可是,一般的状况下是,写得不好的create databases 脚本将会对数据库性能产生永久的影响。生产环境中,数据库有时很难有机会停机,对配置不恰当的地方进行从新配置。若是可能的话,最好在建立数据库开始,在建立环境的每一步都仔细考虑性能问题。
建立数据库时,还须要考虑影响可维护性的功能。容易维护的数据库能正常运行更长的时间,而这也正式整体性能的一个重要的部分,“解决方案”部分的create datebase 语句同时还考虑了下面这些可维护方面的特性。
做为数据库维护人员的你,应该花点时间确认每一个数据库都是按照普遍承认的标准建立的,这有助于保证数据库具备坚实的性能基础。
1 select * 2 from database_properties 3 where property_name ='DEFAUL_PERMANENT_TABLESPACE'; 4 ---若是须要修改默认的永久表空间,按照下面这样来作: 5 alter database default tablespace users; 6 ----要检验默认临时表空间的设置,使用查询: 7 select * from database_properties where property_name ='DEFAULT_TEMP_TABLESPACE'; 8 9 ----要修改临时表空间的设置,能够像下面这样来作: 10 alter database default teportary tablespace temp; 11 ---- 能够经过下面的查询来检验UNDO表空间的设置; 12 select name ,value from v$parameter where name in ('undo_management','undo_tablespace'); 13 ----若是须要重作(undo)表空间,首先建立1个新的重作表空间,而后使用 14 alter system set undo_tablespace 语句。 15