姿姿霸霸~~!
贵在坚持!
posts - 106,  comments - 50,  trackbacks - 0

1.NESTED LOOP

 对于被连接的数据子集较小的情况,nested loop连接是个较好的选择。nested loop就是扫描一个表,每读到一条记录,就根据索引去另一个表里面查找,没有索引一般就不会是 nested loops。
一般在nested loop中, 驱动表满足条件结果集不大,被驱动表的连接字段要有索引,这样就走nstedloop。如果驱动表返回记录太多,就不适合nested loops了。如果连接字段没有索引,则适合走hash join,因为不需要索引。
可用ordered提示来改变CBO默认的驱动表,可用USE_NL(table_name1 table_name2)提示来强制使用nested loop。


2.HASH JOIN

 hash join是CBO 做大数据集连接时的常用方式。优化器扫描小表(或数据源),利用连接键(也就是根据连接字段计算hash 值)在内存中建立hash表,然后扫描大表,每读到一条记录就来探测hash表一次,找出与hash表匹配的行。
当小表可以全部放入内存中,其成本接近全表扫描两个表的成本之和。如果表很大不能完全放入内存,这时优化器会将它分割成若干不同的分区,不能放入内存的部分就把该分区写入磁盘的临时段,此时要有较大的临时段从而尽量提高I/O 的性能。临时段中的分区都需要换进内存做hash join。这时候成本接近于全表扫描小表+分区数*全表扫描大表的代价和。
    至于两个表都进行分区,其好处是可以使用parallel query,就是多个进程同时对不同的分区进行join,然后再合并。但是复杂。
使用hash join时,HASH_AREA_SIZE初始化参数必须足够的大,如果是9i,Oracle建议使用SQL工作区自动管理,设置WORKAREA_SIZE_POLICY 为AUTO,然后调整PGA_AGGREGATE_TARGET即可。
以下条件下hash join可能有优势:
两个巨大的表之间的连接。
在一个巨大的表和一个小表之间的连接。
可用ordered提示来改变CBO默认的驱动表,可用USE_HASH(table_name1 table_name2)提示来强制使用hash join。


3.SORT MERGE JOIN

sort merge join的操作通常分三步:对连接的每个表做table access full;对table access full的结果进行排序;进行merge join对排序结果进行合并。sort merge join性能开销几乎都在前两步。一般是在没有索引的情况下,9i开始已经很少出现了,因为其排序成本高,大多为hash join替代了。
通常情况下hash join的效果都比sort merge join要好,然而如果行源已经被排过序,在执行sort merge join时不需要再排序了,这时sort merge join的性能会优于hash join。
在全表扫描比索引范围扫描再通过rowid进行表访问更可取的情况下,sort merge join会比nested loops性能更佳。
可用USE_MERGE(table_name1 table_name2)提示强制使用sort merge join。

4.半连接
nested loops semi是nested loop连接的变种,又叫半连接。原理与nl相同,通常用于in,exist操作,这种操作join时候,通常查找到一条纪录就可以了,所以用semi表示。与semi相似的有一种叫anti,反连接,一般用于not in,not exists,也有nest loop anti和hash anti两种。

5.星形

常用于OLAP系统

posted @ 2010-12-19 23:49 xrzp 阅读(215) | 评论 (0)编辑 收藏
1.观察cache size,观察主机内存情况,判断SGA的内存分配是否合理
2.观察load profile的transaction情况,判断系统的繁忙程度
3.观察load profile的parse和hard prase值,观察是否存在过多的硬解析
4.观察top5 timed event查看系统的瓶颈所在
5.关注6个order by的sql语句
posted @ 2010-12-19 23:15 xrzp 阅读(427) | 评论 (0)编辑 收藏
     摘要:         TABLE函数可接受查询语句或游标作为输入参数,并可输出多行数据。该函数可以平行执行,并可持续输出数据流,被称作管道式输出。应用TABLE函数可将数据转换分阶段处理,并省去中间结果的存储和缓冲表.         TABLE函数(它...  阅读全文
posted @ 2010-12-19 22:53 xrzp 阅读(1655) | 评论 (1)编辑 收藏
配置 ASMLib,遇到一个问题,如图:


可能的问题:
1.linux的selinux没有关闭
2.驱动不对.

1.关闭selinux
vi /etc/sysconfig/selinux
# This file controls the state of SELinux on the system. 
# SELINUX= can take one of these three values: 
#       enforcing - SELinux security policy is enforced. 
#       permissive - SELinux prints warnings instead of enforcing. 
#       disabled - SELinux is fully disabled. 

SELINUX=disabled 
# SELINUXTYPE= type of policy in use. Possible values are: 
#       targeted - Only targeted network daemons are protected. 
#       strict - Full SELinux protection. 

SELINUXTYPE=targeted
再重启:
[root@rac1 ~]#  setenforce 0
[root@rac1 ~]#  /usr/sbin/sestatus
[root@rac1 ~]# reboot

2.如果第一个不能解决问题,再查看驱动是否正确.
[root@rac1 ~]# ll
total 2084
drwxr
-xr-x  2 root root    4096 Dec  5 15:37 Desktop
-rw-r--r--  1 root root    1462 Dec  5 15:29 anaconda-ks.cfg
-rw-r--r--  1 root root   54768 Dec  5 15:29 install.log
-rw-r--r--  1 root root   69369 Dec  5 15:29 install.log.syslog
-rwxrwxr-x  1 root root  330867 Dec  6 00:43 ocfs2-2.6.9-78.EL-1.2.9-1.el4.i686.rpm
-rwxrwxr-x  1 root root 1044312 Dec  6 00:53 ocfs2-tools-1.2.7-1.el4.i386.rpm
-rwxrwxr-x  1 root root  173056 Dec  6 00:51 ocfs2console-1.2.7-1.el4.i386.rpm
-rwxrwxr-x  1 root root  132372 Dec  5 21:09 oracleasm-2.6.9-78.EL-2.0.5-1.el4.i686.rpm
-rwxrwxr-x  1 root root   82542 Dec  5 21:11 oracleasm-support-2.1.3-1.el4.i386.rpm
-rwxrwxr-x  1 root root   13105 Dec  5 21:11 oracleasmlib-2.0.4-1.el4.i386.rpm
注意标黄色的这个驱动应该为:oracleasm-2.6.9-78.ELsmp-2.0.5-1.el4.i686.rpm..
去oracle官网上找到该驱动并下载下来,重新安装.
[root@rac1 ~]# rpm -ivh oracleasm-2.6.9-78.ELsmp-2.0.5-1.el4.i686.rpm
warning: oracleasm-2.6.9-78.ELsmp-2.0.5-1.el4.i686.rpm: V3 DSA signature: NOKEY, key ID b38a8516
Preparing
                ########################################### [100%]
   1:oracleasm-2.6.9-78.ELsm########################################### [100%]

搞定:
posted @ 2010-12-07 00:43 xrzp 阅读(206) | 评论 (0)编辑 收藏

ORA-12514可能的原因:
1.主机没有启动数据库
2.主机有多个ip地址,没在/etc/hosts中配置全
3.监听器配置错误,一劳永逸的方法是采用静态注册的方式

SID_LIST_LISTENER =
  (SID_LIST 
=
    (SID_DESC 
=
      (SID_NAME 
= PLSExtProc)
      (ORACLE_HOME 
= /home/db/oracle/product/10.2.0)
      (PROGRAM 
= extproc)
    )
    
    (SID_DESC 
=
      (GLOBAL_DBNAME  
= test1)
      (ORACLE_HOME 
= /home/db/oracle/product/10.2.0)
      (SID_NAME  
= test1)
    )
  )
posted @ 2010-07-05 14:51 xrzp 阅读(211) | 评论 (0)编辑 收藏
硬解析需要更多的内存空间, 更多的并发控制对于频繁执行的语句性能会显著的降低,所以对相似的语句只有某些数值变化的语句改写成完全相同的文本,我们称其为绑定.

手工绑定:
EXECUTE IMMEDIATE 'UPDATE EMPLOYEE SET sal = :new_sal'  USING v_sal; 

不绑定:
EXECUTE IMMEDIATE 'UPDATE EMPLOYEE SET sal ='||new_sal;

系统绑定:
CURSOR_SHARING
exact:文本完全相同的SQL语句才可共享cursor, exact必须精确
force:server 端强制绑定变量
similar:存在histogram(直方图)时对于不同的变量值重新解析,相当于SIMILAR=EXACT, 不存时与force一样
posted @ 2010-06-20 21:45 xrzp 阅读(152) | 评论 (0)编辑 收藏

1.

SQL> create table testlong(l1 long,id int);

表已创建。

SQL
>
SQL
> insert into testlong values('aaaaaaaa',1);

已创建 
1 行。

SQL
> commit;

提交完成。
2.
SQL>
SQL
> create table testcopylong as select * from testlong;
create table testcopylong as select * from testlong
                                    
*
第 
1 行出现错误:
ORA
-00997: 非法使用 LONG 数据类型
3.
SQL> create table testcopylong(l1 long,id int);

表已创建。

SQL
> copy from scott/tiger append testcopylong using select * from testlong;
SP2
-0519FROM 字符串缺失 Oracle Net @database 描述
SQL
> copy from scott/tiger@test_10.10.10.1 append testcopylong using select * from testlong;

数组提取
/绑定大小为 15。(数组大小为 15)
将在完成时提交。(提交的副本为 
0)
最大 
long 大小为 80。(long 为 80)
1 行选自 scott@test_10.10.10.1
   
1 行已插入 TESTCOPYLONG。
   
1 行已提交至 TESTCOPYLONG (位于 DEFAULT HOST 连接)。
4.
SQL> select * from testcopylong;

L1                 ID
---------- ----------
aaaaaaaa            1
posted @ 2010-06-09 14:09 xrzp 阅读(282) | 评论 (0)编辑 收藏
1.查看表的使用情况的一些指标
SELECT TABLE_NAME,--表名
       BLOCKS,--总的块数
       EMPTY_BLOCKS,--空块数
       PCT_FREE,--不解释
       NUM_ROWS,--表的行数
       AVG_USED_BLOCKS,--平均使用的块数
       CHAIN_PER,--行迁移OR行链接数
       GREATEST(ROUND(100 * (NVL(HWM - AVG_USED_BLOCKS, 0/
                      GREATEST(NVL(HWM, 
1), 1)),
                      
2),
                
0) WASTE_PER --浪费的百分比
  FROM (SELECT B.TABLE_NAME,
               A.BLOCKS,
               B.EMPTY_BLOCKS,
               B.PCT_FREE,
               B.NUM_ROWS,               
               (A.BLOCKS 
- B.EMPTY_BLOCKS - 1) HWM,
               
ROUND((B.AVG_ROW_LEN * NUM_ROWS * (1 + (PCT_FREE / 100))) / 8192,
                     
0AS AVG_USED_BLOCKS,
               
ROUND(100 *
                     (NVL(B.CHAIN_CNT, 
0/ GREATEST(NVL(B.NUM_ROWS, 1), 1)),
                     
2) CHAIN_PER
        
          
FROM DBA_SEGMENTS A, DBA_TABLES B
         
WHERE A.OWNER = B.OWNER
           
AND A.SEGMENT_NAME = B.TABLE_NAME
              
--AND A.SEGMENT_TYPE = 'TABLE'
           AND A.TABLESPACE_NAME = B.TABLESPACE_NAME
           
AND B.TABLESPACE_NAME = '表空间名字')

2.其中的8192可以查DBA_TABLESPACES (TS$)获取
SELECT T.TABLESPACE_NAME,T.BLOCK_SIZE FROM DBA_TABLESPACES T

posted @ 2010-06-04 15:01 xrzp 阅读(204) | 评论 (0)编辑 收藏
Oracle 10g默认的归档日志存放在flash_recovery_area,如果归档日志超过了默认值的大小,则会报ORA-16014的错误.

1.出错
SQL*Plus: Release 10.2.0.2.0 - Production on Sun May 30 10:32:43 2010

Copyright (c) 
19822005, Oracle.  All Rights Reserved.


Connected 
to:
Oracle 
Database 10g Enterprise Edition Release 10.2.0.2.0 - Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining options
SQL
> startup mount
ORACLE instance started.

Total System Global Area  
285212672 bytes
Fixed Size                  
1260396 bytes
Variable Size              
96470164 bytes
Database Buffers          180355072 bytes
Redo Buffers                
7127040 bytes
Database mounted.
SQL
> alter database open
  
2  /
alter database open
*
ERROR at line 
1:
ORA
-16014log 1 sequence# 86 not archived, no available destinations
ORA
-00312: online log 1 thread 1'/u01/app/oracle/oradata/orcl/redo01.log'


2.查看归档日志区的大小
SQL> show parameter db_rec

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      /u01/app/oracle/flash_recovery
                                                 _area
db_recovery_file_dest_size           big 
integer 2G
db_recycle_cache_size                big 
integer 0

3.检查flash recovery area的使用情况
SQL> select * from v$flash_recovery_area_usage;

FILE_TYPE    PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
------------ ------------------ ------------------------- ---------------
CONTROLFILE                   0                         0               0
ONLINELOG                     
0                         0               0
ARCHIVELOG                
98.77                         0              52
BACKUPPIECE                   
0                         0               0
IMAGECOPY                     
0                         0               0
FLASHBACKLOG                  
0                         0               0

6 rows selected.

SQL
> select sum( PERCENT_SPACE_USED )*3/100 from v$flash_recovery_area_usage;

SUM(PERCENT_SPACE_USED)*3/100
-----------------------------
                       2.9631


4.计算后,发现使用了2.96G>2G,将值设为4G,重新启动,成功
SQL> alter system set db_recovery_file_dest_size =4G;

System altered.

SQL
> alter database open;

Database altered.

SQL
>
posted @ 2010-05-30 13:02 xrzp 阅读(733) | 评论 (0)编辑 收藏
1. create user aaa identified by 123 123需要用引号
2. 查看当前有什么权限,查看session_privs
3. 查看当前有什么角色,查看session_roles
4. 让用户的口令失效alter user xxx password expire
5. 回收的系统权限不递归,对象权限会级联
6. create database时,如果文件已经存在,不能直接覆盖原来文件,使用REUSE语句
7. alter system disable/enable restricted session;

posted @ 2010-05-23 21:37 xrzp 阅读(137) | 评论 (0)编辑 收藏
仅列出标题
共11页: First 上一页 2 3 4 5 6 7 8 9 10 下一页 Last 

<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿(4)

随笔分类

随笔档案

好友的blog

搜索

  •  

积分与排名

  • 积分 - 115112
  • 排名 - 505

最新评论

阅读排行榜

评论排行榜