网站首页 > 文章中心 > 其它

oracle如何避免nl

作者:小编 更新时间:2023-09-04 10:17:05 浏览量:23人看过

oracle数据库如何防止死锁问题

土嘎嘎的粉丝们大家好:这个死锁没办法完全避免,尽量的话在做事物提交的时候,提交完成后在进行其余的同一个表的操作,再就是insert、update等操作尽量能减少就减少.其实正常情况下是很少出现死锁的.

如何设置使oracle10g性能最优 性能调优 步骤

第一段: 磁盘方面调优

① 规范磁盘阵列

分离下面的东西,避免磁盘竞争

oracle如何避免nl-图1

SYSTEM表空间

TEMPORARY表空间

UNDO表空间

联机重做日志(放在最快的磁盘上)

操作系统磁盘

ORACLE安装目录

经常被访问的数据文件

索引表空间

oracle如何避免nl-图2

归档区域(应该总是与将要恢复的数据分离)

例:

通过下列语句查询确定IO问题

select name ,phyrds,phywrts,readtim,writetim

from v$filestat a,v$datafile b

where a.file#=b.file# order by readtim desc;

u 增大日志文件的大小,从而增加处理大型INSERT,DELETE,UPDATE操作的比例

查询日志文件状态

select a.member,b.* from v$logfile a,v$log b where a.GROUP#=b.GROUP#

查询日志切换时间

from v$log_history a ,v$log_history b

where a.RECID=b.RECID+1

order by a.FIRST_TIME desc

增大日志文件大小,以及对每组增加日志文件(一个主文件、一个多路利用文件)

u 增大LOG_CHECKPOINT_INTERVAL参数,现已不提倡使用它

如果低于每半小时切换一次日志,就增大联机重做日志大小.如果处理大型批处理任务时频繁进行切换,就增大联机重做日志数目.

alter database add logfile member '/log.ora' to group 1;

alter database drop logfile member '/log.ora';

修改三个初始参数:

UNDO_MANAGEMENT=AUTO

oracle如何避免nl-图3

UNDO_TABLESPACE=CLOUDSEA_UNDO

UNDO_RETENTION=#of minutes

第二段: 初始化参数调优

① 重要初始化参数

l SGA_MAX_SIZE

l SGA_TARGET

l PGA_AGGREGATE_TARGET

l DB_CACHE_SIZE

l SHARED_POOL_SIZE

它设定了用来存储和处理内存中数据的SGA区域大小,从内存中取数据比磁盘快10000倍以上

根据以下查询出数据缓存命中率

select sum(decode(name,'physical reads',value,0)) phys,

sum(decode(name,'db block gets',value,0)) gets,

sum(decode(name,'consistent gets',value,0)) con_gets,

(1- (sum(decode(name,'physical reads',value,0))/(sum(decode(name,'db block gets',value,0))+sum(decode(name,'consistent gets',value,0)) ) ))*100 Hitratio

from v$sysstat;

在调整DB_CACHE_SIZE时使用V$DB_CACHE_ADVICE

select size_for_estimate, estd_physical_read_factor, estd_physical_reads

from v$db_cache_advice

where name = 'DEFAULT';

如果查询的命中率过低,说明缺少索引或者索引受到限制,通过V$SQLAREA视图查询执行缓慢的SQL

正确地调整此参数可以同等可能地共享SQL语句,使得在内存中便能找到使用过的SQL语句.为了减少硬解析次数,优化对共享SQL区域的使用,需尽量使用存储过程、使用绑定变量

select ((1- sum(getmisses)/(sum(gets)+sum(getmisses)))*100) hitratio

from v$rowcache

where gets+getmisses 0;

SELECT SUM(PINS) "EXECUTIONS",SUM(RELOADS) "CACHE MISSES WHILE EXECUTING",1 - SUM(RELOADS)/SUM(PINS)

FROM V$LIBRARYCACHE;

第三段: SQL调优1. 使用提示

①1 改变执行路径

通过OPTIMIZER_MODE参数指定优化器使用方法,默认ALL_ROWS

ALL_ROWS 可得最佳吞吐量执行查询所有行

FIRST_ROWS(n) 可使优化器最快检索出第一行:

select /*+ FIRST_ROWS(1) */ store_id,... from tbl_store

允许开发人员改变访问的实际查询方式,经常使用INDEX提示

CLUSTER 强制使用集群

FULL

HASH

当不指定任何INDEX时,优化器会选择最佳的索引

SELECT /*+ INDEX */ STORE_ID FROM TBL_STORE

INDEX_DESC

INDEX_COMBINE 用来指定多个位图索引,而不是选择其中最好的索引

INDEX_JOIN 只需访问这些索引,节省了重新检索表的时间

INDEX_FFS 执行一次索引的快速全局扫描,只处理索引,不访问具体表

INDEX_SS

INDEX_SSX_ASC

INDEX_SS_DESC

NO_INDEX

NO_INDEX_FFS

NO_INDEX_SS

对于数据仓库非常有帮助

FACT

MERGE

NO_EXPAND 语法:/*+ NO_EXPAND */ column1,...

保证OR组合起的IN列表不会陷入困境,/*+ FIRST_ROWS NO_EXPAND */

NO_FACT

NO_MERGE

NO_QUERY_TRANSFORMATION

NO_REWRITE

NO_STAR_TRANSFORMATION

NO_UNSET

REWRITE

STAR_TRANSFORMATION

UNSET

USE_CONCAT

显示如何将连接表中的数据合并在一起,可用两提示直接影响连接顺序.LEADING指定连接顺序首先使用的表,ORDERED告诉优化器基于FROM子句中的表顺序连接这些表,并使用第一个表作为驱动表(最行访问的表)

ORDERED语法:/*+ ORDERED */ column 1,....

访问表顺序根据FROM后的表顺序来

LEADING语法:/*+ LEADING(TABLE1) */ column 1,....

类似于ORDER,指定驱动表

NO_USE_HASH

NO_USE_MERGE

NO_USE_NL

USE_HASH前提足够的HASH_AREA_SIZE或PGA_AGGREGATE_TARGET

通常可以为较大的结果集提供最佳的响应时间

USE_MERGE

USE_NL 通常可以以最快速度返回一个行

USE_NL_WITH_INDEX

NO_PARALLEL

NO_PARALLEL_INDEX

PARALLEL

PARALLEL_INDEX

PQ_DISTRIBUTE

APPEND 不会检查当前所用块中是否有剩余空间,而直接插入到表中,会直接将数据添加到新的块中.

CACHE 会将全表扫描全部缓存到内存中,这样可直接在内存中找到数据,不用在磁盘上查询

CURSOR_SHARING_EXACT

DRIVING_SITE

DYNAMIC_SAMPLING

MODEL_MIN_ANALYSIS

NOAPPEND

NOCACHE

NO_PUSH_PRED

NO_PUSH_SUBQ

NO_PX_JOIN_FILTER

PUSH_PRED

PUSH_SUBQ 强制先执行子查询,当子查询很快返回少量行时,这些行可以用于限制外部查询返回行数,可极大地提高性能

例:select /*+PUSH_SUBQ */ emp.empno,emp.ename

From emp,orders

where emp.deptno=(select deptno from dept where loc='1')

PX_JOIN_FILTER

QB_NAME

HASH_VALUE:SQL语句的Hash值.

ADDRESS:SQL语句在SGA中的地址.

PARSING_USER_ID:为语句解析第一条CURSOR的用户

VERSION_COUNT:语句cursor的数量

KEPT_VERSIONS:

SHARABLE_MEMORY:cursor使用的共享内存总数

PERSISTENT_MEMORY:cursor使用的常驻内存总数

RUNTIME_MEMORY:cursor使用的运行时内存总数.

SQL_TEXT:SQL语句的文本(最大只能保存该语句的前1000个字符).

MODULE,ACTION:用了DBMS_APPLICATION_INFO时session解析第一条cursor时信息

SORTS: 语句的排序数

CPU_TIME: 语句被解析和执行的CPU时间

ELAPSED_TIME: 语句被解析和执行的共用时间

PARSE_CALLS: 语句的解析调用(软、硬)次数

EXECUTIONS: 语句的执行次数

INVALIDATIONS: 语句的cursor失效次数

LOADS: 语句载入(载出)数量

ROWS_PROCESSED: 语句返回的列总数

select b.username,a.DISK_READS,a.EXECUTIONS,a.DISK_READS/decode(a.EXECUTIONS,0,1,a.EXECUTIONS) rds_exec_ratio,a.SQL_TEXT

from v$sqlarea a ,dba_users b

where a.PARSING_USER_ID=b.user_id and a.DISK_READS100 order by a.DISK_READS desc;

与V$SQLAREA类似

select * from

where rank_buffers 11

查看表上的索引

select a.table_name,a.index_name,a.column_name,a.column_position,a.table_owner

from dba_ind_columns a

where a.table_owner='CLOUDSEA'

如: select name from tbl where no=?

建立索引:create index test on tbl(name,no) tablespace cloudsea_index storage(....)

对于系统中很关键的查询,可以考虑建立此类连接索引

QUERY_REWRITE_ENALED=TRUE

QUERY_REWRITE_INTEGRITY=TRUSTED (OR ENFORCED)

create index test on sum(test);

将常用的相对小的表缓存到内存中,但注意会影响到嵌套循环连接上的驱动表

alter table tablename cache;

SELECT ...FROM EMP WHERE DEPT_NO NOT IN (SELECT DEPT_NO FROM DEPT WHERE DEPT_CAT='A');

(方法一: 高效)

SELECT ....FROM EMP A,DEPT B WHERE A.DEPT_NO = B.DEPT(+) AND B.DEPT_NO IS NULL AND B.DEPT_CAT(+) = 'A'

(方法二: 最高效)

SELECT ....FROM EMP E WHERE NOT EXISTS (SELECT 'X' FROM DEPT D WHERE D.DEPT_NO = E.DEPT_NO AND DEPT_CAT = 'A');

第四段: 使用STATSPACK和AWR报表调整等待和闩锁

在$ORACLE_HOME/RDBMS/ADMIN下

Spcreate.sql 通过调用spcusr.sql spctab.sql 和spcpkg.sql创建STATSPACK环境,使用SYSDBA运行它

Spdrop.sql 调用sptab.sql和spdusr.sql删除整个STATSPACK环境,使用SYSDBA运行它

Spreport.sql 这是生成报表的主要脚本,由PERFSTAT用户运行

Sprepins.sql 为指定的数据库和实例生成实例报表

Sprepsql.sql 为指定的SQL散列值生成SQL报表

Sprsqins.sql 为指定的数据库和实例生成SQL报表

Spauto.sql 使用DBMS_JOB自动进行统计数据收集(照相)

Sprepcon.sql 配置SQLPLUS变量来设置像阈值这样的内容的配置文件

Spurge.sql 删除给定数据库实例一定范围内的快照ID,不删除基线快照

Sptrunc.sql 截短STATSPACK表里所有性能数据

第五段: 执行快速系统检查1. 缓冲区命中率

查询缓冲区命中率

select (1 - (sum(decode(name, 'physical reads',value,0)) /

(sum(decode(name, 'db block gets',value,0)) +

sum(decode(name, 'consistent gets',value,0))))) * 100 "Hit Ratio"

from v$sysstat;

oracle为什么产生很多垃圾表,怎样避免

①.,这些表占用空间

Drop Table 后,没有真正的删除表,而是在"垃圾站"中了.可以通过:

SQL SHOW RECYCLEBIN

看到.如果要彻底删除,使用:

删除这一个或

SQL PURGE RECYCLEBIN;

删除全部.

ORACLE数据库用cmd连接时总是说TNS:协议适配器错误,怎么办,listener服务开了自动停止

用Oracle菜单里面的工具:Net Configuration Assistant

监听程序配置,删除监听,重新添加监听.

然后再用它:本地Net服务名配置,先删除,再增加.

就好了.....

windows安装了oracle 如何避免关机开机导致数据库打不开的问题?

将oracle服务设置为手动开启......

开机后

需要使用时

在运行中输入net

start

OracleOraDb10g_home1TNSListener

回车

再输入net

OracleServiceORCL

回车,注意服务名要和机器上的一致

去服务里看ORACLE开头的服务、尤其是数据库服务和监听服务、如果是自启动、开机就不会打不开、如果是手动、那你就得自己开

打不开数据库或许是因为你的OracleServiceORCL服务没有启动吧

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章