重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
在User Schema 上 用人工指定方式指定 Tmp 的tablespace 换句话说要人工定义一个tmp 的tablespace 给user schema ——为colm v这个user单独开一个临时表空间 个人认为调整之后效果不会有很明显的变化临时表空间的作用是当sql语句中出现order by group by(也就是需要排序的时候) 如果排序的数据比较少 就会在内存中排序 排序的数据量很大时 oracle会把排序的任务放在临时表空间中完成 内存中排序(逻辑排序)比在磁盘上排序(物理排序)理论上快 倍!所以临时表空间很大并不是一件好事情 说明sql中存在大量排序的动作 sql语句需要优化! 所以深圳那里需要看一下临时表空间的大小!
成都创新互联服务项目包括雁山网站建设、雁山网站制作、雁山网页制作以及雁山网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,雁山网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到雁山省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
当然johanna的意见也会有一定的作用 临时表空间独立出来之后 就不会和sys system等一系列oracle 内部使用临时表空间的操作产生资源竞争!
请检查SQL 使用到的where 条件是否均有定index 除此以外 检查使用到的where 条件最好以index 之顺序来写——这部分比较复杂 也是性能最关键的地方 几乎所有的oracle专家都认为 %以上的性能调整都和sql语句优化有关 需要check所有的sql语句where后面的条件是否有用到index的必要 工程量比较浩大!需要一个个小心谨慎的check!
把index 做一次 dbms_stats dbms stats 是oracle内部的api 可以对index table进行分析 收集统计信息 这样oracle优化器就会有一个最佳的选择 使性能达到最佳方法如下
SQLselect tt table_name tt num_rows tt blocks tt empty_blocks tt avg_row_len from dba_tables tt where tt owner= COLMTEST ; SQL select ttt index_name ttt num_rows ttt distinct_keys ttt avg_leaf_blocks_per_key ttt clustering_factor from dba_indexes ttt where ttt owner= COLMTEST ;
执行上述两条命令之后会发现除了table_name和index_name 其余列的统计信息都是不完全的
SQLexecute dbms_stats gather_schema_stats(ownname = COLMTEST cascade=true)
执行完dbms_stats 再调用上述两句语句 会发现所有的列基本上都已经被填充!
PS 执行统计比较慢 相当于所有table index都扫描一遍的时间 COLMTEST 改一下另外 对单个表执行统计分析的语句如下
EXECUTE dbms_stats gather_table_stats (ownname= citic tabname= col_cust_id estimate_percent= cascade=true)
做过以上处理之后 再看情形 再依情况放参数
——参数暂时不用调整!
建议做一个STATSPACK通过Statspack我们可以很容易的确定Oracle数据库的瓶颈所在 记录数据库性能状态 迅速了解数据库运行状况
方法如下
安装Statspack安装Statspack拥有SYSDBA(connect / as sysdba)权限的用户登陆 需要在本地安装或者通过telnet登陆到服务器 ——客户端登录不可以
必要条件 先创建名称为perfstat的表空间 至少 M
在那台oracle数据库上用colmv 登录SQL*PLUS 然后输入SQL connect sys/sys@(你们那里的sid) as sysdba SQL alter system set timed_statistics = true System altered——使用statspack收集统计信息时建议将该值设置为 TRUE 否则收集的统计信息大约只能起到 %的作用
SQL @C \oracle\ora \rdbms\admin\spcreate sql 输入 perfstat_password 的值 perfstat输入default_tablespace的值 perfstat输入temporary_tablespace 的值 temp
NOTE SPCPKG plete Please check spcpkg lis for any errors ——需要出现上述语句才算成功 否则请查看 lis文件并执行 进行重建SQL @C \oracle\ora \rdbms\admin\spdrop sql SQL @C \oracle\ora \rdbms\admin\spcreate sql
查看文件夹会产生三个文件C \oracle\ora \bin spcpkg lis spctab lis spcusr lis
——从下面开始都可以在客户端SQL_PLUS进行操作 手动执行STATSPACK收集统计信息SQL show user USER为 PERFSTAT SQL execute statspack snap ——快照
然后需要经过 个小时(跑批需要包含在里面) 再执行SQL execute statspack snap ——快照
最后生成STATSPACK调整报告
SQL @C:\oracle\ora \rdbms\admin\spreport sql;
Current Instance ~~~~~~~~~~~~~~~~ DB Id DB Name Inst Num Instance COLM colm Instances in this Statspack schema ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DB Id Inst Num DB Name Instance Host COLM colm STEVENHUANG Using for database Id Using for instance number Completed Snapshots Snap Snap Instance DB Name Id Snap Started Level Comment colm COLM 月 : 月 : Specify the Begin and End Snapshot Ids ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 输入 begin_snap 的值: 输入 end_snap 的值: End Snapshot Id specified: Specify the Report Name ~~~~~~~~~~~~~~~~~~~~~~~ The default report file name is sp_ _ To use this name press return to continue otherwise enter an alternative 输入 report_name 的值: report txt End of Report
查看产生的report 文档C \oracle\ora \bin\report txt
lishixinzhi/Article/program/Oracle/201311/17298
问 oracle进程内存占用一直增加 达到 G左右的时候就会连接失败 监听进程死掉 或者CPU达到 % 如何解决?
Peak Wong
Oracle性能调优一直是一个很有意思的命题 增强硬件配置是一种方法 但我们平时遇到的最多的问题是如何在没办法增强硬件配置的情况下 将数据库性能优化 这里给出一个思维流程 希望对各位有益
PATCH是否都打了 ORACLE系统内存参数是否太大 超出OS的MEMORY
查查是不是程序没有关闭连接导致连接数不断上升引起的 你是什么操作系统?
服务器都作了什么设置呢?比如sga的分配 是什么情况呢?
要进行调优 及参数设置
启动 Enterprise Management Console 以SYS/**** as SYSDBA身份进入系统
ORACLE i调优只涉及如下几个参数
a) processes = ;
b) open_links = ;
c)open_cursors = ;
d)sessions= ;
e) parallel_automatic_tuning=true
f) undo_retention=
g) undo_management=AUTO
请确保在 SPFILE 中保存 在Oracle i缺省的启动参数是spfile 不要用pfile文件启动数据库
物理内存大于 G以上的通用设置:
启动 Enterprise Management Console 以SYS/**** as SYSDBA身份进入系统
配置SGA和PGA大小方法如下
物理内存大于 G以上的通用设置
中文名 参数名 参数值 设置方法
SGA的最大大小 Sga_max_size M 例程 配置 内存项卡
日志缓冲区 Log_buffer 例程 配置 一般信息选项卡 所有初始化参数
大型池 Large_pool_size M 例程 配置 内存项卡
Java池 Java_pool_size M 例程 配置 一般信息选项卡 所有初始化参数
共享池 Shared_pool_size M 例程 配置 内存项卡
数据缓冲区高速缓存 Db_cache_size M 例程 配置 内存项卡
Keep池 Db_keep_cache_size M 例程 配置 一般信息选项卡 所有初始化参数
Pga自动管理 workarea_size_policy AUTO 例程 配置 一般信息选项卡 所有初始化参数
总计pga目标 pga_aggregate_target M 例程 配置 内存项卡
说明:
此内存设置不包含在数据库服务器上的其它应用程序的物理内存的大小 如果有其它的应用程序 可以参照下面的计算: sga_max_size+ pga_aggregate_target+应用程序物理内存+OS物理内存 = 系统物理内存* % 如果服务器上只有Oracle服务器 在 G以上物理内存的服务器上Oracle内存参数都可以参照上面的设置 如果服务器上有其它的应用 而服务器总的物理内存大于 请自己计算后再选择的方案
sga_max_size+ pga_aggregate_target = G 在 bit操作系统上有这个限制
lishixinzhi/Article/program/Oracle/201311/17386
目的
希望通过整理此文档 使大家对 oracle 内存结构有一个全面的了解 并在实际的工作中灵活应用 使 oracle 的内存性能达到最优配置 提升应用程序反应速度 并进行合理的内存使用
实例结构
oracle 实例 = 内存结构 + 进程结构
oracle 实例启动的过程 其实就是 oracle 内存参数设置的值加载到内存中 并启动相应的后台进程进行相关的服务过程
进程结构
oracle 进程 = 服务器进程 + 用户进程
几个重要的后台进程
DBWR 数据写入进程
LGWR: 日志写入进程
ARCH: 归档进程
CKPT: 检查点进程 ( 日志切换 上一个检查点之后 又超过了指定的时间 预定义的日志块写入磁盘 例程关闭 DBA 强制产生 表空间 offline)
LCKn ( ) 封锁进程
Dnnn: 调度进程
内存结构 ( 我们重点讲解的 )
内存结构 =SGA (系统全局区) +PGA (程序全局区)
SGA 是用于存储数据库信息的内存区 该信息为数据库进程所共享 它包含 Oracle 服务器的数据和控制信息 它是在 Oracle 服务器所驻留的计算机的实际内存中得以分配 如果实际内存不够再往虚拟内存中写
我们重点就是设置 SGA 理论上 SGA 可占 OS 系统物理内存的 / —— /
原则 SGA+PGA+OS 使用内存 总物理 RAM
SGA=((db_block_buffers*blocksize)+(shared_pool_size+large_pool_size+java_pool_size+log_buffers)+ MB
SGA 系统全局区 ( 包括以下五个区 )
A 数据缓冲区 : ( db_block_buffers )存储由磁盘数据文件读入的数据
大小 : db_block_buffers*db_block_size
Oracle i 设置数据缓冲区为 Db_cache_size
原则 SGA 中主要设置对象 一般为可用内存 %
B 共享池 : ( shared_pool_size ) : 数据字典 sql 缓冲 pl/sql 语法分析 加大可提速度
原则 SGA 中主要设置对象 一般为可用内存 %
C 日志缓冲区 : ( log_buffer )存储数据库的修改信息
原则 K M 之间 不应该太大
D JAVA 池( Java_pool_size )主要用于 JAVA 语言的开发
原则 若不使用 java 原则上不能小于 M 给 M 通常就够了
E 大池( Large_pool_size ) 如果不设置 MTS 主要用于数据库备份恢复管理器 RMAN
原则 若不使用 MTS M 之间 不应该太大
SGA= db_block_buffers*db_block_size+ shared_pool_size+ log_buffer+Java_pool+size+large_pool_size
原则 达到可用内存的 % 就可以了
PGA 程序全局区
PGA 包含单个服务器进程或单个后台进程的数据和控制信息 与几个进程共享的 SGA 正相反 PGA 是只被一个进程使用的区域 PGA 在创建进程时分配在终止进程时回收
A Sort_area_size 用于排序所占内存
B Hash_area_size 用于散列联接 位图索引
这两个参数在非 MTS 下都是属于 PGA 不属于 SGA 是为每个 session 单独分配的 在我们的服务器上除了 OS + SGA 一定要考虑这两部分
原则 OS 使用内存 +SGA+ 并发执行进程数 *(sort_area_size+hash_ara_size+ M) * 总内存
实例配置
一 物理内存多大
二 操作系统估计需要使用多少内存
三 数据库是使用文件系统还是裸设备
四 有多少并发连接
五 应用是 OLTP 类型还是 OLAP 类型
基本掌握的原则是 db_block_buffer 通常可以尽可能的大 shared_pool_size 要适度 log_buffer 通常大到几百 K 到 M 就差不多了
A 如果 M RAM 单个 CPU db_block_size 是 bytes
SGA= * M= M 左右
建议 shared_pool_size = M db_block_buffer* db_block_size = M
具体 : shared_pool_size = # M
db_block_buffer= # M
log_buffer = # k ( K*CPU 个数 )
large_pool_size= # M
java_pool_size = # M
sort_area_size = # k ( k M)
sort_area_retained_size = # MTS 时 sort_area_retained_size = sort_area_size
B 如果 G RAM 单个 CPU db_block_size 是 bytes
SGA= * M= M 左右
建议 shared_pool_size = M db_block_buffer* db_block_size = M
具体 : shared_pool_size= # M
db_block_buffer= # M
log_buffer = # k ( K*CPU 个数 )
large_pool_size= # M
java_pool_size = # M
sort_area_size = # k ( k M)
sort_area_retained_size = # MTS 时 sort_area_retained_size = sort_area_size
C 如果 G 单个 CPU db_block_size 是 bytes
SGA= * M= M 左右
建议 shared_pool_size = M db_block_buffer *db_block_size = M
具体 : shared_pool_size= # M
db_block_buffer= # M
log_buffer = # k ( K*CPU 个数 )
large_pool_size= # M
java_pool_size = # M
sort_area_size = # k ( k M)
sort_area_retained_size = # MTS 时 sort_area_retained_size = sort_area_size
假定 bit ORACLE
内存 G
shared_pool_size = M data buffer = G
内存 G
shared_pool_size = M data buffer = G
内存 G
shared_pool_size = M M data buffer = G
参数更改方式
oracle i
主要都是通过修改 oracle 启动参数文件进行相关的配置
参数文件位置
d:\oracle\admin\DB_Name\pfile\init ora
按以上修改以上参数值即可
Oracle i:
两种方式 第一种是修改 oracle 启动参数文件后 通过此参数文件再创建服务器参数文件
第二种是直接运行 oracle 修改命令进行修改
SQLalter system set db_cache_size= M scope=spfile;
lishixinzhi/Article/program/Oracle/201311/16995