1. 目前状况
1.1 表空间未合理规划,导致所有的用户下的所有表都创建在默认的表空间下
oracle 使用过程中未针对特定数据表进行特定的表空间规划,导致目前实例中所有的数据库表都存储中默认的表空间文件(dbf)中,从目前高峰时的性能监测可以看出,oracle 数据所在磁盘使用率为 100%,而其他盘空空如也也没有任何 IO 请求,导致了资源浪费。(涝得涝死,旱得旱死)
1.2 存在 IO 需求量大的查询在高峰期执行
从 oracke 自带的性能监测程序统计分析得到在早上 7点至 10 点为查询量高峰时期,而此时有部分 sql 查询带来了大量的 IO 读取。比如 select * 不添加任何分页功能(猜测是数据同步),因此需要针对 oracle 的性能分析来排出 io 量大的查询并尽量修改到非高峰期执行。
2. 优化方案
2.1 提高磁盘利用率
2.1.1 RAID / LVM
使用 raid 或 LVM 方案都可以将多个磁盘合并为一个磁盘来使用,而相关的 IO 请求都会根据特定逻辑最终都会分散到多个磁盘上来操作从而提高整体的 IO。
http://www.itpub.net/thread-787910-2-1.html 这个帖子说了 LVM 几乎不影响 IO, 反而因为多磁盘的加入使得 IO 能提高。
2.1.2 ORACLE 自带表空间拓展
这个博客 列出了四种增加表空间大小的方法,其中一个:
ALTER TABLESPACE app_data ADD DATAFILE
'put dbf file path here' SIZE 500G
AUTOEXTEND ON NEXT 1G MAXSIZE 2048G;
上面说的这种情况就是在其他磁盘创建一个 dbf 文件来直接拓展当前的表空间大小,但是拓展后 oracle 是否会自动进行数据均衡等细节还需要参考官方文档:
oracle dba doc
2.2 解决当前的磁盘热点现象
如果能完美解决 2.1 所说可能当前问题也会被顺便解决。目前状态是已有数据全部都在一块磁盘上,所有的查询 IO 都还是走这一块磁盘,oracle 的表空间自动拓展是否能自动均衡数据呢?如果不能,怎么解决当前的查询压力都在这一块磁盘之上的问题。
2.2.1 partition 迁移
oracle partition 迁移 这篇博客讲了如何将一个指定的 oracle 分区迁移到其他表空间中,参考此文章可以尝试在其他磁盘上创建对应的表空间然后将分区迁移至该表空间中来分散数据。大体操作:
ALTER TABLE [tableName] MOVE PARTITION [partitionId] TABLESPACE [tableSpaceName];
ORACLE: Moving Table Partitions
2.2.2 直接整表迁移
如果想把整个表都迁移过去,那就可以这样操作
-- 迁移
alter table [tableName] move tablespace [spaceName]
-- 重建索引
alter index [index_name] rebuild tablespace [tablespace_name]
3. 综上所述
决定采用 oracle 自带的 move table
来进行数据迁移。
3.1 具体操作
3.1.1 使用 LVM 或 raid 整合多块空闲磁盘为单块磁盘
LVM:
pvcreate /dev/sda{1,2,3,4}
vgcreate ORCL /dev/sda{1}
vgextend ORCL /dev/sda{2,3,4}
lvcreate ...
3.1.2 创建表空间
-- 创建
create tablespace test_user datafile 'f:\test_user\zzg_data.dbf' size 200M;
-- 授权
grant create session,create table,create view,create sequence,unlimited tablespace to test_user;
3.1.3 迁移数据库表(整表迁移) [带分区的不可直接迁移,需要以分区为单位进行迁移]
-- 迁移
alter table [tableName] move tablespace [spaceName]
-- 重建索引
alter index [index_name] rebuild tablespace [tablespace_name];
3.1.4 以分区为单位进行迁移
ORACLE: Moving Table Partitions
批量生成迁移语句并执行
select 'alter table traffic_cloud.'||table_name||' move partition '||partition_name||' tablespace {spaceName};' from user_tab_partitions where table_name = 'ILLEGAL_DATA';
- 不要忘记改动态增加分区的相关命令,让以后添加分区的时候自动添加到新的表空间中 *
oracle 优化方案小记的更多相关文章
-
oracle批量插入优化方案
今天听DBA说如果从一个表批量查询出一批数据之后批量插入另外一张表的优化方案: 1)不写归档日志: 2)采用独占 关于insert /*+ append */我们需要注意以下三点: a.非归档模式下, ...
-
Oracle数据库中的优化方案
来自: http://woainichenxueming.iteye.com/blog/726541 一. 优化oracle中的sql语句,提高运行效率 1. 选择最有效率的表名顺序(只在基于规则的优 ...
-
ORACLE优化器RBO与CBO介绍总结
RBO和CBO的基本概念 Oracle数据库中的优化器又叫查询优化器(Query Optimizer).它是SQL分析和执行的优化工具,它负责生成.制定SQL的执行计划.Oracle的优化器有两种,基 ...
-
Oracle优化总结
本文主要从大型数据库ORACLE环境四个不同级别的调整分析入手,分析ORACLE的系统结构和工作机理,从九个不同方面较全面地总结了ORACLE数据库的优化调整方案.关键词 ORACLE数据库 环境调整 ...
-
Oracle优化的几个简单步骤
数据库优化的讨论可以说是一个永恒的主题.资深的Oracle优化人员通常会要求提出性能问题的人对数据库做一个statspack,贴出数据库配置等等.还有的人认为要抓出执行最慢的语句来进行优化.但实际情况 ...
-
oracle优化原则(二)
SQL优化原则 二.SQL语句编写注意问题 www.2cto.com 下面就某些SQL语句的where子句编写中需要注意的问题作详细介绍.在这些where子句中,即使某些列存在索引,但是由于编写了劣质 ...
-
mysql大内存高性能优化方案
mysql优化是一个相对来说比较重要的事情了,特别像对mysql读写比较多的网站就显得非常重要了,下面我们来介绍mysql大内存高性能优化方案 8G内存下MySQL的优化 按照下面的设置试试看:key ...
-
ORACLE 优化
本文主要从大型数据库ORACLE环境四个不同级别的调整分析入手,分析ORACLE的系统结构和工作机理,从九个不同方面较全面地总结了 ORACLE数据库的优化调整方案. 关键词 ORACLE数据库 环境 ...
-
RH442之Tuned优化方案
系统优化 介绍: Tuned是监控并收集系统组件使用资源的守护进程,可根据收集信息动态调整系统,可调整CPU和网络资源的使用来提高活跃设备性能与不活跃设备电能消耗.通过tuned-adm中提供优化案例 ...
随机推荐
-
详解eNSP下的单臂路由模拟实验配置
不同VLAN之间的通信可以通过两种方式:单臂路由和三层交换机.其中,单臂路由是通过路由子接口,交换机的某个端口以trunk的方式与路由器的某个端口相连,同时路由器的链接端口配置子接口,配置子接口承载的 ...
-
【AngularJS学习笔记】00 序
AngularJS通过新的属性与表达式来扩展HTML,有一种很形象的叫法,定义它为声明式语言. 为克服HTML在构建应用上的不足而设计! 这是它的目标. 它的官网进不去,应该是被墙了,这是goegle ...
-
从零开始学android开发-项目重命名
--修改项目名称 选中项目-[refactor]-[rename] --修改package名称 选中需要重命名的包-[refactor]-[rename] --修改gen下面的名称 打开Android ...
-
oracle internal: VIEW: X$KCBKPFS - PreFetch Statistics - (9.0)
WebIV:View NOTE:159898.1 Note (Sure) - Note Mods - Note Refs Error ORA 600 TAR TAR-Info Bug B ...
-
sql server 数据库附加时程序集错误
在数据库detach和attach的过程中,如果在建立程序集的时候选择的权限集是无限制,并且在建立程序集的时候和后来attach的时候 采用的不是同一个用户,就可能造成部分功能无法使用.原因是由于在选 ...
-
char* 和 wchar_t* 如何互相转换
char* 和 wchar_t* 如何互相转换 C函数可以用 wcstombs - 将宽字符转换成多字符 WCHAR -> CHAR mbstowcs - 把多字符把转换成宽字符 C ...
-
win10 uwp 如何拖动一个TextBlock的文字到另一个TextBlock
我在堆栈网看到有人问 如何拖动一个TextBlock的文字到另一个TextBlock 于是看到一个大神给出的方法,下面我就来和大家说下如何拖动 一开始我们需要一个界面,就放两个TextBlock 一个 ...
-
SpringCloud Feign对Hystrix(断路由)的支持
第一步:首先开启Feign对Hystrix的支持,在properties文件中添加以下配置: feign.hystrix.enabled=true. 第二步:在上一篇Feign的基础上添加Hystri ...
-
Override与Overload
方法重写(Override) 方法重写是子类对父类(父类为抽象类)的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 方法的重写规则 1.参数列表必须完全与被重写 ...
-
自定义EL函数(以将字母转为大写为例)
Step1 定义一个类:StringFunction.java 主要作用是来提供转大写的方法; public class StringFunction { public static String t ...