ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

【Oracle-OCP】第六次课

2019-06-15 21:50:20  阅读:252  来源: 互联网

标签:target integer show SQL memory Oracle OCP 第六次 parameter


Category

数据库结构

  • Instance:数据库运行的内存部分,用于数据高效查询
  • File:数据操作结束后,落地,存入的本地数据库文件(有冗余机制)
  • 完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例。
    • 数据库是一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等);
    • Oracle数据库实例则是一组Oracle后台进程/线程以及在服务器分配的共享内存区。

在这里插入图片描述

PGA

PGA概念

1. 什么是PGA?

PGA:所有访问的process的使用内存的上限(每条访问process都会占用一定量的PGA内存量)。他是一个操作系统进程或者线程专用的内存(Linux-进程,Windows-线程)
不允许系统的其他进程或者线程访问,是一个特定于进程的内存

  • Listener之前的是user process
  • Listener之后的是server process
    在这里插入图片描述
    在这里插入图片描述

2. PGA中的P有三种含义

  • Process
  • Program
  • Private

3. PGA可容许多少个session访问

  1. show parameter process
    process表示有150个进程能连接这个server
  2. 设置这个process的命令
    alter system set process=1000
    Scope = memory,Spfile,Both
    在这里插入图片描述
    在这里插入图片描述
  3. 对一个Server来讲重要的几项内容
    内存,硬盘,IO,CPU,网络资源
    Processes多的情况下,占用CPU资源
    Processes为150的情况下,可容许连接的session太少了,高并发的情况下,占用CPU资源,内存也会马上被吃干净
    无论是OLTP还是OLAP,这个参数都需要更改

4. PGA内存比例

分给SGA的内存:server总内存数0.880%  服务器0.8比例的内存分给数据库服务,数据库80%的内存分给SGA

5. PGA三个最重要的功能

  1. 为排序设置合理的排序区大小(c:order by/group by/distinct/union)(90%作用于排序)
  2. 会话区保存着用户的权限等重要信息(Hash)
  3. 堆栈区保存变量信息 (Bitmap merge :索引(index)/管理(block management))

PGA排序排不下的话,只能用文件来排序,temp临时文件(temp就是物理上的PGA),temp文件在哪个路径下?

>Others people
cd  /u01/app/oracle/oradata/db01
下有temp文件 temp01.dbf

>Mine
[oracle@db01 orcl]$ pwd
/opt/oracle/oradata/orcl
[oracle@db01 orcl]$ ls
control01.ctl  redo01.log  redo03.log    system01.dbf  undotbs01.dbf
example01.dbf  redo02.log  sysaux01.dbf  temp01.dbf    users01.dbf

参数总结

  1. show parameter sga
  2. show parameter pga
  3. show parameter memory
  4. show parameter area

1. show parameter sga

scott@ORCL>show parameter sga

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
lock_sga                             boolean     FALSE
pre_page_sga                         boolean     FALSE
sga_max_size                         big integer 392M
sga_target                           big integer 0

2. show parameter pga

scott@ORCL>show parameter pga

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target                 big integer 0

3. show parameter memory

scott@ORCL>show parameter memory

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address             integer     0
memory_max_target                    big integer 392M
memory_target                        big integer 392M
shared_memory_address                integer     0

4. show parameter area

scott@ORCL>show parameter area

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
bitmap_merge_area_size               integer     1048576
create_bitmap_area_size              integer     8388608
hash_area_size                       integer     131072
sort_area_retained_size              integer     0
sort_area_size                       integer     65536
workarea_size_policy                 string      AUTO
scott@ORCL>

关于_AREA_SIZE有以下几点需要记住
SORT_AREA_SIZE: 用于排序的内存大小
HASH_AREA_SIZE: 用于存放HASH表的内存大小
BITMAP_MERGE_AREA_SIZE: 用于位图合并的内存大小

  • 以上的参数控制了SORT、HASH和BITMAP MERGE操作所用的最大内存量
  • 一个查询可能有多个操作,这些操作可能都要使用这些内存,这样会创建多个排序或者HASH区。
    所以,如果把SORT_AREA_SIZE设置为10M,session实际上可能使用10M、100M或者更多。
    因为以上的限制并非是对于session的,只是对于一个操作的限制。
    比如,一个查询可能会有多个排序操作。
  • 上述的参数都是根据需要来分配的。如果我们将SORT_AREA_SIZE设置为1G,并不是说要分1GB的内存,
    而是说Oracle进程为一个排序操作最多分配1GB内存

关于SORT_AREA_RETAINED_SIZE
SORT_AREA_RETAINED_SIZE: 排序完成后用于保存数据的内存总量

  • 如果SORT_AREA_SIZE是512KB,SORT_AREA_RETAINED_SIZE是256KB,
    那么服务器进程最初处理查询会使用512KB进行排序,当排序结束后,排序区会收缩值256KB,
    剩下的256KB内存中放不下的已经排序的数据会写入临时表空间中
  • 通常情况下,我们将SORT_AREA_RETAINED设置为0,代表SORT_RETAINED_AREA_SIZE与SORT_AREA_SIZE相同

【备注】

  • 当PGA不足以支撑排序的时候,Oracle使用临时文件/DATA/oradata/orcl/temp01.dbf来做排序(物理PGA),此文件为一个“循环写”的文件。一般来说temp文件的size需要设置为你数据量的2-3倍。
  • SGA-target/PGA-target/Memory-target
    11g版本之前,再分配process内存时均建议使用SGA target和PGA target

关于BITMAP_MERGE_AREA_SIZE

itmap_merge_area_size – 位图合并
bitmap在oracle负载两件事:索引 和 块的管理(指定哪个块可以被操作,哪个不可以)
即席查询:多个filter条件加在一起之后组成的一个高过滤度的查询
位图:
在这里插入图片描述

5. parameter of after startup

idle>startup
ORACLE instance started.

Total System Global Area  409194496 bytes
Fixed Size                  2213856 bytes
Variable Size             310380576 bytes
Database Buffers           92274688 bytes
Redo Buffers                4325376 bytes
Database mounted.
Database opened.

6. show parameter db_block

如果要获得一个实例当前的参数值,可以查询V$PARAMETER视图。也可以通过show parameter命令查询。

SQL> show parameter db_block
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_block_buffers                     integer     0
db_block_checking                    string      FALSE
db_block_checksum                    string      TYPICAL
db_block_size                        integer     8192

=====OR======

SQL> select name, value from v$parameter where name like '%db_block%';
NAME                           VALUE
------------------------------ ------------------------------
db_block_buffers               0
db_block_checksum              TYPICAL
db_block_size                  8192
db_block_checking              FALSE

Oracle 11g修改MEMORY_TARGET

默认情况下,Oracle 11g是使用AMM(Automatic Memory Management,自动内存管理)的。我们在安装数据库过程中,指定Oracle使用内存的百分比,这个取值就作为MEMORY_TARGET和MEMORY_MAX_TARGET的初始取值使用。如果这两个参数设置为非零取值,那么Oracle就是采用AMM管理策略的。

下面演示一下如何修改MEMORY_TARGET的值。



1.测试环境

我们在Oracle 11g中进行操作。

SQL>

SQL> select * from v$version;

BANNER

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

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production

PL/SQL Release 11.2.0.3.0 - Production

CORE 11.2.0.3.0 Production

TNS for Linux: Version 11.2.0.3.0 - Production

NLSRTL Version 11.2.0.3.0 - Production

SQL>

2.查看MEMORY_TARGET和相关参数值

我们通过show parameter来查看初始化参数值,其他相关的参数包括MEMORY_MAX_TARGET、sga_max_size、sga_target、pga_aggregate_target等。

SQL>

SQL> show parameter memory

NAME TYPE VALUE

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

hi_shared_memory_address integer 0

memory_max_target big integer 500M

memory_target big integer 400M

shared_memory_address integer 0

SQL>

SQL> show parameter sga

NAME TYPE VALUE

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

lock_sga boolean FALSE

pre_page_sga boolean FALSE

sga_max_size big integer 500M

sga_target big integer 0

SQL>

SQL> show parameter pga

NAME TYPE VALUE

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

pga_aggregate_target big integer 0

SQL>

我们看到,数据库的MEMORY_MAX_TARGET为500M,MEMORY_TARGET为400M。

3.修改MEMORY_TARGET

    我们通过alter system语句来修改MEMORY_TARGET,需要注意的是,MEMORY_TARGET是个动态参数,而MEMORY_MAX_TARGET是个静态参数。

    这样一来,当修改值<=MEMORY_MAX_TARGET时,我们可以随意修改MEMORY_TARGET值;但是,当修改值>MEMORY_MAX_TARGET时,我们必须首先修改MEMORY_MAX_TARGET参数值,重启数据库使静态参数生效后再去修改MEMORY_TARGET值,否则,数据库会报错。

3.1修改值<=MEMORY_MAX_TARGET
我们尝试将MEMORY_TARGET参数值由400M修改为500M。

SQL>

SQL> alter system set memory_target=500m;

System altered.

SQL>

SQL>

SQL> show parameter memory

NAME TYPE VALUE

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

hi_shared_memory_address integer 0

memory_max_target big integer 500M

memory_target big integer 500M

shared_memory_address integer 0

SQL>

3.2修改值>MEMORY_MAX_TARGET
    
我们尝试将MEMORY_TARGET参数值由500M修改为700M。由于修改值>MEMORY_MAX_TARGET,数据库会报错;我们必须首先修改MEMORY_MAX_TARGET参数值,重启数据库使静态参数生效后再去修改MEMORY_TARGET值。

SQL>

SQL> alter system set memory_target=600m;

alter system set memory_target=600m

*

ERROR at line 1:

ORA-02097: parameter cannot be modified because specified value is invalid

ORA-00837: Specified value of MEMORY_TARGET greater than MEMORY_MAX_TARGET

SQL>

SQL> alter system set memory_max_target=800m scope=spfile;

System altered.

SQL> shu immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL>

SQL> startup

ORACLE instance started.

Total System Global Area 732352512 bytes

Fixed Size 1347456 bytes

Variable Size 603979904 bytes

Database Buffers 121634816 bytes

Redo Buffers 5390336 bytes

Database mounted.

Database opened.

SQL>

SQL> show parameter memory

NAME TYPE VALUE

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

hi_shared_memory_address integer 0

memory_max_target big integer 700M

memory_target big integer 500M

shared_memory_address integer 0

SQL>

SQL> alter system set memory_target=600m;

System altered.

SQL> show parameter memory

NAME TYPE VALUE

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

hi_shared_memory_address integer 0

memory_max_target big integer 700M

memory_target big integer 600M

shared_memory_address integer 0

SQL>

SQL>

数据库文件

文件的分类

  1. data file :GB级别 10GB 不可读
  2. redo log :default 50MB 实际至少要500MB / archive log 不可读
  3. control file (记录data file和redo log的信息) :10MB~100MB 不可读
  4. parameter file(pga sga参数大小) :可读,oracle把它翻译成一个二进制不可读的文件
  5. trace file (跟踪文件) / alert (告警日志):告警日志再追踪到trace file 可读
  6. password file :不可读
    在这里插入图片描述

Parameter file

1.数据库的起停

  • Close状态:没有使用内存
  • Nomount状态:读取parameter中的内存参数,来查看需要创建多大的内存
  • Mount状态:去control file中读取data file和redo file的“地址”信息,并挂载这两个文件
  • Open状态:使用data file + redo log
    在这里插入图片描述

2.parameter file的目的是生成一个memory

3.参数文件

  • oracle的参数文件通常称为初始文件(init file)。
  • 在以往的版本中,其命名为init<ORACLE_SID>.ora。
  • 在Oracle 9i之后,引入了新的方法,服务器参数文件(server parameter file),简称SPFILE
  • SPFILE的默认名为spfile<ORACLE_SID>.ora

3.parameter file的位置

  • /opt/oracle/product/11.2.0/dbhome_1/dbs
[oracle@db01 /]$ cd /opt/oracle/product/11.2.0/dbhome_1
[oracle@db01 dbhome_1]$ cd dbs
[oracle@db01 dbs]$ ll
total 28
-rw-rw----. 1 oracle oinstall 1544 Jun  6 20:37 hc_orcl.dat
-rw-r--r--. 1 oracle oinstall 2851 May 15  2009 init.ora
-rw-r--r--. 1 oracle oinstall  915 Jun  2 16:16 initorcl.ora
-rw-r-----. 1 oracle oinstall   24 May 18 17:15 lkORCL
-rw-r-----. 1 oracle oinstall 1536 May 19 11:40 orapworcl
-rw-r-----. 1 oracle oinstall 2560 Jun  6 20:37 spfileorcl.ora
-rw-r-----. 1 oracle oinstall 2560 Jun  2 13:40 spfileorcl.ora.bk

==================
cat init.ora
cat spfileorcl.ora

4.参数文件解读

  1. init.ora 数据库创建时默认创建的模板,初始化文件,不一定要放到服务器上
  2. init<sid>.ora 系统配置时生成的文件 可读的 (可以放在pc上也可以放在服务器上)
  3. spfile<sid>.ora 系统配置时生成的文件(server-parameter文件),不可读文件,oracle默认使用这个文件,一定要放到服务器上,可用这种方式查看:# strings spfileorcl.ora
  • 电脑上默认只有init.ora, spfile.ora
  • 启动后,系统默认使用spfile
  • 如果想使用init.ora file的话,可以 startup pfile=dbs/initorcl1.ora

如何生成init.ora文件? Init orcl.ora

在这里插入图片描述在这里插入图片描述
给spfile改名
在这里插入图片描述
创建spfile,报错了
在这里插入图片描述
在这里插入图片描述
当你使用pfile的时候才能创建spfile
当你使用spfile的时候才能创建pfile
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
现在用的是pfile,无法往pfile里写这个值,原因是:pfile是放在client上的一个文件
想改服务器上的参数,但是最后把笔记本里的东西改了,这是不对的,所以没有办法更改
在这里插入图片描述

标签:target,integer,show,SQL,memory,Oracle,OCP,第六次,parameter
来源: https://blog.csdn.net/weixin_42161670/article/details/90968787

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有