第一章:优化表性能

Posted ✧*꧁一品堂.技术学习笔记꧂*✧.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第一章:优化表性能相关的知识,希望对你有一定的参考价值。

一:章节前言

本章着眼于影响表中数据存储性能的数据库特性

表的性能部分取决于在创建之前所应用的数据库特性。例如:在最初创建数据库时采用的物理存储特性以及相关的表空间都会在后来影响表的性能。类似地,表性能还受到最开始选择的物理特性的影响。例如:表类型和数据类型。

因此应用实践中使用的数据库、表空间、和表的创建标准(并将性能问题放在心上),就形成了优化数据可能性和可扩展性的基础。

组成Oacle数据库的物理结构用来存储、管理、保护以及读取数据。

在创建数据库的时候,可以选择应用一些与性能相关的特性。例如文件的初始布局以及表空间的管理类型,都是在创建数据库时制定。这时所实现的架构上的决策,通常都会产生很长远的影响。

提示: oralce实例的定义是其内存结构及其后台进程。而Oracle数据库则由物理文件(即:数据文件、控制文件、在线重做日志文件)组成。

  如图1-1所描述的那样,表空间是支持管理一组数据文件的逻辑结构。数据文件就是磁盘的物理文件。配置表空间时,要注意一些对性能会产生深远影响的特性,也就是本地管理表空间以及自动段存储管理的表空间。如果合理地设计这些特性,将来也就能最大限度得可接受到表性能

                                                    image

                                                                                      图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

使用类似下面这样的脚本创建遵循合理标准的数据库,这就为数据库的高性能打下良好的基础:

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表空间中的资源争夺。

良好的性能始于正确的数据库配置。以上推荐的这些为配置有助于为表数据创建一个可靠的基础结构。

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 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 

以上是关于第一章:优化表性能的主要内容,如果未能解决你的问题,请参考以下文章

Tsql2008查询性能优化第一章---APPLY

性能测试第一章

前端性能优化笔记 第一章

Linux性能优化 第一章 性能追踪建议

mysql 查询性能优化第一章 为什么查询速度会慢

《大型网站技术架构演进与性能优化》——第一章:构建大型网站:分布式改造