统计信息——table
manual statistics:下面语句在命令行可以运行sql>exec dbms_stats.gather_table_stats('wiliam','tb_sale',estimate_percent=>100,cascade=>true);wilaim:用户tb_sale:表estimate_percent:统计比例,第一次采用100%cascade:统计索引[@more@]
驱动表和被驱动表
驱动表:要选择小的表作为驱动表大的表作为被驱动表"驱动表是在使用多表嵌套连接时,会先全表扫描该驱动表,然后驱动表返回的结果集中一行一行去匹配被驱动表(可以利用索引),所以我们会选择小表做为驱动表,而被驱动使用索引进行连接。对于基于规则的优化系统,驱动表在FROM后是有次序设置的,CBO而在基于成本的优化,ORACLE会选择最合适的驱动表。但是数据库有的时候不一定会选择较小的表作为驱动表,需要TUNING[@more@]
physical read and buffer read
1.物理读(physical read)当数据块第一次读取到,就会缓存到buffer cache 中,而第二次读取和修改该数据块时就在内存buffer cache 了 以下是例子如果有新的数据需要被读入Buffer Cache中,而Buffer Cache又没有足够的空闲空间,Oracle就根据LRU算法将LRU链表中LRU端的数据置换出去。当这些数据被再次访问到时,需要重新从磁盘读入。逻辑读(buffer read)逻辑读指的就是从(或者视图从)Buffer Cache中读取数据块。按照访问数据块的模式不同,可以分为即时读(Current Read)和一致性读(Consistent Read)。注意:逻辑IO只有逻辑读,没有逻辑写
oracle 后台进程:7大进程总结(转载)
前面我们说过,Oracle的实例由内存结构和一组后台的进程组成。Oracle的后台进程比较重要的包括以下几个:·SMON·PMON·DBWR·LGWR·ARCH·CKPT下面我们将逐一介绍各个进程的作用。一、SMONSMON(System Monitor)-系统监控进程,在实例启动时执行实例恢复,并负责清理不再使用的临时段。SMON进程要完成所有“系统级”任务。PMON感兴趣的是单个的进程,而SMON与之不同,它以系统级为出发点,这是一种数据库“垃圾收集器”。SMON所做的工作包括: ·清理临时空间 ·合并空闲空间 ·针对原来不可用的文件恢复活动的事务 ·执行RAC中失败节点的
V$sqlarea 分析以及max(),min() 调优
V$sqlarea 分析(一)v$sqlarea作用和参数解析V$sqlarea用于分析SHARED_POOL中共享sql语句占用系统资源的情况几个重要参数buffer_gets,disk_reads,executions 三个最重要的参数l HASH_VALUE:SQL语句的Hash值。ADDRESS:SQL语句在SGA中的地址。这两列被用于鉴别SQL语句,有时,两条不同的语句可能hash值相同。这时候,必须连同ADDRESS一同使用来确认SQL语句。l SQL_TEXT:SQL语句的文本(最大只能保存该语句的前1000个字符)。l SHARABLE_MEMORY:cursor使用的共享内存总数l SORTS表示排序的次数;
RBO AND CBO (二)
1、OPTIMIZER_MODE选项如下:* ALL_ROWS* FIRST_ROWS_n* FIRST_ROWS* CHOOSE* RULE1、CHOOSE仅在9i及之前版本中被支持,10g已经废除。8i及9i中为默认值。这个值表示SQL语句既可以使用RBO优化器也可以使用CBO优化器,而决定该SQL到底使用哪个优化器的唯一因素是,所访问的对象是否存在统计信息。如果所访问的全部对象都存在统计信息,则使用CBO优化器优化SQL;如果只有部分对象存在统计信息,也仍然使用CBO优化器优化SQL,优化器会为不存在统计信息对象依据一些内在信息(如分配给该对象的数据块)来生成统计信息,只是这样生成的统计信息可
RBO 和CBO分析
ORACLE 提供了CBO、RBO两种SQL优化器。Rule based optimizer(RBO) 基于规则Cost based optimizer (CBO) 基于成本,或者讲统计信息1:使用CBO 时,编写SQL语句时,不必考虑"FROM" 子句后面的表或视图的顺序和"WHERE" 子句后面的条件顺序;ORACLE自7版以来采用的许多新技术都是基于CBO的,如星型连接排列查询,哈希连接查询,函数索引,和并行查询等。2:使用CBO 时,要注意看采用了哪种类型的表连接方式。ORACLE的共有Sort Merge Join(SMJ)、Hash Join(HJ)和Nested Loop Join(NL)。CBO有时会偏重于SMJ 和 HJ,但
insert /* APPEND */ into table_name用法
insert /* APPEND */ into emp中/* APPEND */Append 是将数据添加在table 后。不会替换掉里面相同的数据。也不会使用index ,对添加到里面的数据排序。 使用新块而不用已经已经使用的块 加快insert速度 ,使用hwk以上的块APPEND : Only valid for INSERT .. SELECT. Allows INSERT to work like direct load or to perform parallel insert.[@more@]
分析函数Ratio_to_report分解!
分析函数Ratio_to_report( ) over()使用说明表中需要计算单项占比:比如单项在部门占比多少,单项在公司占比多少。特别是在财务单项计算,部门个人薪水计算上。 Ratio_to_report() 括号中就是分子,over() 括号中就是分母,分母缺省就是整个占比。Ratio_to_report 一般结合partition by 使用。(一)举例子说明:表emp,dept,两表关联列为 deptnocreate,insert into 步骤省略。SQL> select * from emp; EMPNO DEPTNO SALARY--------------------------------------- ----------------------------
重复数据:选择,删除,保留
重复数据:选择,删除,保留min(rowid) max(rowid) 2010-12-30Database:oracle9i表:peng_tb_vip由于表数据太多,不便于选出来,故count;Select count(*) from peng_tb_vipSQL> Select count(*) from peng_tb_vip;COUNT(*)----------152(一):整个行数据重复如果整个表peng_tb_vip 行重复,则加distinct,,即可去掉重复的数据。Select distinct * from peng_tb_vip;(二)多个字段重复字段:corpid,cust_code;l 生成临时表CREATE TABLE PENG_TB_VIP2 AS SELECT * FROM PENG_TB_VIP;l
round (number) and round(date)
SQL> select add_time,round (add_time,'yyyy') aa from peng3 2 where rownum<=2;ADD_TIME AA----------- -----------2007-7-27 2 2008-1-12007-7-27 2 2008-1-1SQL> select add_time,round (add_time,'mm') aa from peng3 2 where rownum<=2;ADD_TIME AA----------- -----------2007-7-27 2 2007-8-12007-7-27 2 2007-8-1SQL> select add_time,round (add_time,'dd') aa from peng3 2 where rownum<=2;ADD_TIME AA----------- -----------2007-7-27 2 2007-7-282007-7-27 2 2007-7-28[@more@]
lock_sga and pre_page_sga设置
使Oracle的SGA常驻物理内存 Oracle中的lock_sga和pre_page_sga这两个静态初始化文件参数是用来指示SGA如何使用操作系统内存的。在Linux上启动Oracle数据库的时候,如果设置了lock_sga=true,那么就有可能碰到如下的报错信息: SQL> startup; ORA-27102: out of memory Linux-x86_64 Error: 12: Cannot allocate memory 这是因为Linux操作系统对应用程序使用内存有一些限制,在SHELL中使用ulimit命令可以查看到如下的信息: [oracle@dev111 ~]$ ulimit -a | grep memory max locked memory (kbytes, -l) 32 max memory size
smon 和pmon区分
System MonitorProcess Name: SMONMax Processes: 1This process is responsible for instance recovery, if necessary, at instance startup. SMON also cleans up temporary segments that are no longer in use. It also coalesces contiguous free extents in dictionary managed tablespaces that have PCTINCREASE set to a non-zero value. SMON wakes up about every 5 minutes to perform housekeeping activities. SMON must always be running for an instance.Process MonitorProcess Name: PMONMax Processes: 1This process
SYS/SYSTEM密码丢失、解决
SYS/SYSTEM密码丢失、解决说明:最近公司让我维护一台新的服务器这台服务器数据库是ORACLE 9I让我为难的是,公司之前的维护者尽然没有留下用户密码!我根本没有办法登录。我想采用默认登录修改密码,但是确显示 no privilegesconn /as sysdbano privileges编辑:sqlnet.ora SQLNET.AUTHENTICATION_SERVICES= (NTS)将NTS修改为NONE也报上面的错误。这个办法没有成功,至今还没有弄明白,如果那个高人能指导我,不胜感激!1:之前碰到类似的问题,我是这样修改的: sqlplus /nologconn /as sysdba;alter user system identified by 123;2:最
ALERT.LOG查找、编辑、CP、清空
ALERT.LOG查找、编辑、CP、清空我用的是公司的服务器,作如下示范:DBA每天首要工作是要查看ALERT.LOG,这里会涉及查找ALERT_SID.LOG的位置,以及如何查看ALERT_SID.LOG,如何备份,如何定期清空日志,熟悉看日志的DBA都知道日志会不断增长,如果不定期清空,如果报错很多,就会日志增长非常快,而且VI打开的时候,比较繁琐;1:查找ALERT.log的位置:ORACLE用户登录数据库[oracle@DELL /]$ iduid=500(oracle) gid=500(oinstall) groups=500(oinstall),501(dba)[oracle@DELL /]$ sqlplus /nologSQL*Plus: Release 9.2.0.6.0 - Production o
redo在线增加日志组合成员
数据在写入数据文件,即写入磁盘之前,都是脏数据,脏数据保存在缓存区里,即保存在内存里面,数据在写入磁盘前,也即保存在重做日志文件里面,所有日志文件的大小显得很重要!经常由于日志组不够大,日志组成员少,日志组少,所有日志全部写满了,都还来不及checkpoint,还没有来得及写入数据文件就会造成数据库严重堵塞,甚至down.数据----脏数据——buffer_cache-----DBWR------数据文件1:查看日志组合成员SQL> select * from v$logfile; GROUP# STATUS TYPE---------- -------------- --------------MEMBER
索引总结(四)
6. 什么是复合索引6.1 复合索引定义 索引可以包含一个、两个或更多个列。两个或更多个列上的索引被称作复合索引。利用索引中的附加列,您可以缩小搜索的范围,但使用一个具有两列的索引不同于使用两个单独的索引。复合索引的结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏对进行排序,然后按名字对有相同姓氏的人进行排序。如果您知道姓,电话簿将非常有用;如果您知道姓和名,电话簿则更为有用,但如果您只知道名不姓,电话簿将没有用处。所以说创建复合索引时,应该仔细考虑列的顺序。对索引中的所有列执行搜索
索引总结(三)
4. 聚集索引和非聚集的区别聚集索引和非聚集索引的根本区别是数据记录的排列顺序和索引的排列顺序是否一致,聚集索引表记录的排列顺序与索引的排列顺序一致,优点是查询速度快,因为一旦具有第一个索引值的纪录被找到,具有连续索引值的记录也一定物理的紧跟其后,从而缩小了搜索范围,对于返回某一范围的数据效果最好。聚集索引的缺点是对表进行修改速度较慢,这是为了保持表中的记录的物理顺序与索引的顺序一致,而把记录插入到数据页的相应位置,必须在数据页中进行数据重排,降低了执行速度。 非聚集索引指定了表中记录的逻辑
索引总结(二)
2. 什么是聚集索引2.1 聚集索引定义聚集索引是根据数据行的键值在表中排序存储数据行。索引定义中包含聚集索引列。每个表只能有一个聚集索引。只有当表包含聚集索引时,表中的数据行才按排序顺序存储。如果表具有聚集索引,则该表称为聚集表。如果表没有聚集索引,则其数据行存储在一个称为堆的无序结构中。2.2 聚集索引的结构对于某个聚集索引,索引指向该聚集索引某个特定分区(数据页)的顶部。SQL Server 将在索引中向下移动以查找与某个聚集索引键对应的行。原因是聚集索引的索引顺序就是数据排列顺序。
MINUS命令解析
minus用法:A表 MINUS B表,选择A表中不包含B表的内容;也就是选择:A表有的内容,而B表没有的内容;表peng,和表peng2一模一样;SQL> select count(*) from peng; COUNT(*)---------- 10000SQL> select count(*) from peng2; COUNT(*)---------- 10000SQL> select sheet_no,corpid ,depot_code from peng 2 minus 3 select sheet_no,corpid,depot_code from peng2 4 where rownum<=9990 5 ;SHEET_NO CORPID DEPOT_CODE-------------------- -------------------- ------------