oracle 11g性能优化攻略笔记
文章平均质量分 82
he3912377
这个作者很懒,什么都没留下…
展开
-
创建具有最优性能的数据库
问题:如何创建具有最优性能的数据库1、强制创建的每一个表空间都是本地管理的2、为每个用户自动分配一个默认的永久表空间3、为每个用户自动分配一个默认的临时表空间解决方案:使用下面的创建数据库脚本create database o11r2 maxlogfiles 16 maxlogmembers 4 maxdatafiles 1024 maxinst原创 2016-08-29 16:33:46 · 480 阅读 · 0 评论 -
数据加载速度最大化
问题描述:尽快的加载大量数据到一张表中解决方案:1、修改表的日志记录属性为nologging,会使直接路径生成的redo最小(对dml基本没有影响)2、使用直接路径加载 insert /*+ append */ into xxx select ... insert /*+ append_values*/ into xxx values create tabl原创 2016-09-06 18:50:44 · 715 阅读 · 0 评论 -
理解B树索引
问题描述:理解B树索引解决方案:有一张表:create table cust(cust_id number,first_name varchar2(10),last_name varchar2(20));由于经常使用last_name进行查询,在last_name上有一个索引create index idx_cust_lname on cust(last_name);加原创 2016-09-20 17:43:38 · 1332 阅读 · 0 评论 -
通过审计监控表的使用
问题描述:如何通过审计监控某些表是否被操作,包括插入,删除,更新,查询解决方案:使用oracle标准审计1、设置审计参数audit_trail2、重启数据库3、使用audit语句对特定操作进行审计audit的值为:none:禁用数据库审计os:启用审计,将审计信息写到操作系统文件db:启用审计,将审计信息写到SYS.AUD$表db_extended:启用原创 2016-09-20 11:25:34 · 534 阅读 · 0 评论 -
列级压缩数据(混合列式压缩)
问题描述:oracle的exadata存储支持混合列式压缩,能够提高io性能,减少select读取的块数解决方案:创建表时通过compress for query或compress for archive子句create table f_regs(reg_id number,reg_desc varchar2(1000)) compress for query;也可以指定压缩级别原创 2016-09-20 10:12:03 · 2963 阅读 · 0 评论 -
为所有dml压缩数据(oltp压缩)
问题描述:如何在oltp环境中为所有dml语句压缩数据解决方案:使用oracle oltp压缩创建表时使用compress for oltpcreate table regs(id number,name varchar2(1000)) compress for oltp;在11.2之前,compress for oltp使用compress for all opera原创 2016-09-19 17:48:26 · 380 阅读 · 0 评论 -
创建表时控制段延迟分配
问题描述:部署一个应用时,需要创建数千表和索引。如果每个表都分配段,你希望这些语句尽快运行完,不需要为每个表分配初始化空间解决方案:推迟初始段生成的唯一方法就是使用11gr2的段延迟分配,将出事物理空间分配推迟到第一条记录插入的时候。例子:create table f_regs(reg_id number,reg_name varchar2(200));查询表尚未分配任何空间s原创 2016-09-06 15:19:32 · 699 阅读 · 0 评论 -
压缩数据以进行直接路径加载
问题描述:dss系统(decision support system)环境中包含许多加载一次,然后频繁扫描的表,采用压缩可以节省io,带来额外的cpu消耗解决方案:使用oracle基本压缩特性将直接路径加载的数据压缩1、使用compress子句创建,修改或移动表时启用压缩2、通过直接路径方式(create table ... as select或insert /*+ app原创 2016-09-18 16:18:02 · 342 阅读 · 0 评论 -
收缩表
问题描述:段顾问显示一张表有大量闲置空间,如何释放来提高全表扫描的性能解决方案:1、启用行移动2、使用alter table ... shrink space语句释放空间收缩表功能要求表所在表空间是自动段空间管理在对一张表进行收缩时,需要移动数据行,需要启动行移动alter table inv enable row movement;收缩表alter tab原创 2016-09-18 14:23:00 · 263 阅读 · 0 评论 -
处理行链接
问题描述:你有一张表,其中的数据行可能存储在多个数据块中,这回增加IO使用率,减慢查询速度,你想使这些数据位于一个数据块中当表有显著的行链接问题时,手工执行段顾问建议,可得到以下输出select 'TASK_NAME :'||T1.TASK_NAME ||CHR(10)|| 'START_RUN_TIME :'||TO_CHAR(T1.EXECUTION_STAR原创 2016-09-13 16:22:02 · 383 阅读 · 0 评论 -
选择有益于性能的列类型
问题描述创建表时,应有合适的列类型及约束解决方案创建表时,考虑下面的特性1、如果一列总是存储数值型数据,那么将其数据类型设置为数值型。"01"和1是不同的,正确的类型可避免不必要的数据类型转换2、如果有明确的业务规则定义数值类型的长度,则照此实现,如number(7,2)。如果没有,则定义为number(38)3、对于长度可变的字符数据,使用varchar2而不原创 2016-09-01 15:04:11 · 228 阅读 · 0 评论 -
手工生成段顾问建议
问题描述:你有一张表做了大量数据更新,你发现这张表的查询速度有所下降,你怀疑有行链接问题,因此想手工生成段顾问建议解决方案:使用dbms_advisor可分析特定表空间的所有段,或者某个特定的对象(例如表或索引)1、创建一个任务2、为任务分配对象3、设置任务参数4、执行任务执行dbms_advisor需要advisor权限grant advisor to sco原创 2016-09-12 16:26:30 · 733 阅读 · 0 评论 -
匹配表类型与业务需求
问题描述:oracle提供了非常多的表类型供选择,根据特定的业务需求选择合适类型的表对于性能有很大的影响解决方案:oracle创建的表默认是堆组织表,大多数情况,堆组织表可以提供搞笑的数据存取,下面有其他一些表类型:堆组织表:默认的表类型,除非有特殊原因,否则就是用这种表索引组织表:数据存放在一个按照主键排序的索引结构中,通常用于按照主键查找临时表:用于在事物或者会话期原创 2016-08-31 10:50:15 · 540 阅读 · 0 评论 -
创建具有最优性能的表空间
问题:表空间是存储数据库对象的逻辑容器,在创建对象时不指定存储特性,则会继承表空间的存储特性,因此应如何创建可维护最优化的表空间解决方案:创建的表空间应具有如下特性(如果可以选择):1、本地管理2、ASSM(automatic segment space management),自动段空间管理使用下面的语句创建:create tablespace tools原创 2016-08-30 17:25:02 · 624 阅读 · 0 评论 -
显示自动段顾问建议
问题描述:你有一个查询耗费时间很长,但是表中数据很少,你想查看段顾问有什么建议解决方案:使用段顾问来显示表的信息,曾经分配过但现在是空的空间(删除大量数据行),有大量未使用的空间的表会使全表扫描变得很慢,因为全表扫描会扫描高水位线下的所有块dbms_space包可以查看段顾问的建议。这些信息由段顾问生成,这些段适合收缩,移动或压缩,如下查询:select 'segment原创 2016-09-09 15:35:54 · 1070 阅读 · 0 评论 -
高效移除表中数据
问题描述如何快速的从表中移除数据解决方案使用truncate或delete。truncate更快,但是有副作用。truncate是ddl语句,会自动提交,并且不能回滚。也不能在一个事物中truncate两张独立的表truncate table computer_systems;truncate之后,表只会剩下minextents定义的空间,其余空间会释放,如果不希望释放空间原创 2016-09-08 18:10:21 · 294 阅读 · 0 评论