收藏 分销(赏)

oracle运行情况总结.docx

上传人:可**** 文档编号:4231687 上传时间:2024-08-27 格式:DOCX 页数:84 大小:218.72KB
下载 相关 举报
oracle运行情况总结.docx_第1页
第1页 / 共84页
oracle运行情况总结.docx_第2页
第2页 / 共84页
点击查看更多>>
资源描述
netstat -tln 命令是Linux查看端口使用情况 netstat –an命令是windows查看端口使用情况 一、查看执行sql还剩多少时间: select b.sql_text, --SQL内容 a.MACHINE, --哪台机器运行的SQL a.USERNAME,--哪个用户运行的SQL a.MODULE,--是哪运行方式 c.sofar/totalwork*100,--工作进行了百分之多少 c.elapsed_seconds, --己经用了多少时间(秒) c.time_remaining --还剩多少时间(秒) from v$session a, v$sqlarea b,v$session_longops c where a.sql_hash_value=b.HASH_VALUE and a.sid=c.sid and a.SERIAL#=c.SERIAL# 监控当前数据库谁在运行什么SQL语句 SELECT osuser, username, sql_text from v$session a, v$sqltext b where a.sql_address = b.address order by address, piece; 二、查看数据库文件情况(大小、是否扩展等) SELECT T.TABLESPACE_NAME,D.FILE_NAME, D.AUTOEXTENSIBLE,D.BYTES,D.MAXBYTES,D.STATUS FROM DBA_TABLESPACES T,DBA_DATA_FILES D WHERE T.TABLESPACE_NAME =D.TABLESPACE_NAME ORDER BY TABLESPACE_NAME,FILE_NAME; 修改数据库文件sql: alter database datafile ' D:\ORACLE\ORA_DATA\DATACORE_0003.ORA' autoextend on next 100M maxsize 6G; alter database datafile 'D:\ORACLE\ORA_DATA\AMLM_0002.ORA' resize 2048M; 增加数据库文件sqlL alter tablespace tablespace_name add datafile 'D:\ORACLE\ORA_DATA\AMLM_0002.ORA' size 1024M; 三、查看表空间使用情况及版本 查看oracle版本: SELECT * FROM PRODUCT_COMPONENT_VERSION; 查看Oracle数据库表空间的占有率 select a.tablespace_name,        round((a.maxbytes / 1024 / 1024), 2) "sum MB",        round((a.bytes / 1024 / 1024), 2) "datafile MB",        round(((a.bytes - b.bytes) / 1024 / 1024), 2) "used MB",        round(( (a.maxbytes-a.bytes+b.bytes) / 1024 / 1024), 2) "free MB",        round(((a.bytes - b.bytes) / a.maxbytes) * 100, 2) "percent_used"   from (select tablespace_name, sum(bytes) bytes,sum(maxbytes) maxbytes           from dba_data_files where maxbytes!=0          group by tablespace_name) a,        (select tablespace_name, sum(bytes) bytes, max(bytes) largest           from dba_free_space          group by tablespace_name) b  where a.tablespace_name = b.tablespace_name  order by ((a.bytes - b.bytes) / a.maxbytes) desc; Select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name 这个命令可以查看当前用户下所有表占用的空间大小。 还有在命令行情况下如何将结果放到一个文件里。 1. 查看所有表空间大小 SQL> select tablespace_name,sum(bytes)/1024/1024 from dba_data_files group by tablespace_name; 2. 已经使用的表空间大小 SQL> select tablespace_name,sum(bytes)/1024/1024 from dba_free_space 2 group by tablespace_name; 3. 所以使用空间可以这样计算 select a.tablespace_name,total,free,total-free used from ( select tablespace_name,sum(bytes)/1024/1024 total from dba_data_files group by tablespace_name) a, ( select tablespace_name,sum(bytes)/1024/1024 free from dba_free_space group by tablespace_name) b where a.tablespace_name=b.tablespace_name; 4. 下面这条语句查看所有segment的大小(相当于查看表使用的大小)。 Select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name 5. 还有在命令行情况下如何将结果放到一个文件里。 SQL> spool out.txt SQL> select * from v$database; SQL> spool off 6、查看表空间中分布的用户信息 select tablespace_name, owner,sum(bytes) from dba_segments    group by tablespace_name, owner    四、查看redo log文件及切换情况,通常切换时间为15~30分钟 select * from v$logfile; select * from v$log; 修改redo log文件大小: alter system checkpoint; alter system switch logfile; alter database drop logfile group 3; alter database add logfile group 3 ('D:\ORACLE\PRODUCT\10.2.0\ORADATA\UPRR\REDO03.LOG') size 200M reuse; 五、碎片程度 select tablespace_name,count(tablespace_name) from dba_free_space group by tablespace_name having count(tablespace_name)> 10; 六、em的地址查看及em和isqlplus启动及关闭: 查看地址:/oracle/oracle10g/sysman/config/ emd.properties 默认地址:http://$IP:1158/em/console Linux下启动、停止EM和isqlplus: su - oracle 【oracle# 】emctl stop dbconsole 【oracle# 】emctl start dbconsole 【oracle# 】isqlplusctl sotp; 【oracle# 】isqlplusctl start; 附注: Q: 在命令行方式下,如何查看CPU、内存的使用情况,网络流量和磁盘I/O? A: 在命令行方式下, 1. 查看CPU使用情况的命令 ""每5秒刷新一次,最右侧有CPU的占用率的数据 $ vmstat 5 ""top 然后按Shift P,按照进程处理器占用率排序 $ top 2. 查看内存使用情况的命令 ""用free命令查看内存占用情况 $ free ""top 然后按Shift M, 按照进程内存占用率排序 $ top 3. 查看网络流量 ""能够用工具iptraf工具 $ iptraf -g ""针对某个Interface的网络流量能够通过比较两个时间网络接口的RX和TX数据来获得 $ date; ifconfig eth1 $ date; ifconfig eth1 4. 查看磁盘i/o ""用iostat查看磁盘/dev/sdc3的磁盘i/o情况,每两秒刷新一次 $ iostat -d -x /dev/sdc3 2 ""用vmstat查看io部分的信息 $ vmstat 2 七、内存参数调整 64位linux,64位oracle10g,64位websphere6.1,;服务器内存8G的情况下配置: ALTER SYSTEM SET open_cursors = 3000 SCOPE=SPFILE; ALTER SYSTEM SET pga_aggregate_target = 256M SCOPE=SPFILE; ALTER SYSTEM SET db_cache_size = 50M SCOPE=SPFILE; ALTER SYSTEM SET db_file_multiblock_read_count = 256 SCOPE=SPFILE; ALTER SYSTEM SET java_pool_size = 1024M SCOPE=SPFILE; ALTER SYSTEM SET large_pool_size = 768M SCOPE=SPFILE; ALTER SYSTEM SET sga_max_size = 3G COMMENT='internally adjusted' SCOPE=SPFILE; ALTER SYSTEM SET shared_pool_size = 1024M SCOPE=SPFILE; --ALTER SYSTEM SET sort_area_size = 1000M SCOPE=SPFILE; --ALTER SYSTEM SET undo_retention = 10800 SCOPE=SPFILE; ------------------------------------------------------------------------------------------------------------------------------ 在32位的操作系统中,Oracle最大可用内存为1.75g,也就是说SGA+PGA<=1.75g,超过这一限制的内存将不会被Oracle用到(测试及分配1400M、300M) SQL>show parameter sga; SQL>ALTER system SET sga_max_size=1504m scope=spfile; SQL>ALTER system SET sga_target=1504m scope=spfile; SQL>shutdown immediate; SQL>startup; SQL>show parameter pga; SQL>ALTER system SET pga_aggregate_target=256m; 内存参数的调整主要是oracle的sga的调整,sea主要由共享池、数据缓冲区、日志缓冲区三部分组成。 1、共享池有两部分组成:共享sql区和数据字典缓冲区。 查看共享sql区得使用率,应该在90%以上,否则需增加共享池的大小。 select (sum(pins-reloads))/sum(pins) "lib cache" from v$librarycache; select sum(pins) "请求存取数",sum(reloads) "不命中数",sum(reloads)/sum(pins) from v$librarycache; 其中,pins,显示在库高速缓存中执行的次数;reload,显示在执行阶段库高速缓存不命中的数目,一般sum(reloads)/sum(pins)的值应接近于零.如果大于1%就应该增加shared_pool_size的值, 来提高数据字典高速缓存可用的内存数量,减少不命中数. 查看数据字典缓冲区的使用率,应该在90%以上,否则需要增加共享池的大小。 select (sum(gets-getmisses-usage-fixed))/sum(gets) "row cache" from v$rowcache; 2、数据缓冲区的使用命中率=1-(physical reads/(db block gets+consistent gets)),应该在90%以上,否则需增加数据缓冲区大小。 select name, value from v$sysstat where name in('db block gets','consisten gets','physical reads'); 3、日志缓冲区失败率=requests/entries,应该接近0,否则说明日志缓冲区太小,需增加。 select name,value from v$sysstat where name in ('redo entries','redo log space requests') 4、刷共享池 alter system flush shared_pool;---是小块的内存合并成大块的内存,暂时恢复性能 ---------- 5、临时表空间的调整技巧如下: 如果即使在稳定的状态下也存在很多的排序扩展锁(sort extent pool latch)的竞争,应该通过修改临时表空间的default storage 字句的next值来增大扩展块的大小。如果存在很多的排序扩展锁(sort extent pool latch)的竞争并且这种等待是由于过多的并发的排序造成的,应该增大 sort_area_size参数的大小,以便更多的派讯能保存在内存中,建议让扩展块的大小和sort_area_size参数相同 --------------------- 6、查看sql语句的解析情况 select * from v$sysstat where name in ('parse_time_cpu','parse_time_elapsed','parse_count_hard') 'parse_time_cpu'------>系统服务时间 ,'parse_time_elapsed'-------》响应时间 等待时间 waite_time=parse_time_elapsed-parse_time_cpu sql语句平均解析等待时间=waite_time/parse_count_hard -------------------- 7、查看低效率的sql语句 优化有助于提高cpu的利用率 select buffer_gets,executions,sql_text from v$sqlarea; ------------- 8、通过v$system_event的latch free查看数据库冲突情况,如果没有冲突则latch free无结果值。如果冲突太大则可降低spin_count参数值来消除高的cpu使用率。 八、索引、磁盘及表空间调整 将物理磁盘分多个盘,不同的数据文件放不同的磁盘上课提高速度。 将不同的表放不同的表空间里(多建几个表空间)可提高速度。 将索引和表分别放到不同的表空间里可提高速度。 (其实就是I/O调优的一种方式。) 九、log_buffer 、processes及session调整 SQL>show parameter spfile;--查看是否是spfile启动 SQL> create spfile from pfile;--如果不是创建并重启数据库; SQL> alter system set processes=1000 scope = spfile; SQL> show parameter processes; SQL>shutdown immediate; SQL> startup SQL> show parameter sessions; 【注:sessions是个派生值,由processes的值决定,公式sessions=1.1*process + 5】 SQL>alter system set log_buffer= 16M scope=spfile(默认4M) SQL>show parameter log_buffer; 问题:ORA-02095: 无法修改指定的初始化参数  alter system set log_buffer= 16777216 scope=spfile;(不能用M直接用字节ok) 环境 :11gR2  alter system set sessions=250 scope=both。 提示无法修改制定的初始化参数。 alter system set sessions=250 scope=spfile; 提示系统参数已修改。 这种情况下,重新启动数据库才会生效。这涉及到oracle中有些参数可以动态修改,有些参数不能动态修改,如何具体哪些参数可动态修改,哪些参数不可以动态修改,通过v$parameter 视图可以清晰查看。 SQL> desc v$parameter;  名称                                      是否为空? 类型  ----------------------------------------- -------- --------------  NUM                                                NUMBER  NAME                                               VARCHAR2(80)  TYPE                                               NUMBER  VALUE                                              VARCHAR2(4000)  DISPLAY_VALUE                                      VARCHAR2(4000)  ISDEFAULT                                          VARCHAR2(9)  ISSES_MODIFIABLE                                   VARCHAR2(5)  ISSYS_MODIFIABLE                                   VARCHAR2(9)  ISINSTANCE_MODIFIABLE                              VARCHAR2(5)  ISMODIFIED                                         VARCHAR2(10)  ISADJUSTED                                         VARCHAR2(5)  ISDEPRECATED                                       VARCHAR2(5)  ISBASIC                                            VARCHAR2(5)  DESCRIPTION                                        VARCHAR2(255)  UPDATE_COMMENT                                     VARCHAR2(255)  HASH                                               NUMBER 其中name 标示参数名字,isses_modifiable标示是否可以会话级别修改,如何是false,则不可以动态修改,true则可以动态修改。issys_modifiable标示是否系统级别修改,false则不可修改,true则可动态修改。 SQL> select name,isses_modifiable,issys_modifiable from v$parameter where name=' sessions'; NAME                 ISSES      ISSYS_MOD --------------------  -----           --------- sessions             FALSE      FALSE 问题:ORA-12519: TNS:no appropriate service handler found 的解决 有时候连得上数据库,有时候又连不上. 可能是数据库上当前的连接数目已经超过了它能够处理的最大值. SQL> select count(*) from v$process;--当前连接数      COUNT(*)      63 SQL> select value from v$parameter where name = 'processes' --数据库允许的最大连接数 VALUE 500 修改最大连接数: SQL> alter system set processes = 1000 scope = spfile; 重启数据库: SQL> shutdown immediate; SQL> startup; --查看当前有哪些用户正在使用数据 SELECT osuser, a.username,cpu_time/executions/1000000||'s', sql_fulltext,machine from v$session a, v$sqlarea b where a.sql_address =b.address order by cpu_time/executions desc; --快速删除不活动进程 set heading off spool on select p.SPID from v$session s,v$process p where s.paddr= p.addr and s.machine='woogle'; spool off set serveroutput on ; declare v_sid number; v_serial number; v_sql varchar2(200) ; CURSOR cur_session is    select sid, serial# from v$session where machine='woogle'; begin open cur_session ; fetch cur_session into v_sid , v_serial ; while cur_session%found loop dbms_output.put_line(v_sid||' killed!') ; v_sql:= 'alter system kill session '||''''||v_sid||','||v_serial||''''; execute immediate v_sql ; fetch cur_session into v_sid , v_serial ; end loop ; close cur_session ; end ; / Linux 下快速删除不活动进程 #!/bin/bash tmpfile=/tmp/tmp.$$ sqlplus ' / as sysdba' << EOF set heading off spool on spool $tmpfile select p.SPID from v$session s,v$process p where s.paddr= p.addr and s.STATUS='SNIPED'; spool off set serveroutput on ; declare v_sid number; v_serial number; v_sql varchar2(200) ; CURSOR cur_session is    select sid, serial# from v$session where STATUS='SNIPED'; begin open cur_session ; fetch cur_session into v_sid , v_serial ; while cur_session%found loop dbms_output.put_line(v_sid||' killed!') ; v_sql:= 'alter system kill session '||''''||v_sid||','||v_serial||''''; execute immediate v_sql ; fetch cur_session into v_sid , v_serial ; end loop ; close cur_session ; end ; / 问题:ORA-01552: cannot use system rollback segment for non-system tablespace 'AMLM’的解决 那就新建一个undo表空间,并弃用原先的: SQL> create undo tablespace UNDOTBS2 datafile '/opt/oracle/db02/app/oracle/oradata/ORCL/undotbs02.dbf' size 3000m; SQL> show parameter undo undo_management                      string      MANUAL undo_retention                       integer     3600 undo_suppress_errors                 boolean     FALSE undo_tablespace                      string      UNDOTBS1 SQL> alter system set undo_management=auto scope=spfile; SQL> alter system set undo_tablespace=UNDOTBS2 scope=spfile; SQL> show user --用dba以上用户 SQL> shutdown immediate SQL> startup SQL> drop tablespace undotbs1; 5. 查看回滚段的使用情况,哪个用户正在使用回滚段的资源,如果有用户最好更换时间(特别是生产环境)。 SQL> select s.username, u.name from v$transaction t,v$rollstat r,ITPUB个人空间 Ok"L1[5rx@[l     v$rollname u,v$session s where s.taddr=t.addr and )x&^8H+Gw_9i0    t.xidusn=r.usn and r.usn=u.usn order by s.username; 6. 检查UNDO Segment状态; SQL> select usn,xacts,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks 1C@o(V#tP ea0    from v$rollstat order by rssize; 7. SQL> create undo tablespace undotbs1 datafile '/opt/oracle/oradata/uprr/undotbs01.dbf' size 3072M reuse autoextend on next 800m maxsize 16G; 8. 动态更改spfile配置文件; SQL> alter system set undo_tablespace=undotbs1 scope=both; System altered. 9. 等待原UNDO表空间所有UNDO SEGMENT OFFLINE; SQL> select usn,xacts,status,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinksITPUB个人空间bXG?y'[   from v$rollstat order by rssize; 10. 再执行看UNDO表空间所有UNDO SEGMENT ONLINE; SQL> select usn,xacts,status,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks G cCt~"\4[4` hr0ez0  from v$rollstat order by rssize; 11. 删除原有的UNDO表空间; SQL> drop tablespace undotbs2 including contents; Tablespace dropped. 12. 确认删除是否成功; SQL> select name from v$tablespace; 十、调整参数sort_area_size 常常遇到这样的问题:某某参数应改怎么设,设置多大合适?其实很多情况下只能给出个大概的估计值。例如参数sort_area_size,太小,排序时是会访问磁盘,影响性能,太大,浪费内存空间。那么设多大合适呢? 使用如下脚本: SQL> select A.Value Disk_Sorts,           B.Value Memory_Sorts,            ROUND(100*A.Value/            DECODE((A.Value+B.Value),0,1,(A.Value+B.Value)),2)                Pct_Disk_Sorts       from V$SYSSTAT A, V$SYSSTAT B      where A.Name = 'sorts (disk)'        and B.Name = 'sorts (memory)'; DISK_SORTS MEMORY_SORTS PCT_DISK_SORTS ---------- ------------ --------------          1         1200            .08 当然我的只是一个例子,你应改从你自己的在用数据库查询,例如设置一个限值,例如10%,如果磁盘排序占总排序的10%,则应改增大sort_area_size, 如果1占的比例太小,是否应改考虑减小sort_area_size。 ps: 一直以为sort_area_size的空间在会话连接时就会分配,但看一些资料,各不相同。还得细心琢磨。 我觉得对于这个建议,在Oracle9i可以借鉴为调整pga大小。9i以上用pga_aggregate_target参数控制,sort_area_size参数无效。 十一、TEMP表空间调整 在优化SQL语句的基础上,加大内存,适当调整Sort_area_size的大小,因为Oracle优先使用内存排序,内存不够才使用磁盘中的临时表空间,对于超大临时表空间可以删除这个超大临时表空间,重新创建一个合适大小的,不可自动扩展。 一般初始的临时表空间都很小,当系统运行的时候,临时表空间会自动扩展,但是使用率一直都会非常高,所以,主要看一下 dba_temp_files 里面 autoextensible(是否字段扩展)和 maxbytes以及磁盘空间是否足够,只要临时表空间支持扩展,且磁盘空间足够,一般都不会出问题的。如果你希望使用率降低,那就 resize 临时表空间的文件,将文件修改大一点,比如 20G 以上。 1、 查看临时表空间信息 select * from dba_temp_files; --查看临时表空间使用率 select tablespace_name,user_bytes,bytes,round(user_bytes/bytes,6) as pct from dba_temp_files; --查看临时表空间数据文件的大小 select file_name,bytes/1024/1024/1024 "MB",autoextensible,tablespace_name from dba_temp_files; 或者select tablespace_name, bytes/power(1024,3) as pct from dba_temp_files;(单位G) 2、检查过程 (1) 我们可以查查数据库alert日志 例如:/u0/admin/sm/bdump/alert_sm.log 数据库中并没有报temp表空间的错,一般来说不报错,可以先不管,因为没有temp表空间可能由于没有需要用
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服