发表于: lnmp | 作者: | 日期: 2009/10/29 03:10
标签: ,

命令简介
tar是linux/unix下的打包、压缩及解压缩工具。利用tar命令,用户可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。 tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案,如软盘。利用tar命令,也可以把一大堆的文件和目录全部打包成一个文件(这才是tar最重要的作用),这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。 More …

发表于: os/software | 作者: | 日期: 2009/10/02 08:10
标签:

清理系统的系统的时候不小心把firefox的配置文件夹给删除了,后悔不跌。我是删除之后发现firefox被打回原形才知道犯错的。

配置文件是 Firefox 存放各项设置的地方,除此之外,浏览网页时存放的缓存、安装的扩展和主题也在其中。如果想将 Firefox 恢复到初始状态,只需删除配置文件夹即可。

对于winXP用户而言,个人配置文件夹的位置是:C:\Documents and Settings\[User Name]\Application Data\Mozilla\Firefox\Profiles\xxxxxxxx.default\
More …

评论关闭
发表于: DB/ES | 作者: | 日期: 2009/9/02 01:09
标签: ,

虽然索引并不总会快于全表扫描,但是很多时候我们希望Oracle使用索引来执行某些SQL,这时候我们可以通过index hints来强制SQL使用index.

Index Hints的格式如下:

/*+ INDEX ( table [index [index]…] ) */

More …

评论关闭
发表于: DB/ES | 作者: | 日期: 2009/9/02 10:09

Oracle在执行一个SQL之前,首先要分析一下语句的执行计划,然后再按执行计划去执行。分析语句的执行计划的工作是由优化器(Optimizer)来完成的。不同的情况,一条SQL可能有多种执行计划,但在某一时点,一定只有一种执行计划是最优的,花费时间是最少的。相信你一定会用Pl/sql Developer、Toad等工具去看一个语句的执行计划,不过你可能对Rule、Choose、First rows、All rows这几项有疑问,因为我当初也是这样的,那时我也疑惑为什么选了以上的不同的项,执行计划就变了?

1、优化器的优化方式
Oracle的优化器共有两种的优化方式,即基于规则的优化方式(Rule-Based Optimization,简称为RBO)和基于代价的优化方式(Cost-Based Optimization,简称为CBO)。

A、RBO方式:优化器在分析SQL语句时,所遵循的是Oracle内部预定的一些规则。比如我们常见的,当一个where子句中的一列有索引时去走索引。

B、CBO方式:依词义可知,它是看语句的代价(Cost)了,这里的代价主要指cpu和内存。优化器在判断是否用这种方式时,主要参照的是表及索引的统计信息。统计信息给出表的大小、有多少行、每行的长度等信息。这些统计信息起初在库内是没有的,是你在做analyze后才出现的,很多的时侯过期统计信息会令优化器做出一个错误的执行计划,因些我们应及时更新这些信息。在Oracle8及以后的版本,Oracle列推荐用CBO的方式。

我们要明了,不一定走索引就是优的 ,比如一个表只有两行数据,一次IO就可以完成全表的检索,而此时走索引时则需要两次IO,这时对这个表做全表扫描(full table scan)是最好的。
More …

评论关闭
发表于: DB/ES | 作者: | 日期: 2009/8/30 09:08
标签: ,

如何监控索引的使用?  
研究发现,oracle数据库使用的索引不会超过总数的25%,或者不易他们期望被使用的方式使用。通过 监控数据库索引的使用,释放那些未被使用的索引,从而节省维护索引的开销,优化性能。

1、在oracle8i中,确定使用了那个索引的方法意味着要对存在语共享SQL区中的所有语句运行EXPLIAN PALN,然后查询计划表中的OPERATION列,从而识别有OBJECT_OWNER和OBJECT_NAME列所确定的那个索引上的索引访问。
下面是一个监控索引使用的脚本,这个脚本仅仅是一个样品,在某种条件下成立:

条件:
运行这个脚本的用户拥有权限解释所有的v$sqlarea中的sql,除了不是被SYS装载的。
plan_table.remarks能够别用来决定与特权习惯的错误。
对所有的共享池中SQL,参数OPTIMIZER_GOAL是一个常量,无视v$sqlarea.optimizer_mode。
两次快照之间,统计资料被再次分析过。
没有语句别截断。
所有的对象都是局部的。
所有被引用的表或视图或者是被运行脚本的用户所拥有,或者完全有资格的名字或同义词被使用。
自从上次快照以来,没有不受”欢迎”的语句被冲洗出共享池(例如,在装载)。
对于所有的语句, v$sqlarea.version_count = 1 (children)。
More …

评论关闭
发表于: DB/ES | 作者: | 日期: 2009/8/30 09:08
标签: ,

本文只讨论Oracle中最常见的索引,即是B-tree索引。本文中涉及的数据库版本是Oracle8i。
一. 查看系统表中的用户索引
在Oracle中,SYSTEM表是安装数据库时自动建立的,它包含数据库的全部数据字典,存储过程、包、函数和触发器的定义以及系统回滚段。

一般来说,应该尽量避免在SYSTEM表中存储非SYSTEM用户的对象。因为这样会带来数据库维护和 管理 的很多问题。一旦SYSTEM表损坏了,只能重新生成数据库。我们可以用下面的语句来 检查 在SYSTEM表内有没有其他用户的索引存在。

select count(*) from dba_indexes
where tablespace_name = “SYSTEM”
and owner not in (“SYS”,”SYSTEM”)

More …

评论关闭
发表于: DB/ES | 作者: | 日期: 2009/8/30 09:08

oracle的普通视图不能创建索引,下面是一个测试。

oracle版本:Oracle9i Enterprise Edition Release 9.2.0.6.0

使用sale表,表结构如下:

SQL> desc sale;
Name Type Nullable Default Comments
—– ——- ——– ——- ——–
MONTH CHAR(6) Y
SELL NUMBER Y

More …

评论关闭
发表于: DB/ES | 作者: | 日期: 2009/8/30 08:08

当where子句对某一列使用函数时,除非利用这个简单的技术强制索引,否则Oracle优化器不能在查询中使用索引。

通常情况下,如果在WHERE子句中不使用诸如UPPER、REPLACE 或SUBSTRD等函数,就不能对指定列建立特定的条件。但如果使用了这些函数,则会出现一个问题:这些函数会阻碍Oracle优化器对列使用索引,因而与采用索引的情况相比较,查询会花费更多的时间。

庆幸的是,如果在使用函数的这些列中包含了字符型数据,可以用这样一种方法修改查询语句,以达到强制性使用索引,更有效地运行查询。这篇文章介绍了涉及的技术,并说明了在两种典型情况下怎样实现。
More …

评论关闭
发表于: DB/ES | 作者: | 日期: 2009/8/29 08:08

函数索引的概念:
基于函数的索引也是8i以来的新产物,它有索引计算列的能力,它易于使用并且提供计算好的值,在不修改应用程序的逻辑上提高了查询性能。使用基于函数的索引有几个先决条件:

(1)
必须拥有QUERY REWRITE(本模式下)或GLOBAL QUERY REWRITE(其他模式下)权限。
(2)
必须使用基于成本的优化器,基于规则的优化器将被忽略。
(3)
必须设置以下两个系统参数:

  1. QUERY_REWRITE_ENABLED=TRUE
  2. QUERY_REWRITE_INTEGRITY=TRUSTED

More …

评论关闭
发表于: DB/ES | 作者: | 日期: 2009/8/29 08:08
标签:

由于SQL优化起来比较复杂,并且还会受环境限制,在开发过程中,写SQL必须必须要遵循以下几点的原则:

1.ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾

例如:

(低效)

SELECT … FROM emp e
WHERE SAL > 50000 AND JOB = ‘MANAGER’ AND 25 < (SELECT COUNT(*) FROM emp WHERE mgr=e.empno);

(高效)

SELECT … FROM emp e
WHERE 25 < (SELECT COUNT(*) FROM emp WHERE mgr=e.empno) AND SAL > 50000 AND JOB = ‘MANAGER’;

More …

评论关闭