安装oracle时图形界面弹出不来或乱码的解决方法
安装oracle时遇到过两个图形界面的问题。[@more@]一个是在hpux11.31上安装oracle 10g时,runInstaller图形界面出不来(xclock界面却能出来),日志也没有任何报错信息。Oracle 10g 自带的是jdk1.3,我们分析可能是java版本较低的缘故。改用jre1.5就可以了界面就出来了。runInstaller -jreLoc /opt/java1.5/jre 同样,dbca也图形界面弹不出来的问题。修改dbca文件指定jre1.5即可JRE_DIR=/opt/java1.5/jre#JRE_DIR=/oracle/OraHome_1/jdk/jre另一个图形界面问题是乱码。可修改LANG设置再安装。export LC=Cexport LC_ALL=Cexport LANG=C./run
Sql优化(二十二) 自动调优工具:sql tuning advisor和sql profile介绍
Sql优化是有一定难度的工作,需要dba具有扎实的知识和较丰富的经验。在oracle10g以后,引入了一些自动调优技术,包括sql tuning advisor、sql access advisor、ADDM等,不需要了解JOIN的类型、次序,也不需了解优化器,新手也能用这些工具进行一些优化工作。随着自动管理、自动监控技术的发展,今后dba这一职业是否会消失呢?[@more@]本篇介绍如何用sql tuning advisor来创建sql profile对sql进行调优。(一) Sql tuning advisorSql tuning advisor可以在enterprise manager图形界面中调用,也可通过过程包调用。使用方法见后面的例子。以下
library cache: mutex等待事件分析方法及案例
mutex是11g中采用的轻量级锁,替代latch(更轻量,更细粒度)。其中mutex X表示eXclusive模式,如果是mutex s则是共享模式。引起library cache mutex冲突的原因很多。[@more@]一、 Library cache: mutex等待事件产生常见原因:l os资源不足(cpu、内存)l sga设置不合理,shared_pool不足,或动态调整导致hard parsel hot object contentionl hard parsel sql high version count 由于子游标太多,扫描时会形成锁l library cache object失效导致重编译l bug二、 诊断方法1. 首先检查os资源如cpu内存是否存在不足2. 其次,检查是否存在Hot obje
用隐含参数_corrupted_rollback_segments打开数据库后遇到的离奇问题
某用户反映了一个奇怪现象:Select sum(cost),name from test_table where name='A' group by name;Select sum(cost),name from test_table group by name;显示结果中name='A'的值和上面sql统计结果不同。数据库'疯了'吗?[@more@]用户回忆说之前服务器遭遇断电,数据库undo表空间受损。之后使用_corrupted_rollback_segments参数强制打开数据库,并重建了undo表空间,数据库继续使用。于是在运行业务报表时发现某些统计出错(类似上面sql的情况)。因此我们怀疑查询的异常和数据库的这一故障恢复有关。重建数据库后,这一问题就不再出现了
Sql优化(二十) 绑定变量用法、适用场合
在Sql优化(六)中,我们讨论过使用绑定变量的重要性:如果不使用绑定变量而使用常量,会导致大量硬解析。由于硬解析的种种危害,tom认为不使用绑定变量往往是影响oracle性能和扩展性的最大问题一、 错误写法和正确...
Sql优化(十八) 调优工具(1)set autotrace和excute plan table
我们介绍一些常用的sql调优工具。sql调优工具有很多,大同小异,有些图形工具很好用。但Dba了解基本工具也很重要,一方面便于理解基本原理,另一方面你总不好意思让客户先安装enterprise manager之类的工具先吧。也...
Sql优化(十七) 常用开发语言中的数组设置
上篇介绍了sqlplus的arraysize和plsql中bulk collect技术对性能的影响,在PLSQL、oci、java、proc等专业开发语言中都有设置数组访问的方法,本篇仅简单介绍,具体请看oracle应用开发文档。一.PLSQL中的bulk binding...
Sql优化(十六) 使用数组技术提升性能
客户端Arraysize的设置实际上可以理解为设置数组的大小来保存sql调用的返回值。设置适当的arraysize有几个好处:1. 减少读data block的次数,也就是consistent gets的次数。假设一个block有n行,如果每次取一行,则...
Sql优化(十四)分布式环境中的优化(2)选择合适的驱动节点(driving site hint)
在分布式环境中,sql访问多个数据库中的表,优化器需要选择一个运算节点,将其他节点的数据传送到运算节点再执行sql。由于本地数据库无法知道远程数据库表的统计信息,因此会采用假设,例如假设远程表的记录数为100...
Sql优化(十三)分布式环境中的优化(1)合理设计数据流
在分布式环境中经常需要通过dblink在系统之间访问数据。通过dblink,编程人员可以访问在一个sql语句中访问多个数据库中的表,就好像在一个数据库中一样。那么分布式环境中编写sql需要注意什么呢?Dblink的访问对数据...
Sql优化(十二)避免数据重复扫描(2) 使用with as子句提高性能
上篇介绍了几种避免对数据重复扫描的sql写法,本篇介绍利用复杂子查询with as来提高sql性能。先看个例子:WITH dept_costs AS (SELECT d.department_name, SUM(e.salary) AS dept_total FROM employees e JOIN depar...
Sql优化(十一) 避免对数据的重复扫描(1)
对数据的读取操作是非常消耗资源的,如何减少对数据的扫描,是提升sql效率的一个重要方面,例如物化视图技术。本篇介绍几种sql写法,分别是CASE expression/DML with returning clause /multitable insert。[@more@]一、 用CASE EXPRESSION将多句查询组合在一起SELECT COUNT (*)FROM employeesWHERE salary < 2000;SELECT COUNT (*)FROM employeesWHERE salary BETWEEN 2000 AND 4000;SELECT COUNT (*)FROM employeesWHERE salary>4000;改写成SELECT COUNT (CASE WHEN salary < 2000 THEN 1 ELSE null END) count1, COUNT (CASE WHE
Sql优化(十) 程序的可扩展性—sequence上的竞争
提高程序可扩展性一定要减少各类资源冲突 某批处理进程中有一个步骤,单进程运行10分钟,10个进程时运行超过3小时,即使使用parallel参数也无法提高速读,是cpu资源不足吗?语句如下: [@more@]create table test_table asselect to_number(substr(bpid,1, 11)) ACCOUNT_NO,bill_ref_no,statement_date,seq_bid_row.nextval BILL_INVOICE_ROW,prd_inst_id SUBSCR_NO,main_devno USER_ID,…from BILL_TABLE; (千万记录级别)通过监控发现系统资源并没有非常紧张,而是产生大量row cache lock的等待事件,进一步发现这个等待事件和se
Sql优化(九) 程序的可扩展性-- 短连接的危害,以及数据库连接(connection)管理
在官方文档《oracle performance tuning guide》中提到Connecting to the database is an expensive operation that is highly unscalable。数据库的连接操作是昂贵的,且难以扩展(支持大量并发)。感觉上一个数据库登录操作是瞬间的事,它有多昂贵呢?简单说,监听器收到远程连接请求后,转给server process;对于每个session数据库都会生成一个server process,要为session分配内存,要进行鉴权、审计…[@more@]另外在一个session中,可以采用一些方法重用游标,例如PLSQL程序,所有static sql都是被cache的,重复调用时不会进行soft par
Sql优化(八):程序的可扩展性----direct insert的副作用
本篇继续介绍不合理设计导致程序可扩展性差的例子。 数据库运行出账程序时,出现enq: TM - contention等待事件,主要原因是多个进程在insert bill_invoice_*时,使用了insert /*+ append*/这一方式,本来想通过append即direct insert方式提升速度,结果产生表级锁。这样开帐进程相互等待,实际上是变成串行的操作了,反而影响了速度。更严重的是,如果是生产系统,还会导致账单表上所有修改操作都无法进行,影响其他重要业务,这个后果就很严重了。[@more@]Direct insert这一用法有其速度快的优点,但也有其缺点,必须注意适用场合
Sql优化(七):程序的可扩展性----insert进程产生的争用
应用设计不合理导致的session之间的互锁(enqueue)是影响程序可扩展性最常见的原因。此外,一些共享资源的争用,也会导致性能下降。本篇介绍两个由并发insert操作导致的等待事件(wait event),以及如何通过优化物理设计来进行改善。普通Insert操作本身产生的是行锁,因此进程相互之间不会锁住(enqueue),但当很多进程insert同一张表时,会有资源上冲突。以下是两个例子:[@more@]1. Buffer busy wait批量进程insert test_table表,当进程多时(超过100个)速度明显下降。在awr报告中看到(等待事件占了93%,cpu占0.95%。也就是说全都在等了,
Sql优化(六)程序可扩展性:soft parse/hard parse,以及为什么要使用绑定变量
有时单个sql运行效率还不错,但程序一发布,并发进程多了后,系统就运行很慢,这说明程序的扩展性较差。程序扩展性(scalability)差的原因有很多,例如设计不合理导致的互锁。除了锁之外,硬解析也是一个重要原因。硬解析会造成服务器cpu资源紧张,tom甚至认为不使用绑定变量往往是影响oracle性能和扩展性的最大问题。[@more@]一、 soft parse和hard parse当oracle执行一句sql时,会先在library cache中进行匹配(相同sql是否运行过?),如果匹配成功则直接使用,这称为soft parse;如果匹配失败,则需要parse,name resolved,security-chec
Sql优化(五) hint(提示)介绍
上篇介绍了oracle优化器。尽管oracle优化器很智能,但有时候你想自己选择执行计划,可以通过hint实现。在开发测试环境中,可以通过hint测试不同执行计划的性能。Hint的缺点是增加了管理代码的额外负担,当数据库或环境发生变化时,如果不修改hint,可能导致性能下降。例如,代码中用hint指定索引,但重建索引时索引名变化。因此oracle建议使用hint测试性能后,用其他工具来管理执行计划,如oracle 10g以后的sql tuning advisor或sql plan baseline。但hint仍旧是很常用的优化手段,特别是有些动态sql,表名不固定,就无法使用sql plan等工
Sql优化(四) oracle优化器(optimizer)介绍
对于一句sql,oracle可以有不同的执行方法,例如full table scan或者走索引,nested loop join或者hash join等等。Oracle的优化器负责选择合适的执行计划。1. 什么是优化器:当oracle对Sql进行解析时,优化器用来决定sql的执行计划(execute plan).2. RBO和CBORBO(rule based optimizer)是基于规则的优化器,即优化器在分析SQL语句时,所遵循的是Oracle内部预定的一些规则,如主键优先于普通索引;CBO(cost based optimizer)是基于代价的,这里的代价主要指Cpu和内存。优化器在判断是否用这种方式时,主要参照表的统计信息(通过analyze得到)
Sql优化(三) 关于oracle的并发
Oracle的并发技术可以将一个大任务分解为多个小任务由多个进程共同完成。合理地使用并发可以充分利用系统资源,提高效率。一、 并发的种类Parallel queryParallel DML(PDML)Parallel DDL Parallel recovery[@more@]二、 适用场合适用parallel的两个条件 1)大的任务,如全表扫描大表这和日常生活中的经验是一样的,小任务自己完成都比派发任务省事 2)系统有足够的资源(cpu/io)换句话说,并发是在系统资源充足、用户少的系统上,为了充分利用系统资源以提高任务处理速度而设计的一种技术。以下是几种场景: 1)OLTP系统 有大量用户和se