信息发布软件,b2b软件,广告发布软件

标题: oracle体系结构难不难弄的清楚得看这二个概念明不明白 [打印本页]

作者: 群发软件    时间: 2017-9-8 21:20
标题: oracle体系结构难不难弄的清楚得看这二个概念明不明白
本帖最后由 群发软件 于 2017-9-8 21:23 编辑

 一: 数据库

  数据库(database)是一个数据集合.

  无论数据库是采用关系结构还是面向对象结构, oracle数据库都将其数据存放在数据文件中. 在其内部, 数据库结构数据对文件的逻辑映射, 使不同的数据分开存储, 这些逻辑划分称为表空间.

  表空间和文件介绍:

  1: 表空间

  表空间(tablespace)是数据库的逻辑划分, 每个数据库至少有一个表空间,叫做系统表空间(system 表空间). 一个表空间只能属于一个数据库.

  每个表空间由同一个磁盘上的一个或多个文件组成, 这些文件称为数据文件. 表空间的特性:

  1)控制数据库数据磁盘分配

  2)限制用户在表空间中可以使用的磁盘空间大小

  3)表空间具有 online, offline, readonly, readwrite属性

  修改表空间的属性:

  SQL> alter tablespace 表空间名称 属性;

  查询表空间状态:

  SQL> select tablespace_name, status from dba_tablespaces;

  注意: system, undo, temp表空间不能设为offline属性.

  4)完成部分数据库的备份与恢复

  5)表空间通过数据文件来扩大, 表空间的大小等于构成该表空间的所以数据文件的大小只和.

  查询表空间与数据文件对应关系:

  SQL> select tablespace_name, bytes, file_name from dba_data_files;

  基于表空间的几个操作:

  1)查询用户缺省表空间:

  SQL> select username, default_tablespace from dba_users;

  2)查询表与存储该表的表空间:

  SQL> select table_name, tablespace_name from user_tables;

  3)修改用户缺省表空间:

  SQL> alter user username default tablespace tablespace_name;

  4)将数据从一个表空间移动到另一个表空间:

  SQL> alter table table_name move tablespace tablespace_name;

  2: 数据文件

  每个表空间由同一个磁盘上的一个或多个文件组成, 这些文件叫做数据文件(datafile),数据文件只能属于一个表空间. 数据文件创建后可以改变大小. 创建新的表空间需要创建新的数据文件. 数据文件一旦加入到表空间中, 就不能从表空间中移走, 也不能与其他表空间发生联系.数据库必须的三类文件是 data file, control file, redolog file. 其他文件 prameter file,password file, archived log files并不是数据库必须的, 他们只是辅助数据库的.

  查看数据库的物理文件组成:

  1)查看数据文件: SQL> select * from v$datafile;

  2)查看控制文件: SQL> select * from v$controlfile;

  3)查看日志文件: SQL> select * from v$logfile;

  二: 实例

  通俗的讲实例就是操作oracle数据库的一种手段.

  数据库实例也称作服务器, 是用来访问数据库文件集的存储结构及后台进程的集合.

  一个数据库可以被多个实例访问(称为真正的应用群集选项).

  决定实例的大小及组成的各种参数或者存储在名称init.ora的初始化文件中, 或者隐藏在数据库内部的服务器参数文件中. 通过spfile引用该文件, spfile存储在spfile.ora文件中.

  实例启动时读取初始化文件, 数据库系统管理员可以修改该文件, 对初始化文件的修改只有在下次启动时才有效.

  Instance分为两部分:

  1: memory structure(内存结构)

  memory structure分为两部分:SGA(System Global Area)区是用于存储数据库信息的内存区,该信息为数据库进程所共享。它包含Oracle 服务器的数据和控制信息,

  它是在Oracle 服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。

  包括:

  .share pool

  .datafase buffer cache

  .redo log buffer

  .other structures

  PGA(Program Global Area)区包含单个服务器进程或单个后台进程的数据和控制信息,与几个进程共享的SGA 正相反PGA 是只被一个进程使用的区域,PGA 在创建进程时分配在终止进程时回收

  2: background process(后台进程)

  包括: .PMON 负责在一个Oracle 进程失败时清理资源

  .SMON 检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复

  .DBWR 负责将更改的数据从数据库缓冲区高速缓存写入数据文件

  .LGWR 将重做日志缓冲区中的更改写入在线重做日志文件

  .CKPT 负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。

Oracle体系概论

在正式开始学习Oracle体系结构之前,我们先通过下面的图片对Oracle体系结构有个初步把握。

oracle体系结构难不难弄的清楚得看这二个概念明不明白 b2b软件


1、Oracle服务体系(Oracle Service)由实例(Instance)和数据库(Database)两部分内容组成。

其中数据库是我们计算机上实实在在存在的一系列磁盘文件,而实例则是由一组管理数据库的内存结构和进程结构两部分内容组成;

2、实例:负责与数据库进行交互,在oracle数据库客户端/服务器模式中,任何用户都无法绕过实例,直接与数据库进行交互;非RAC模式下,一个实例通常只对应一个数据库;我们可以通过HASH(ORACLE_SID,ORACLE_HOME)确定实例的哈希地址,即确定实例唯一性;


二、Oracle体系组成图,中英文对照版

说明:下面的体系组成部分,我们会在后面一点点详细讲解,图片所示内容初步了解即可:

oracle体系结构难不难弄的清楚得看这二个概念明不明白 b2b软件

oracle体系结构难不难弄的清楚得看这二个概念明不明白 b2b软件


三、“桥梁”——监听

1、监听(Listener):用于监视从客户端发起对数据库的连接请求,请求信息中包含登录用户名、登录密码、连接实例等信息内容,监听对于这部分请求信息进行合法性鉴别,如果信息合法,则抛给服务进程进行客户端请求服务;可以通俗理解成,监听是连接用户进程和服务进程的“桥梁”;

2、监听路径:E:\app\tom\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora

3、监听格式:

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

    )

  )


四、Oracle 服务器两种最常见的处理请求方式:

1、分类:

        专用服务器(dedicated server)连接和共享服务器(shared server)连接。

2、含义:

        专用服务器模式下,1个服务器进程只服务于1个客户端连接请求;

        共享服务器模式下,采用”共享进程“池服务于客户端连接请求,即共享进程池中哪个服务进程有空闲就服务于客户端连接请求,如果所有的服务器进程都处于繁忙状态,则客户端连接请求处于等待状态;3、适用场景说明:

       当预期客户机连接总数较小,或客户机向数据库服务器发起请求持续时间比较长,请使用专有模式;

       当大量客户机同时要连接数据库并且有效地利用系统资源时,特点是高并发、事务量小,此种情景模式下请使用共享模式

4、注意:

        共享服务器模式必须使用net services,即必须配置tns信息——网络配置信息,;

我们可以通过在DOS命令行中执行 lsnrctl  service 命令来查看连接模式;                                      

5、lsnrctl service命令执行结果集


Microsoft Windows [版本 6.1.7600]

版权所有 (c) 2009 Microsoft Corporation。保留所有权利。


C:\Users\neusoft>lsnrctl service


LSNRCTL for 32-bit Windows: Version 11.2.0.1.0 - Production on 09-12月-2014 21:2

0:37


Copyright (c) 1991, 2010, Oracle.  All rights reserved.

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))

服务摘要..

服务 "CLRExtProc" 包含 1 个实例。

  实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...

    处理程序:

      "DEDICATED" 已建立:0 已被拒绝:0

         LOCAL SERVER

服务 "orcl" 包含 1 个实例。

  实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...

    处理程序:

      "DEDICATED" 已建立:144 已拒绝:0 状态:ready

         LOCAL SERVER

服务 "orclXDB" 包含 1 个实例。

  实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...

    处理程序:

      "D000" 已建立:0 已被拒绝:0 当前: 0 最大: 1022 状态: ready

         DISPATCHER <machine: NEUSOFT-PC, pid: 2112>

         (ADDRESS=(PROTOCOL=tcp)(HOST=neusoft-PC)(PORT=49160))

命令执行成功


6、查看共享模式参数:

我们可以通过在SQLPLUS界面输入show parameter shared查看共享模式参数

例如:SQL> show parameter shared


NAME                                   TYPE        VALUE

------------------------------------ ----------- ------------------------------

hi_shared_memory_address             integer          0

max_shared_servers                   integer

shared_memory_address     integer          0

shared_pool_reserved_size            big integer    13212057

shared_pool_size                     big integer      0

shared_server_sessions               integer

shared_servers                       integer          1


7、查看调节器参数:

可以通过在sqlplus中执行show parameter dispatchers查看共享服务器模式下调度器参数情况信息


8、备注说明:

共享模式现在在应用程序中已经很少使用,因为现在程序中都已经具备这种功能,不需要单独在oracle中进行设置;


五、数据库文件

1、组成分类:数据库文件由控制文件、数据文件、重做日志文件3大类文件组成;

2、文件分布路径:E:\app\tom\oradata\orcl,如下图:

3、数据库分类文件样式图:

oracle体系结构难不难弄的清楚得看这二个概念明不明白 b2b软件

4、类型分类:

其中控制文件和重做日志文件属于离线文件,数据文件属于在线文件。所谓离线是指不需要oracle服务启动也可以使用,反而,在线是需要Oracle正常启动后才能正常作业;

5、数据文件查询方法:

SELECT * FROM V$DATAFILE;

SELECT * FROM DBA_DATA_FILES;


六、SGA

1、含义:

(SYSTEM GLOBAL AREA)系统全局区域,还有一种通俗称呼是(SHARE GLOBAL AREA)共享全局区域,存储Oracle数据库实例(instance)的数据和控制文件信息,1个实例只有1个SGA,数据库实例启动时,SGA的内存被自动分配,当数据库实例关闭时,SGA内存被回收;

2、SGA组成体系:

共享池(shared pool)数据缓存区(database buffer cache)
重做日志缓冲区(redo logbuffer)
Java 池(Java pool)
大型池(large pool)(可选的, Oracle9iRelease2版本中才开始出现)
数据流池(streams pool)(Oracle 10g 新增)
数据字典缓存区(datadictionary cache)
其他杂项信息(others)

3、共享池

Ⅰ组成范围:

①库高速缓存区(Library Cache):

共享SQL区(与之对应的有“私有SQL区”,在PGA中存放)

SQL AREA:存放sql语句文本、分析树已编译的版本、执行计划执行时采取的步骤;

PL/SQL AREA,存放PL/SQL中编译代码、调试代码、解析树等信息;

说明:

1、             从用户进程发起的sql或pl/sql代码,oracle首先会在共享SQL区中寻找是否存在历史已缓存的数据结果集,如果有则不需要进行重新解析,直接复制一份返回给PGA私有SQL区进行执行,如果没有,则先进行代码分析,分析完毕后存放于共享SQL区,然后再复制一份给PGA私有SQL区进行执行

2、             Library Cache大小由共享池大小(share_pool_size)决定,不可以直接进行调整。

3、             存放共享SQL区的目的是为了以后减少解析时间,复用已有的解析成果。但是任何SQL或者PL/SQL代码最终都是在PGA中的私有SQL区进行执行、排序等操作;

4、             任何用户都可以通过V$sqlarea访问共享SQL区;

②数据字典缓存区(data dictionary cache):

存放用户、权限、表对象、表中字段等所对应的数据字典的副本,如果不存在,则会报错。主要是负责语法、语义的解析;、

举例:比如我需要执行selecth.last_name,h.salary from hr.employees h;   

oracle会检查这个待执行的sql语句中是否存在拼写错误,检查是否存在employees这张表,检查是否存在hr这个用户,检查当前登录用户是否有权限对hr.employees表有操作权限,检查表中是否有last_name、salary这两个字段;

数据字典缓冲区是数据库对应磁盘文件的副本,如果数据解析时,数据缓冲区没有内容,则会到数据库磁盘文件中进行检索并复制一份副本给数据字典缓存区;         

③用户全局区域(User Global Area):

在共享连接模式下,如果大型池(large pool)启用,则UGA属于大型池,否则属于共享池;

Ⅱ共享池管理:

1、刷新共享池:ALTERSYSTEMFLUSHSHARED_POOL

说明:

  刷新共享池会将SGA中的share_pool中的数据全部清除,这个操作不建议在并发量大的时间操作,

  另外操作完毕后,oracle解析sql或pl/sql的时间可能会增加,但是性能会很快重新提升,

  这个操作可以作为oracle性能调优的手段之一,减少共享内存中的碎片;

2、更改共享池大小:ALTERSYSTEMSET SHARED_POOL_SIZE=66M;

3、  共享池size过大或过小,都会影响Oracle性能;

4、  共享池中多大量的小内存块组成,内存块大小一般为4KB,我们使用大量的小内存块来避免碎片的问题,共享池中使用LRU方法进行管理,下面补充LRU的相关知识;

什么是LRU算法?

LRU是Least Recently Used的缩写,即最少使用页面置换算法,是为虚拟页式存储管理服务的。LRU法则下,Oracle内存中最近使用的数据就会被依次放入头部,当内存空间满时,就会将最近很少使用的内存区域中的数据清除出共享内存区;

4、数据缓存区(data buffer cache)

数据缓存区的大小是由内存块大小(DB_BLOCK_SIZE)*内存块数量(DB_BLOCK_CACHE)决定,因为DB_BLOCK_SIZE是由数据库创建时决定,一般大小是4K,如需更改则需要重新创建数据库,所以我们一般不需要更改,那我们只能通过修改动态参数DB_BLOCK_CACHE进而控制数据缓存区的大小。在Oracle9i以后版本中出现了另外一个参数DB_CACHE_SIZE控制数据缓存区大小,即DB_CACHE_SIZE= DB_BLOCK_CACHE* DB_BLOCK_SIZE。

Oracle通过LRUW链条对数据缓存区中的脏块(即数据缓存区中数据发生变化并且没有写入数据文件中的数据)进行管理;

我们可以通过:ALTER SYSTEM FLUSH BUFFER_CACHE;语句实现对数据缓存区的刷新;

从oracle10g开始,可以通过SGA_TARGET参数实现动态智能化管理SGA;

oracle11g更加智能化,通过MEMORY_TARGET参数实现动态智能化管理SGA和PGA;


Oracle9i需要手工分配max_sga_size

            ↓

Oracle10g自动管理SGA,设置sga_target,sga_target<=max_sga_size

            ↓

Oracle11g自动管理SGA和PGA,设置memory_target,我们称之为ASMM;

说明:

通过上面各Oracle版本对于内存的管理,不难看出Oracle在朝着越来越智能化的方向发展,但是作为优秀的DBA人员,至少应当是熟悉Oracle对于共享内存处理的原理,以方便问题的排查、解决;


5、  重做日志缓冲区(redo logbuffer)

  • 主要目的用来数据库恢复


  • 在块中动的记录我们称REDO 记录


  • REDO实体包括了重构数据的信息


  • 大小由LOG_BUFFER决定


REDO记录数据修改时的记录,主要用于数据库异常情况下的数据回滚;

UNDO记录数据修改前的状态,主要用于ROLLBACK时的操作处理;

5、Oracle10g内存管理(了解)



在 Oracle 10g中,与内存相关的参数可以归为两类:

l 自动调优的SGA参数:目前这些参数包括DB_CACHE_SIZE、 SHARED_POOL_SIZE、LARGE_POOL_SIZE和JAVA_POOL_SIZE。

l 手动SGA参数:这些参数包括LOG_BUFFER、STREAMS_POOL、 DB_NK_CACHE_SIZE、DB_KEEP_CACHE_SIZE和DB_RECYCLE_CACHE_SIZE。

在Oracle 10g中,任何时候你都能查询V$SGAINFO,来查看SGA的哪些组件的大小可以调整。

注意要使用自动SGA内存管理,参数STATISTICS_LEVEL必须设置为TYPICAL或ALL。如果不支持统计集合,数据库就没有必要的历史信息来确定大小。

SQL> SELECT * FROM V$SGAINFO;


NAME                            BYTES       RESIZEABLE

-------------------------------- ---------- ----------

Fixed SGA Size                  1374584         No

Redo Buffers                    5410816         No

Buffer Cache Size             452984832         Yes

Shared Pool Size              226492416         Yes

Large Pool Size                 8388608         Yes

Java Pool Size                  8388608         Yes

Streams Pool Size                     0         Yes

Shared IO Pool Size                   0         Yes

Granule Size                    8388608         No

Maximum SGA Size              711430144         No

Startup overhead in Shared Pool   67108864      No

Free SGA Memory Available        8388608


12 rows selected


我们可以通过V$SGA的状态

oracle体系结构难不难弄的清楚得看这二个概念明不明白 b2b软件


SQL> SHOW SGA


Total System Global Area     711430144 bytes

Fixed Size                     1374584 bytes

Variable Size                251659912 bytes

Database Buffers             452984832 bytes

Redo Buffers                   5410816 bytes


alter system set sga_target=1000m scope=both;

指定区域为spfile时(包括修改SGA_MAX_SIZE本身),SGA_TARGET可以大于MAX_SGA_SIZE的大小,Oracle会在下次启动时自动变更max_sga_size的大小=总和;

PRE_PAGA_SGA默认值为false,这个参数设置作用是:是否将全部SGA置入物理内存中;


**********下面内容为课堂试验部分**********

SQL> --共享池过小或过大都会影响数据库性能,我们可以通过下面语句实现共享池的刷新

SQL> alter system flush shared_pool;


系统已更改。


SQL> --但是上面语句不建议在白天数据并发量很大的时候操作,此操作可以将共享池中缓

存数据清除;

SQL> --我们可以通过pre_page_sga参数实现oracle实例启动时将分配给sga的物理内存一次

性加载上

SQL> alter system set pre_page_sga=true scope=spfile;


系统已更改。


SQL> --我们可以通过lock_sga参数实现sga锁定在物理内存中;

SQL> alter system set lock_sga=true scope=spfile;


系统已更改。


--下面是更改共享池最大内存大小的过程

SQL> --查询共享池内存大小

SQL> show parameter sga_max_size


NAME                                 TYPE        VALUE                          

------------------------------------ ----------- ------------------------------

sga_max_size                         big integer 680M                           

SQL> --sga_max_size参数是sga最大内存,可以手工调整,调整完毕需要重启数据库实例

SQL> alter system set sga_max_size=660M;

alter system set sga_max_size=660M

                 *

第 1 行出现错误:

ORA-02095: 无法修改指定的初始化参数


SQL> --上面的错误可以通过后面加scope(范围)解决

SQL> show parameter spfile


NAME                                 TYPE        VALUE                          

------------------------------------ ----------- ------------------------------

spfile                               string      E:\APP\NEUSOFT\PRODUCT\11.2.0\

                                                 DBHOME_1\DATABASE\SPFILEORCL.O

                                                 RA                             

SQL> alter system set sga_max_size=800M scope=spfile;


系统已更改。


SQL> shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startup

ORACLE 例程已经启动。


Total System Global Area  836976640 bytes                                       

Fixed Size                  1377812 bytes                                       

Variable Size             658508268 bytes                                       

Database Buffers          171966464 bytes                                       

Redo Buffers                5124096 bytes                                       

数据库装载完毕。

数据库已经打开。

SQL> show parameter sga_max_size


NAME                                 TYPE        VALUE                          

------------------------------------ ----------- ------------------------------

sga_max_size                         big integer 800M                           


--通过v$sgainfo视图可以查看sga各组成部件的明细及大小

SQL> select * from v$sgainfo;


NAME                                  BYTES RES                                 

-------------------------------- ---------- ---                                 

Fixed SGA Size                      1377812 No                                 

Redo Buffers                        5124096 No                                 

Buffer Cache Size                 171966464 Yes                                 

Shared Pool Size                  524288000 Yes                                 

Large Pool Size                     4194304 Yes                                 

Java Pool Size                      4194304 Yes                                 

Streams Pool Size                         0 Yes                                 

Shared IO Pool Size                       0 Yes                                 

Granule Size                        4194304 No                                 

Maximum SGA Size                  836976640 No                                 

Startup overhead in Shared Pool    58720256 No                                 


NAME                                  BYTES RES                                 

-------------------------------- ---------- ---                                 

Free SGA Memory Available         125829120                                    


已选择12行。SQL> --查看sga组件信息

SQL> show sga


Total System Global Area  836976640 bytes                                       

Fixed Size                  1377812 bytes                                       

Variable Size             658508268 bytes                                       

Database Buffers          171966464 bytes                                       

Redo Buffers                5124096 bytes                                       

SQL> --查询共享池中空闲信息

SQL> select * from V$SGASTAT st where st.POOL='shared pool' and st.NAME='free memory';


POOL         NAME                            BYTES                              

------------ -------------------------- ----------                              

shared pool  free memory                 415369404                              


SQL> --通过v$sga_dynamic_components视图查看sga各部件信息

SQL> select component as 数据对象,granule_size as 颗粒大小 from V$sga_Dynamic_Components;


数据对象                                                           颗粒大小     

---------------------------------------------------------------- ----------     

shared pool                                                         4194304     

large pool                                                          4194304     

java pool                                                           4194304     

streams pool                                                        4194304     

DEFAULT buffer cache                                                4194304     

KEEP buffer cache                                                   4194304     

RECYCLE buffer cache                                                4194304     

DEFAULT 2K buffer cache                                             4194304     

DEFAULT 4K buffer cache                                             4194304     

DEFAULT 8K buffer cache                                             4194304     

DEFAULT 16K buffer cache                                            4194304     


数据对象                                                           颗粒大小     

---------------------------------------------------------------- ----------     

DEFAULT 32K buffer cache                                            4194304     

Shared IO Pool                                                      4194304     

ASM Buffer Cache                                                    4194304     


已选择14行。


SQL> --这里的颗粒大小也是作为实际变更sga组件大小的依据

SQL> --sga中共享池中有共享sql区域,用于存放历史期间执行过的sql语句信息,我们可以通过v$sqlarea视图进行查看


Oracle由实例和数据库组成,实例是由数据一个开辟的共享内存区SGA(System Global Area)和一系列后台进程组成的,其中SGA最主要被划分为共享池(shared pool)、数据缓冲区(db_cache)和日志缓冲区(log buffer)三类。后台进程包括PMON、SMON、LCKn、RECO、CKPT、DBWR、LGWR、ARCH等系列进程。

        数据库是由数据文件、参数文件、日志文件、控制文件、归档日志文件等系列文件组成的,其中归档日志最终可能会被转移到新的存储介质中,用于备份恢复使用。

        PGA(Program Global Area)区,不是共享内存,是私有不共享的。主要有三点作用:第一,保存用户的连接信息,如会话属性、绑定变量等;第二,保存用户权限等重要信息,当用户进程与数据库建立会话时,系统会将这个用户的相关权限查询出来,然后保存在这个会话区内;第三,当发起的指令需要排序的时候,PGA正是这个排序区,如果在内存中可以放下排序的尺寸,就在内存PGA区内完成,如果放不下,超出的部分就在临时表空间中完成排序,也就是在磁盘中完成排序。

        set autotrace on  开始跟踪SQL的执行计划和执行的统计信息
        set linesize 1000
        set timing on        表示跟踪语句执行完成的时间

       2、体系结构原理

         sql查询语句执行过程:用户首次执行该SQL指令时,该指令从磁盘中获取用户连接信息和相关权限信息,并保存在PGA内存里。当用户再次执行时,由于 SESSION之前未被断开重连。连接信息和相关权限信息就可以在PGA内存中直接获取,避免了物理读。
        首次执行该SQL结束后,SGA内存区的共享池里已经保存了该SQL惟一指令HASH值,并保留了语法语意检查检查及执行计划等相关解析 动作的劳动成果,当再次执行该SQL时,由于 该SQL指令的HASH值和共享池里保存的相匹配了,所以之前的硬解析动作就无须再做,不仅跳过了相关语法检查,对于该选取哪种执行计划也无须考虑,直接拿来主义就好了。

        Oracle的后台进程:
                PMON的含义为Processes Monitor,是进程监视器
                SOMON的含义为System Monitor,理解为系统监视器。

          sql更新语句的执行过程

         在回滚空间的相应回滚段事务表上分配事务槽,从而在回滚表空间分配空间。该动作需要记录日志写进日志缓存区。
        在数据缓存区中创建object_id=29的前镜像,前镜像数据也会写进磁盘的数据文件里(回滚表空间的数据文件),这些动作都会记录日志,并将写进日志缓存区,LGWR也在忙着将日志缓存区的数据写入磁盘形成Redo文件。
        此时用户如果执行了提交,日志缓存区立即要记录这个提交信息,然后把回滚段事务标记为非激活INACTIVE状态,表示允许重写。
        如果执行了回滚,Oracle需要从回滚段中将前镜像object_id=29的数据读出来,修改数据缓存区,完成回滚。这个过程 依然要产生日志,要写数据进日志缓存区。
        (用于准备回滚的前镜像数据的生成和普通数据操作差不多,唯一的差别就在于一个是刷新到磁盘的普通文件里,一个是刷新到磁盘的回滚数据文件里)

        数据库的一致读

        查询的结果由查询的那个时刻决定了,数据新的变化是不予理睬的。Oralce的回滚段不仅仅是保证了数据的回退,其实还提供了另外一个功能,保证数据的一致读 。
        一致读的原理:SCN(System Change Number),是一个只会增加不会减少的递增数据,存在于Oracle的最小单位块里,当某块改变时SCN就会递增。
        数据库的回滚段记录事务槽,是用来分配回滚空间的,如果你更新了某块,事务就被写进事务槽里。如果未提交或者回滚,该块数据就存在活动事务,数据库读到此块可以识别到这种情况的存在。
        Oracle在做一致读时,首先是看发起的SCN是否大于当前被查询块的SCN,如果小于,毫无疑问从回滚事务段获取前镜像数据。如果SCN确实大于当前被查询块的SCN,还要确保该块没有活动事务,否则还是要去前镜像查找。

       内存参数相关操作

  (1)查看show parameter sga      show parameter pga
                                  show  parameter shared_pool_size    查看共享池
                                  show parameter db_cache_size         查看数据缓冲池大小
                                  show parameter log_buffer                  查看日志缓冲区大小

        (2)修改数据库的内存参数

        alter system set <parameter_name>=<value> scope=memory|spfile|both [sid=<sid_name>]                                  memory:只改变当前实例运行,重新启动数据库后失效。
                 spfile:只改变spfile的设置,不改变当前实例运行,重新启动数据库后生效。
                 both:同时改变实例及spfile,当前更改立即生效,重新启动数据库仍然有效。

                需要注意的是:scop=XXX可以不写,默认为scope=both,此外log_buffer等参数必须重启才会生            效,因此alter system set log_buffer=15000000 scope=memory或者是scope=both就会报错,只支持
         alter system set log_buffer=15000000 scop=spfile,然后重启后生效。

        (3)查看Oracle归档进程

                ps -ef| grep arc
                登录数据库以后输入 archive log list命令,Database log mode展示数据库的归档模式。更改数据            的归档模式比较麻烦,需要重启数据库,将数据库置于mount状态后,输入alter database                              archivelog(反之则为alter database noarchivelog),然后再开启数据库alter database open,才可            以将数据库更改为归档模式。
        (4)启停的体会
                参数文件及控制文件和数据库的启动与关闭是息息相关的,数据库的启动可以分为三个阶段,分别          是nomount、mount和open。startup nomount、startup mount和alter database open三步分别启动。
                startup nomount阶段,Oracle必须读取到数据库的参数文件(PFILE或者SPFILE),如果读不到该          参数文件,数据库根本无法nomount成功!如果读到参数文件,将完成一个非常重要的事,就是根据参          数文件上的内存分配策略分配相应的内存区域,并启动相应的后台进程,换而言之,就是创建了实例的          instance。 show parameter spfile

                startup mount阶段,Oracle继续根据参数文件上描述的控制文件的名称及位置,去查找控制文件,          一旦查找到立即锁定该控制文件。控制文件里记录了数据库中数据文件、日志文件、检查点信息等非常          非常重要的信息,所以Oracle成功锁定控制文件,就为后续读取操作这些文件打下了基础,锁定控制文          件成功就表示数据库mount成功,为实例和数据库之间桥梁的搭建打下了基础。
                alter database open阶段,根据控制文件记录的信息,定位到数据库文件、日志文件等,从而正式          开通了实例和数据库之间的桥梁。

        (5)文件的体会
                 show parameter spfile;                 参数文件位置
                 show parameter control               控制文件位置
                 select file_name from dba_data_files;   数据文件位置
                 select group#,member from v$logfile;    日志文件位置
                 show parameter recovery                      归档文件位置
                 show parameter dump                           告警日志文件

                 lsnrctl status,查看监听的状态命令
                 lsnrctl stop,关闭监听的命令
                 lsnrctl start,开启监听的命令

         3、体系学习让SQL性能提升千倍

共享池中缓存下来的SQL语句以及HASH出来的唯一值,都可以在v$sql中对应的SQL_TEXT和SQL_ID字段中查询到,而解析的次数和执行的次数可以从PARSE_CALLS和EXECUTIONS字段中获取。

        (1)substitution variables(替换变量)
        use substitution variables to supplement the following: where conditions、order by clauses、column expressions、table names、entire select statements
        select order_no from t_order where order_no=&order_no

        (2)绑定变量优化 批量提交

二、逻辑体系

        数据库(DATABASE)由若干表空间(TABLESPACE)组成,表空间(TABLESPACE)由若干段(SEGMENT)组成,段(SEGMENT)由若干区(EXTENT)组成,区(EXTENT)又是由Oracle的最小单元块(BLOCK)组成。块、区、段、表空间。

        1、数据块(数据块头、表目录区、行目录、可用空间、行数据区域)
        数据块头(包含了此数据块的概要信息,例如 块地址 及此数据块所属的段(segment)的类型(比如到底是表还是索引);表目录区,只要有一行数据插入到数据库块中,那该行数据所在的表的信息将被存储到这个区域;行目录,存放你插入的行的地址;可用空间区;行数据区域,存储具体的行的信息或者索引的信息,这部分占用了数据块绝大部分的空间。

       2、段、区
        EXTENT是Oracle数据库分配空间的最小单位,请注意分配这两个字眼。
在Oracle数据库中,只要segment创建成功,数据库就一定为其分配了包含若干个数据块(data block)
的初始数据扩展(initial extent);接下来T表(也就是segment T)中开始插入数据,很快初始数据扩展中的数据块都装满了,而且又有新数据插入需要空间,此时Oracle会自动为这个段分配一个新增数据扩展(incremental extent),这个新增数据是一个段中己有有数据扩展之后分配的后续数据扩展,容量大于或等于之前的数据扩展。

       3、表空间(系统表空间、临时表空间、回滚表空间、数据表空间)

        dba_tablespaces描述了数据库中所有表空间的信息

        --查看block尺寸
        show parameter db_block_size      
        select block_size from dba_tablespaces where tablespace_name='SYSTEM'

       --查看不同表空间的相关信息
        select file_name,tablespace_name,autoextensible,bytes from dba_data_files
        select file_name,bytes,autoextensible from dba_temp_files
        select sum(bytes/1024/1024 from dba_free_space where  tablespace_name='';
show parameter undo
select tablespace_name,sum(bytes)/1024/1024 from dba_temp_files
        select DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE from dba_uses where username=''
       --切换所有用户到指定临时表空间
        alter database default temporary tablespace temp_ljb

        临时表空间的应用

                Oracle可以为每个用户指定不同的临时表空间,每个临时表空间的数据文件都在磁盘的不同位置            上,这样可以有效地避免IO竞争。

                在Oracle 10以后推出的临时表空间组,可以做到为同一用户的不同SESSION设置不同的临时表空           间,这可以说在缓解IO竞争方面再次迈出了大大的一步。
                create temporary tablespace temp1 '    '  size 100M tablespace group temp_grp1;
                create temporary tablespace temp2 '    '  size 100M tablespace group temp_grp1;

                --把临时表空间移到TMP_GRP1组里
                alter tablespace temp_ljb tablespace group temp_grp1
                --把ljb用户的默认临时表空间TEMP_LJB更改为临时表空间组temp_grp1
                alter user LJB temporary tablesapce temp_grp1
                all_tables
                select username,session_num,tablespace from v$sort_usage

         4、PCTFREE与性能

行迁移:当一个行上的更新操作(原来的数据存在且没有减少)导致当前的数据不能在容纳在当前块,我们需要进行行迁移。一个行迁移意味着整行数据将会移动,仅仅保留的是一个转移地址。因此整行数据都被移动,原始的数据块上仅仅保留的是指向新块的一个地址信息。

       其实消除行迁移的一个简单方法,就是数据重建。
        发现表是否存在迁迁移的方法:
@?/rdbms/admin/utlchain.sql     --建立表
        analyze table T_ORDER list chained rows into chained_rows
        select count(*) from chained_rows where table_name='T_ORDER'

三、表的设计成就英雄

        select a.name,b.value from v$statname a,v$mystat b where a.statistic#=b.statistic# and                                                                                                                                           a.name='redo size'
       产生日志的大小:利用v$statname和v$mystat两个动态性能视图来跟踪当前SESSION操作产生的日志量,使用方法简单:首次先执行该脚本,查看日志大小,随即执行更新语句,再执行该脚本返回的日志大小,两者相减,就是此次产生日志的大小。
   

        1、delete与truncate
        delete删除并不能释放空间,虽然delete将很多块的记录删除了,但是空块依然保留,Oracle在查询时依然会去查询这此空块。而truncate是一种释放高水平位的动作,这些空块被回收,空间也就释放了。
        不过truncate显然不能代替delete,因为truncate是一种DDL操作而非DML操作,truncate后面是不能带条件的,truncate table t where...是不允许的。但是如果这些whete条件能形成有效的分区,Oracle是支持在分区表中做truncate分区的,命令大致为alter table t truncate partition '分区名',如果whete条件就是分区条件,那等同于换角度实现了truncate table where ...的功能。
        2、全局临时表
        从数据安全性来看,对表记录的操作写日志是不可避免的,否则备份恢复就无从谈起了,只是现实中我们真的有一部分应用对表的某些操作是不需要恢复的,比如运算过程中临时处理的中间结果集,这时我们就可以考虑用全局临时表来实现。        
       全局临时表分为两种类型,一种是基于会话的全局临时表(commit preserve rows),一种是基于事务的全局临时表(on commit delete rows)。        
        create global temporary table T_TMP_session on commit preserve rows as                                                                                     select * from dba_objects  where 1=2;                    
        create global temporary table t_tmp_transaction on commit delete rows as                                                                                      select * from dba_objects   where 1=2;                                                                      无论插入更新还是删除,操作普通表产生的日志都比全局临时表要多。

四、索引天下妙不可言

       谁能深刻地理解和掌握索引的知识,谁就能在数据库相关工作中发挥巨大的作用。

五、宝典、规范让你少做事
        --查看具体SQL占用了temp表空间
         SELECT                        
          SQL.SQL_ID,   T.BLOCKS*16/1024/1024,    S.USERNAME,   S.SCHEMANAME,
         T.TABLESPACE,  T.SEGTYPE,     T.EXTENTS,    S.PROGRAM,
         S.OSUSER,    S.TERMINAL,   S.SID,      S.SERIAL#,SQL.SQL_TEXT         
        FROM V$SORT_USAGE T,V$SESSION S,V$SQL SQL   WHERE T.SESSION_ADDR=S.SADDR AND         T.SQLAD   DR=SQL.ADDRESS AND                T.SQLHASH=SQL.HASH_VALUE;         

作者: lnzhanghao    时间: 2017-9-9 02:59
服务好教程很全面我想要的都有下次还来你家买
作者: w8899    时间: 2017-9-11 14:31
态度不错。
作者: ekmci    时间: 2017-9-15 18:40
老板很认真!很负责!
作者: dccmdy    时间: 2017-9-17 02:54
体贴入微,宝贝和描述一致,质量好漂亮,很喜欢‘大爱超好、超赞!
作者: brt02    时间: 2017-9-17 08:15
错而且装修的也很好期待下一次的合作
作者: shenyeben    时间: 2017-9-18 12:10
,非常迅速!
作者: aluoting    时间: 2017-9-20 03:30
好人品,生意兴隆,都是5分
作者: pxynmi018    时间: 2017-9-21 21:51
没看完~~~~~~先顶,好同志
作者: shenyeben    时间: 2017-9-22 02:56
值!卖家服务相当棒!
作者: huanyili998    时间: 2017-9-22 13:41
来的,挺满意的,客服也比较也耐心~回头会介绍人过来的
作者: xoxo110    时间: 2017-9-24 06:45
笨蛋,1号,19号,7号,077号,5号解决问题好
作者: niyaoz1    时间: 2017-9-24 07:41
非常好,与卖家描述的完全一致,非常满意卖家的服务太棒了
作者: iiiiik    时间: 2017-9-24 18:17
的资料,谢谢店主
作者: c19900420    时间: 2017-9-24 18:45
有用上。不过习惯好评
作者: zxj333    时间: 2017-9-26 15:30
装修,没想到留着第一次买的这么舒心和放心。店长人超好的,有一次我咨询他他有事没在。还特意打电话给我。这么有心的店长太棒了。N个赞??????……必须好评
作者: ggt567    时间: 2017-9-28 14:28
,整体满意,好评
作者: mm5216299    时间: 2017-9-30 04:47
意,做了好几个店铺了,服务真心的不错,客服真的很热情,装修以后就是你家了!
作者: xbaobeit    时间: 2017-9-30 04:48
,太感激卖家了,不光帮我设计好图,还像一个朋友一样的帮我!
作者: dfgdgdfgdf    时间: 2017-9-30 05:06
下载中,希望有用。教程还没看一块多的东西店家收集整理也不容易好评吧
作者: meili1    时间: 2017-10-2 03:12
效率,好评!!!!
作者: iiiiik    时间: 2017-10-2 05:06
很给力,好评!!!
作者: wbd902    时间: 2017-10-2 06:41
真的很好用,我这边已经用起来了,目前不少客户从我们公众平台下单,再试用一段时间,打算推送给其他生意上的朋友
作者: weipinzongmeng    时间: 2017-10-2 09:24
,而且修改网站程序很快很熟悉,是个技术高手,值得推荐。
作者: xbaobeit    时间: 2017-10-5 07:23
7一直很耐心解决问题。
作者: 694012770    时间: 2017-10-5 19:30
沙发!沙发!
作者: 我爱苏苏    时间: 2017-10-7 02:57
家服务态度,服务质量都是非常好的,效率也高。5??星好评
作者: xoxo110    时间: 2017-10-7 14:08
平台还不错哟,而且技术人员态度很好,很多方面都站在客户的方面着想。非常愉快的合作。
作者: niubt    时间: 2017-10-8 02:37
好了,容易上手,有不清楚的客服回答也很及时,功能很强大,很好用,不错,比我之前试用的那家好多了




欢迎光临 信息发布软件,b2b软件,广告发布软件 (http://www.postbbs.com/) Powered by Discuz! X3.2