Oracle12c 性能优化攻略:攻略1-1:创建具有最优性能的数据库⼀:章节前⾔本章着眼于影响表中数据存储性能的数据库特性本章着眼于影响表中数据存储性能的数据库特性。。表的性能部分取决于在创建之前所应⽤的数据库特性。例如:在最初创建数据库时采⽤的物理存储特性以及相关的表空间都会在后来影响表的性能。类似地,表性能还受到最开始选择的物理特性的影响。例如:表类型和数据类型。因此应⽤实践中使⽤的数据库、表空间、和表的创建标准(并将性能问题放在⼼上),就形成了优化数据可能性和可扩展性的基础。组成Oacle 数据库的物理结构⽤来存储、管理、保护以及读取数据。在创建数据库的时候,可以选择应⽤⼀些与性能相关的特性。例如⽂件的初始布局以及表空间的管理类型,都是在创建数据库时制定。这时所实现的架构上的决策,通常都会产⽣很长远的影响。提⽰: oralce 实例的定义是其内存结构及其后台进程。⽽Oracle 数据库则由物理⽂件(即:数据⽂件、控制⽂件、在线重做⽇志⽂件)组成。  如图1-1所描述的那样,表空间是⽀持管理⼀组数据⽂件的逻辑结构。数据⽂件就是磁盘的物理⽂件。配置表空间时,要注意⼀些对性能会产⽣深远影响的特性,也就是本地管理表空间以及⾃动段存储管理的表空间。如果合理地设计这些特性,将来也就能最⼤限度得可接受到表性能                                                                                                                                        图1-1 逻辑存储于物理存储之间的关系图
表是数据库中存储数据的对象。数据库性能衡量的是应⽤能够以什么样的速度插⼊、更新、删除、和查询数据。因此,此书就从优化表性能的攻略讲起。本章⾸先介绍创建数据库和表空间时,可能会影响表性能的各⽅⾯因素,然后,讨论另外⼀些主题,⽐如根据于性能相关的业务需求,选择表类型和数据类型。稍
后介绍的主题包括管理表空间使⽤情况的物理实现⽅式。本章还会详细介绍其他问题。例如探测表碎⽚、处理位于⾼⽔位线下⽅的空闲空间、⾏链接以及数据压缩。除此之外还会描述Oracle 段顾问(Oracle Segment Advisor ).这个⼯具很好⽤,能够帮助你⾃动探测并解决碎⽚和未使⽤的空间问题。  攻略1-1:创建具有最优性能的数据库 问题描述
最初创建数据库时,有⼀些属性(如果启⽤了的话)将会对数据库中的表的性能和可⽤性产⽣长远的影响。具体来说,创建数据库时,需要做下⾯这些事情。1:强制数据库中创建的每⼀个表空间都必须是本地管理的。本地管理表空间能⽐已经被弃⽤的字典管理技术提供更好性能。2:确保数据库为每个⽤户⾃动分配⼀个默认的永久表空间。这可以保证在创建⽤户时,⾃动分配⼀个默认的表空间,⽽不是system 系统表空间。由于有延迟段(Deferred Segment Feature ),如果⼀个⽤户具有 create table 的权限,即使其在system 表空间中没有空间配额,也能在其中创建对象。这并不可取。当然,⽤户不会向没有空间爱你配额的表中插⼊数据,但他们可以创建对象,从⽽可能在不经意间使system 表空间变得很杂乱。3:确保数据库会为每个⽤户⾃动分配⼀个默认的临时表空间。。这可以保证在创建⽤户时,如果没有显⽰指定,⾃动分配⼀个临时表空间。解决⽅案:
可以使⽤两种不同的⼯具来创建Oracle 数据库:1:在SQL*Plus 中使⽤Create Database 语句。2:dbca(Databae Configuration Assistant,数据库配置助⼿)
SQL*Plus 使⽤类似下⾯这样的脚本创建遵循合理标准的数据库,这就为数据库的⾼性能打下良好的基础:  O12C
MAXLOGFILES 16
MAXLOGMEMBERS 4
MAXDATAFILES 1024
MAXINSTANCES 1
MAXLOGHISTORY 680
AL32UTF8
DATAFILE
'/u01/dbfile/O12C/system01.dbf '
500M REUSE
EXTENT MANAGEMENT
UNDO TABLESPACE undotbs1 DATAFILE
'/u02/dbfile/O12C/undotbs01.dbf '
800M
SYSAUX DATAFILE
'/u01/dbfile/O12C/sysaux01.dbf '
500M
TABLESPACE  TEMPFILE
'/u02/dbfile/O12C/temp01.dbf'
500M
TABLESPACE USERS DATAFILE
'/u01/dbfile/O12C/users01.dbf'
50M
LOGFILE  1
('/u01/oraredo/O12C/redo01a.rdo',
'/u02/oraredo/O12C/redo01b.rdo')  200M,
2
('/u01/oraredo/O12C/redo02a.rdo',
linux安装oracle图形化界面'/u02/oraredo/O12C/redo02b.rdo')  200M,
3
('/u01/oraredo/O12C/redo03a.rdo',
'/u02/oraredo/O12C/redo03b.rdo')  200M
sys IDENTIFIED  f0obar
system IDENTIFIED  f0obar;
上⾯这段Create database 脚本通过实现下列功能,为数据库的性能打下良好的基础
1:通过 extent management local ⼦句,将system表空间定义为本地管理表空间。这确保了数据库中创建的所有表空间都是本地管理的。从oracle 12c版本开始,system 表空间总是创建为本地管理表空间。为创建时没有显⽰定义默认表空间的⽤户,定义为⼀个默认的表空间USER。这就可以防⽌⽤户分配sysem系统表空间为默认表空间。2;为所有⽤户定义⼀个默认临时表空间,名为temp。这可以防⽌为⽤户分配system 表空间作为默认的临时表空间。创建system作为默认临时表空间的⽤户,对性能有负⾯影响,因为这会造成system表空间中的资源争夺。
良好的性能始于正确的数据库配置。以上推荐的这些为配置有助于为表数据创建⼀个可靠的基础结构。
dbca
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将会创建⼀个具有以下特点的数据库:
将SYSTEM表空间定义为本地管理表空间
对没有显⽰定义默认的表空间的⽤户,定义⼀个名为USERS的默认表空间;
为所有⽤户创建⼀个名为tmp的临时表空间
与SQL*plus⽅法类似。这都是⼀些好的特性。为在其上创建应⽤打下良好基础。
dbca ⼯具还允许不使⽤图形组件,直接通过静默模式来创建数据库。在静默模式下,通过响应⽂件来使⽤DBCA;是⼀种以⼀致的、可重复的⽅式来创建数据库的⾼效⽅法。当在⽹络连接较慢或者没有安装相应的X软件的远程服务器上进⾏安装时,这也是⼀种很好的⽅法。
以下是通过静默模式下使⽤dbca来创建数据库:
到dbca.rsp ⽂件
将dbca.rsp⽂件复制⼀份
根据实际环境修改dbca.rsp⽂件
在静默模式下运⾏dbca⼯具。
⾸先,打开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  语句同时还考虑了下⾯这些可维护⽅⾯的特性。
创建⼀个⾃动的UNDO表空间(⾃动撤销管理通过设置UNDO_MANAGEMENT 和UNDO_TABLESPACE初始化参数来启⽤。)这使Oracle可以⾃动管理回滚段,你也就不必定期进⾏监控和微调了。
按照环境中的⼀定标准,将数据⽂件放到响应⽂件夹中。这有助于维护和管理。从⽽使数据库具备更好的长期可⽤性,从⽽获得更好的性能。
将数据库管理员(DBA)相关⽤户密码设置为⾮默认值。这可以进⼀步确保数据库的安全性,从长远来看也会影响到性能(如果有⼈攻击⼊侵数据库并删除数据,那么性能也将会受到损害)。
创建三组联机重做⽇志⽂件,每组两个组员,⼤⼩适合事务加载。重做⽇志⽂件的⼤⼩直接影响切换频率。如果重做⽇志⽂件太过频繁,就会导致性能下降。要记住的是,在初始化建新数据库时,可能并不知道这些⽂件的确切⼤⼩,只能以后再进⾏调整。
作为数据库维护⼈员的你,应该花点时间确认每个数据库都是按照⼴泛认可的标准创建的,这有助于保证数据库具有坚实的性能基础。
1  *
2  database_properties
3  property_name ='DEFAUL_PERMANENT_TABLESPACE';
4---如果需要修改默认的永久表空间,按照下⾯这样来做:
5    tablespace users;
6----要检验默认临时表空间的设置,使⽤查询:
7  *  database_properties  property_name ='DEFAULT_TEMP_TABLESPACE';
8
9----要修改临时表空间的设置,可以像下⾯这样来做:
10    teportary tablespace ;
11---- 可以通过下⾯的查询来检验UNDO表空间的设置;
12  name ,  v$parameter  name  ('undo_management','undo_tablespace');
13----如果需要重做(undo)表空间,⾸先创建1个新的重做表空间,然后使⽤
14  system  undo_tablespace 语句。
15

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。