- 浏览: 71864 次
- 性别:
- 来自: 上海
-
文章分类
- 全部博客 (87)
- hibernate (5)
- maven (2)
- svn (2)
- 线程安全 (1)
- hibernate4 (1)
- spring3 (6)
- struts2 (1)
- mysql (1)
- junit (1)
- mail (1)
- java (2)
- smslib (1)
- quartz (2)
- eclipse (1)
- jdeclipse (1)
- dhtmlxtree (1)
- linux (1)
- chrome (1)
- SenchaArchitect2 (1)
- Ext Desiger (0)
- Ext Designer (1)
- tomcat request service (0)
- tomcat (1)
- request (1)
- service (1)
- ParameterMap (1)
最新评论
-
dengfengfeng:
[flash=200,200][url][img][list] ...
ehcache 与spring相结合超时自动刷新缓存的框架搭建 -
wangshiyang:
pyzheng 写道大哥 ,你有针对Hibernate4的os ...
hibernate4,spring3,struts2整合中解决 -
pyzheng:
大哥 ,你有针对Hibernate4的oscache配置么? ...
hibernate4,spring3,struts2整合中解决 -
wangshiyang:
wslovenide 写道你说的这个我也遇到了,就是最后一点我 ...
hibernate4,spring3,struts2整合中解决 -
wslovenide:
你说的这个我也遇到了,就是最后一点我有点怀疑,sessionF ...
hibernate4,spring3,struts2整合中解决
通向架构师的道路(第二十四天)之Oracle性能调优-朝拜先知之旅
前言
这次,我们将在Linux下来动手完成Oracle数据库的安装与使用。
Oracle本身是可以免费下载的包括 它的企业版以及被它收购的Weblogic和Sun中的几乎任何东西你都可以拿来下载和使用,不像IBM和Tibco一些其它厂商,只有“试用版”给你下载,Oracle的东西没有时间限制,你拿来做练习,搭实验环境都是没有任何的问题的。
但是,如果你出了问题,需要用到Oracle的补丁或者是Oracle的技术支持,这就开始收费。
Oracle就是这种“卖Service”的模式。
还有就是你安装了Oracle后,你的应用是给另一家企业用的或者是带有商业用途,那对不起Oracle也会问你来收费。
在linux下安装oracle是一件令人生畏的事情,其复杂程度远远超过安装linux操作系统本身。如果能够进行成功的安装oracle,那么同时也就顺便掌握了linux一些技术。
本文介绍在redhat linux 下安装oracle 10g 的方法。在这里说明一下,Oracle 10g的g是grid 的缩写,意为网格,目前较为前沿的网络计算技术。
一、安装Oracle前的准备

这次我们将在Linux环境下安装Oracle,对Oracle支持最好的莫过于SuSe Linux,但是随着后来RedHat走向了商业化后,RedHat与Oracle公司开始形成一种密切的关系,因此如果你手上有RedHat As 5.5x及以下版本或者是Fedora14及以上版本话那是最好不过了。
Oracle下载地址:进入下载
确保你是用的是root帐号,执行下列步骤
1.1在Linux上先安装相应的JDK

打开一个Terminal窗口
进入到你的jdk下载的目录下并输入:
./jdk-6u19-linux-i586-rpm.bin
我们默认将jdk安装于“/usr/java/jdk1.6.0_19”目录吧。
接下来我们需要修改系统环境变量,在terminal窗口中键入“vi /etc/profile”
在这个profile文件内加入两行:
export JAVA_HOME=/usr/java/jdk1.6.0_19
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
1.2测试我们的jdk安装是否正确
打开一个terminal窗口并输入
看到正确的jdk版本信息后即代表我们的jdk在linux下安装正确了
1.3Oracle安装前的环境变量配置
还是编辑那个profile文件并加入如下几行:
export JAVA_HOME=/usr/java/jdk1.6.0_19<br /> export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin<br /> export ORACLE_BASE=/opt/oracle<br /> export ORACLE_HOME=$ORACLE_BASE/product/10<br /> export ORACLE_SID=ktdb<br /> export ORACLE_TERM=xterm<br /> export NLS_LANG=AMERICAN_AMERICA.UTF8<br /> export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib<br />
通过上述环境变量我们可以得知,我们的oracle装安装在/opt/oracle/product/10目录下,所以
- 我们的ORACLE_BASE为: /opt/oracle
- 我们的ORACLE_HOME即为:/opt/oracle/product/10了。
这些变量是Oracle在安装过程中需要读取的,在windows下安装oracle是不需要设这些东西的。
1.4 创建Oracle安装时使用的用户与组
groupadd oinstall groupadd dba useradd -g oinstall -G dba oracle passwd oracle
1.5创建Oracle的安装路径并将此路径的读写权限赋予Oracle这个“组”
mkdir -p /opt/oracle/ product/10 chown -R oracle.oinstall /opt/oracle/
1.6 在profile中设置图形显示参数
打开一个terminal窗口,然后编辑/etc/profile,在其中加入xhost +
DISPLAY=<machine-name>:0.0; export DISPLAY它代表使得所有的用户可以使用图形化界面来运行相关的图形化应用程序,因为Linux的安全机制相当的严格,root是最高权限,除去root以外的其它用户如果需要拥有root才能执行的权限就需要授予权
1.7 在Linux系统中安装Oracle安装时需要的系统lib库
一般来讲,Oracle主要需要下面的这些Lib库
gcc-3.2.3-2 make-3.79 binutils-2.11 openmotif-2.2.2-16 setarch-1.3-1 compat-gcc-7.3-2.96.122 compat-gcc-c++-7.3-2.96.122 compat-libstdc++-7.3-2.96.122 compat-libstdc++-devel-7.3-2.96.122
但是。。。Linux下的Lib库也是有依赖关系的,我给初学都的建议是你可以在刚开始安装Linux时就选customer install,然后选中相应的lib库,除去open-jdk(这个不能装,装完后sun的jdk就不起作用了,你到时还要卸),把dev相关的lib, gcc相关的lib都选上,还有gnome相关,KDE相关的lib库,有时全选上后回过头来要去安装的package里手工check,有没有java相关的被安装了,如果安装了就一定要把安装项前的勾选项,去掉,一定不能让Linux安装自带的open jdk。
二、开始在Linux下安装Oracle
Oracle10g在Linux下有版本检查的限制,如果你的Linux RedHat的版本低于5,那么你可以在Oracle的安装盘disk1下,直接运行如下命令调出图形化安装界面
./runInstaller
如果你的Linux的版本是AS5.5及以上(目前最新的Linux),那么请你使用下面这条命令来安装Oracle
/runInstaller –ignoreSysPrereqs
这条命令将跳过Oracle安装对于Linux系统内核的检查。
主安装界面出现
按照上述步骤一步步把Oracle装上,注意安装时字符集永远选用AL32UTF-8,这样你的Oracle才能支持多语言。
三、Oracle安装后的一些设置
3.1 设置Oracle的服务开机自动启动
编辑/etc/rc.local/文件
以下是dbstart.sh文件的内容
存盘后每次你重启Linux,Oracle就会随着你的Linux的开机而自动运行起来了(还有更专业的设置,将在以后的教程中传授,对于初学者想自己搭个环境的选用这个,嘿嘿)。
3.2 设置Oracle的processes, session, Maximum Open Cursor
其们在使用sys用户连上Oracle后可以使用这条命令来显示这三个兄弟
show parameter processes;
一般安装好后,这个processes默认为150,网上有很多人说如果碰到用户的session不够就去用alter命令改这个session number,其实是不对的。
session与processes是绑定的,用下面的公式:
sessions=1.1*processes + 5
所以你只有改这个processes,session才会自动调整,我们可以使用下面这条命令去改变系统中的processes
alter system set processes=500 scope = spfile;这个processes不是乱设的,是要和你系统的内核设置去绑定的。
四、Oracle的性能调优
- Client Configuration
- User Role Privilege
- SGA
- Table Space
- Import
- Oracle And OS Kernel
- Oracle Under 32 bits OS
- SQL Plan
- Table Analyze
- Partition Table
- Performance Monitor
我们的Oracle性能调优主要用围绕上述几个章节来做介绍,我们不介绍太高深的莫明奇妙的理论,在这边我们对这几个方面做一个统用的解释和实际应用场景,如果是新手,你在看过这篇教程后应该知道一个oracle的性能主要从几个方面(Common)去着手,对一个熟手来说上述每个小节的具体内容都是可以在Oracle的DBA手册中找到更详细的内容。
4.1 客户端的配置:TNS(Client Configuration: TNS)
配置主机名:
Oracle的连接服务是基于主机名的,我们需要设置装Oracle这台主机的唯一主机名,这样客户端才能通过TNS来连上Oracle的服务
请更改Oracle所在服务器上的 /etc/hosts文件
# Do not remove the following line, or various programs # that require network functionality will fail. 192.168.1.3 myoracleserver 127.0.0.1 localhost.localdomain localhost
这边的192.168.1.3就是我们的主机ip,后面的myoracleserver就是主机名。
配置客户端连接


更改客户端的字体使其可以支持中文的正常显示
编辑注册表
把这个NLS_LANG改成上图中所示,这样你的Oracle的客户端上可以直接通过客户端工具或者是第三方客户端工具进行中文的正常录入了而不是乱码了。
4.2 在Oracle中建立帐号与分配权限
使用system帐号登录
创建用户之前先要创建表空间
一般我们创建一个表空间和一个临时表空间
然后我们就可以开始创建用户了
分配角色
对于一个j2ee的应用连接Oracle来说,这个连接用户的角色只需要具有上述两个权限就够用了,有些人喜欢给这个用户DBA权限是太绝对了,当然这样给角色使用起来方便,什么权限都有了,不需要我在开发时再进行细化的设置了。
可是,你有没有想到过,一旦你的应用被人sql injection后,而你的应用上连接着oracle的用户是dba权限,那么你连整个数据库是不是都会被泄密啊?
分配系统角色
设置Oracle连接用户最大可登录次数
一个Oracle内的用户默认可以让你重复登录10次,10次的限制一到,这个用户就会被锁住。
可以用下列语句查看一个Oracle用户重复几次后会被锁住的设置参数
SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_name='FAILED_LOGIN_ATTEMPTS';
当然这样做是为了安全考虑。
可是,在我们的开发环境中,有时往往因为一个循环,一个登录器,一个线程写错而导致Oracle连接用户重复需要连接Oracle 数次,因此经常开发人员会向DBA抱怨说 “我的用户又被锁住了”。
因此,在开发环境我建议你把这个“重复连接次数”去掉,设成下面这样
ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED
4.3 Oracle SGA
- SGA:System Global Area是Oracle Instance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。
- 共享池:Shared Pool用于缓存最近被执行的SQL语句和最近被使用的数据定义,主要包括:Library cache(共享SQL区)和Data dictionary cache(数据字典缓冲区)。 共享SQL区是存放用户SQL命令的区域,数据字典缓冲区存放数据库运行的动态信息。
- 缓冲区高速缓存:Database Buffer Cache用于缓存从数据文件中检索出来的数据块,可以大大提高查询和更新数据的性能。
- 大型池:Large Pool是SGA中一个可选的内存区域,它只用于shared server环境。
- Java池:Java Pool为Java命令的语法分析提供服务。
- PGA:Process Global Area是为每个连接到Oracle database的用户进程保留的内存。
关于SGA这块的调整,网上有太多优秀的文章。
一般可以通过修改$ORACLE_HOME/dbs目录下的init.ora文件来自行调整,但是。。。。。。
如果你要调整一个init.ora文件,请使用下面的步骤可确保你的修改不会造成Oracle启动不了
第一步:修改前请先作一份init.ora文件的安全拷贝
在Linux下使用下面这条命令
strings spfilektdb.ora > init.ora.bak
一个init*.ora对应一个spfile*.ora
第二步:对于这个init.ora.bak文件内的SGA值进行调整
第三步:让Oracle直接用这个被修改后的init.ora.bak来启动数据库实例,请使用sys用户以命令行的方式登录oracle
sqlplus sys/password@databaseSID as sysdba登录成功后运行下面两条命令
shutdown immediate startup pfile='/opt/oracle/product/10/dbs/init.ora.bak‘
如果Oracle能够正常启动和支持客户端的连接说明我们的改动没有损坏到Oracle已安装的实例
第四步:让更改生效使得Oracle每次启动都使用我们修改过后的SGA的值
create spfile from pfile='/opt/oracle/product/10/dbs/init.ora.bak'; startup force
如果上述这两条命令没有启动,那么你的Oracle一旦重启后它将还是继续使用原有oracle的SGA配置,而非改动后的配置。
4.4 Oracle表空间管理
Oracle的表空间文件都放在$ORACLE_HOME/oradata如/opt/oracle/product/10/oradata这样的目录中的
Oracle的表空间支持”热插拨“
即在Oracle运行时发觉表空间不够时可以直接打开Oracle的管理界面来动态给它划一块硬盘空间,或者甚至你又装了一块硬盘进服务后,Oracle可以把表空间在运行时扩展到新插入的磁盘中。
表空间管理
ORACLE的表空间划分将影响ORACLE的数据访问速度。
对于表空间来说,最重要的是如何把要连续访问的段放在一起,但是由于oracle 不能提供基于段的统计信息,所以对数据的物理模型设计和访问模式的详细了解对表空间的规划有非常大的好处。然后基于这些原则,我们就可以制定我们的表空间划分原则了:
- 仅在表空间级指定INITIAL、NEXT参数,在创建数据段时不要指定这些参数;
- 对每个表空间上的段使用相同的区片尺寸;段参数INITIAL=NEXT,PCTINCREASE=0;可以通过使用Create Tablespace 的‘ MINIMUM EXTENT’ 子句来确保分配的区片是此参数的倍数;
- 区片的大小根据段大小来确定,原则是均衡顺序扫描的效率和空间的利用率,同时确保段的区片数目控制在1024之下;根据此原则,在进行相应测试之后,确定以下区片选取规则:
段大小 区片大小 128M 128K 128M-4G 4M 4G及以上 128M - Oracle9i引入了本地管理表空间,它在管理和性能上都优于传统的字典管理表空间,它已融合了规则1、2、3 ;要使用此特性,在CREATE TABLESPACE语句中指定EXTENT MANAGEMENT LOCAL子句;
- 段的区片数目上限应在4096之下,DML操作在此区片数目范围内不会有明显的性能差异;但某些DDL操作的速度则与区片的数目关系较大;因此合理的区片数目应保持在1024之下;对于持续不断扩展的段,应监控区片数目,在必要时移至其它表空间;
- 对于特别大的数据段应控制在4G-128G(Oracle7为5G-160G)之间,它们应存放到单独的表空间上,同时对于这些特大段应考虑使用分区拉提高性能;
- 用户的临时表空间应使用TEMPORARY类型;
- 当系统的事务规模比较均衡时可以对回滚段使用OPTIMAL参数,否则应避免制定OPTIMAL参数,而定期监控回滚段的大小,并在必要时重建;
- 临时段和回滚段绝对不要将用户数据存放到SYSTEM表空间,它是专为永远不会Drop和Truncate的系统数据对象而设计的;
- 创建表空间时指定数据文件的大小应=区片整数倍+1数据块,对于Local Managed Tablespace则为区片整数倍+64K;
- 当表空间使用统一的区片大小时,不要对其进行空间整理,重整的结果不仅耗费精力而且可能会使性能变差;对于未使用统一的区片尺寸的表空间应通过Export/Import重整;
- 提供了Alter Table …Move [Tablespace…]命令可用于快速重整表,Alter Index …Rebuild…[Tablespace…] 命令可用于快速重建索引;
4.5Import (导入)
当传统的导入导出遇到了海量数据时~
我在以前一个工程碰到过一个真实的案例,48-50张左右的表,每张表最大数据量为1200万,最小的在280-300万左右的数据,占用硬盘空间在14-16GB左右的一个.dmp包。不定期会进行导入导出操作。
于是我们的数据库负责人员就使用传统的imp/exp命令了。
每一次imp都需要耗费达4-6个小时,有时一旦出错。。。完蛋了,这个效率太低,大家不要看1200万这个数量,大家会说:哟,都是几百万的数据,可是这点数据其实还不算是真正的大数据量,imp一次要4-6小时,这是绝对不合理的。
如何让你的imp飞起来
传统的imp命令在导入时,如果只是仅处理数据,千万条数据对Oracle的处理来说根本就是”毛毛雨“啦,关键是在它导入了数据后,而要对每个表重新做一次索引。
一边导一边索引,一边一条条commit,就好比你用一个循环来insert 1万条数据和你改用statemenet.addBatch(query);的效率的对比一样,一定是后者更快更高效。
因此,在碰到这种情况下我们建议对imp导入命令做下面的折分:
- 分段式提交
- 设置缓冲
- 先导数据再导索引
这样,我们原来的imp命令就变成下面这样的样子了:
imp user2/pwd fromuser=user1 touser=user2 file=file commit=y feedback=10000 buffer=10240000 ignore=y rows=y indexes=n imp user2/pwd fromuser=user1 touser=user2 file=file commit=y feedback=10000 buffer=10240000 ignore=y rows=n indexes=y
看到没有,先导数据rows=y indexes=n,再导索引rows=n indexes=y
这两条命令是先后发起的,在只导数据时对于上述的14gb左右的一个.dmp包在同样软硬件环境中只用了15-20分钟,后一条建索引语句只用了25-27分钟。
这其中,提高了几倍?大家想想。
4.6 Oracle与Linux系统的几个主要内核参数关系
limits.conf文件
编辑这个 /etc/security/limits.conf
* soft nofile 1024 * hard nofile 1024
一般这个文件的默认值为1024
它代表Linux系统下最大打开文件数,如java里面的jdbc connection操作,new File操作都是一个文件打开操作,1024这个值是很少的。
所以我们把它改成
* soft nofile 300000 * hard nofile 300000
继续修改
oracle soft memlock 1048576 oracle hard memlock 1048576
这个值如果有的话直接改后面的数字,如果没有的话需要把这两行增加入limits.conf文件中,其中:
memlock’s value=Oracle share_pool_size (gb)*1024*1024
所以你的Oracle中的SGA里的share_pool_size的大小是受到这个值的限制的。
改完后重启Linux系统,然后我们可以使用下面的命令来看我们修改的效果。
ulimit –a
这个命令可以查看Linux系统当前的最大打开文件数。
使用Oracle用户登录
su – oracle然后键入
ulimit -l
就可以看到oracle soft memlock的相关修改效果了。
关于kernel.*的参数的配置
kernel.shmall = 2097152 kernel.shmmax = 2147483648 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 #SEMMSL SEMMNS SEMOPM SEMMNI
其中最后一行带”#“是我加的,代表这几个数值的”含义“,那么光有含义,没有解释?下面给出解释
SEMMSL=max processes+10
SEMMNS=SEMMSL*SEMMNI
看到没有。。。。。。所以说Oracle中这个processes不是乱设的,是要和你系统的内核设置去绑定的。
4.7Oracle在32位操作系统下的瓶劲与如何突破
我去年写过篇博文,那篇博文是用于记录如何在实际的一个项目中在32位Linux操作系统下让Oracle的SGA突破2GB内存这个限制,详细可见:oracle在32位的Linux环境下SGA如何突破2GB内存限制的最终解决方案
在这边,我再做一下补充。
一些客户,这主要是客户关系,如果换成我我一定要买支持64位操作系统的服务器。
一些使用32位操作系统的客户安装Oracle,大家知道Oracle自从8.0后开始全面转成Java,因此它也受到JAVA虚拟机在32位操作系统下最多只能使用到2GB物理内存这个限制。
因此,当你的机器物理内存有32GB时,但因为你用了32位的操作系统,因此你的Oracle在创建Database时即customer(定义)这个数据库内存分匹时你的SGA是超不过2048MB的。
SGA中有一个很重要的指标即:shared_pool_size,这个值的大小会直接影响性能,关于shared_pool_size有很多更深入的理论性的探讨,这边告诉初学者或者新手,这个值相当于”游戏推荐配置“,不满足,游戏运行暴卡,超过这个值,游戏运行流畅。
但是,我现在有台服务器,物理内存32GB,用的是32位的Linux,我Oracle的SGA想要突破这个2GB大小的限制,又不能重装(客户环境不是你说要重装就要重装的)怎么办?只有想办法:
- 让操作系统支持PAE模式(目前只有Linux AS3及以上和win 2003 advance server+sp2补丁及windows 2008)可以支持真正的PAE模式
- 修改/etc/sysctl.conf文件中的值(前面提到过了)
- 让Linux操作系统中的打开文件数为最大(前面也提到过了)
- 更改你的Oracle的SGA


4.8 使用SQL执行计划帮助你定位瓶劲

在执行计划中使用hits来改变和调整SQL执行的性能
- 使用的优化器的类型
- 基于代价的优化器的优化目标,是all_rows还是first_rows
- 表的访问路径,是全表扫描,还是索引扫描,还是直接利用rowid
- 表之间的连接类型
- 表之间的连接顺序
- 语句的并行程度
如何使用Hints:
Hints只应用在它们所在sql语句块(statement block,由select、update、delete关键字标识)上,对其它SQL语句或语句的其它部分没有影响。如:对于使用union操作的2个 sql语句,如果只在一个sql语句上有Hints,则该Hints不会影响另一个sql语句。
我们可以使用注释(comment)来为一个语句添加Hints,一个语句块只能有一个注释,而且注释只能放在SELECT, UPDATE, or DELETE关键字的后面
使用Oracle Hints的语法:
{DELETE|INSERT|SELECT|UPDATE} /*+ hint [text] [hint[text]]... */ or {DELETE|INSERT|SELECT|UPDATE} --+ hint [text] [hint[text]]...
注解:
- DELETE、INSERT、SELECT和UPDATE是标识一个语句块开始的关键字,包含提示的注释只能出现在这些关键字的后面,否则提示无效。
- “+”号表示该注释是一个Hints,该加号必须立即跟在”/*”的后面,中间不能有空格。
- hint是下面介绍的具体提示之一,如果包含多个提示,则每个提示之间需要用一个或多个空格隔开。
- text 是其它说明hint的注释性文本
/*+ALL_ROWS*/ /*+FIRST_ROWS*/ /*+CHOOSE*/ /*+RULE*/ /*+FULL(TABLE)*/ /*+ROWID(TABLE)*/ /*+USE_HASH(BSEMPMS,BSDPTMS)*/
4.9 Table Analyze-Oracle的表分析

- 基于规则的优化方式:Rule-Based Optimization(RBO)
- 基于成本或者统计信息的优化方式(Cost-Based Optimization:CBO)
RBO方式:优化器在分析SQL语句时,所遵循的是Oracle内部预定的一些规则。比如我们常见的,当一个where子句中的一列有索引时去走索引。
ANALYZE TABLE ktdb.T_CD_CODE COMPUTE STATISTICS; ANALYZE TABLE ktdb.T_CD_CODE COMPUTE STATISTICS for all indexed columns;
比如说,你的数据库每天有几十万条数据进进出出,过了1周,数据库里原先一些查询已经不走Oracle默认的优化引擎了,本来是该走索引的,结果你用SQL分析器看出来它走的是full scan,这时就要做表分析了,一旦表分析做完后,你的数据库又会按照你原有的计划去走最优的路线了,这无疑中会提高你的数据库访问性能。
spool 'd:\analyzetable.txt‘ select * from user_tables; spool off
spool 'd:\analyzeindex.txt‘ select * from user_indexes ; spool off
export ORACLE_BASE=/opt/oracle export ORACLE_HOME=$ORACLE_BASE/product/10 export ORACLE_SID=ktdb $ORACLE_HOME/bin/sqlplus "sys/sys@ktdb as sysdba" <<eof @/home/oracle/analyzetable.txt; exit eof
由于数据库的表分析很费时,一般我们都会选择在零晨或者是在周末这两天进行一次表分析,这样保证,每次在工作日时我的数据库中的SQL始终走的是最适合的优化器.
4.10Partition Table(分区表)

分区功能能够将表、索引或索引组织表进一步细分为段,这些数据库对象的段叫做分区。每个分区有自己的名称,还可以选择自己的存储特性。从数据库管理员的角度来看,一个分区后的对象具有多个段,这些段既可进行集体管理,也可单独管理,这就使数据库管理员在管理分区后的对象时有相当大的灵活性。但是,从应用程序的角度来看,分区后的表与非分区表完全相同,使用 SQL DML 命令访问分区后的表时,无需任何修改。
什么时候使用分区表:
- 表的大小超过2GB
- 表中包含历史数据,新的数据被增加都新的分区中。
- 改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。
- 增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;
- 维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;
- 均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能。
分区表相关:已经存在的表没有方法可以直接转化为分区表。不过 Oracle 提供了在线重定义表的功能。
Range Partition(根据范围来分区)
PARTITION BY RANGE (CUSTOMER_ID) ( PARTITION CUS_PART1 VALUES LESS THAN (100000) TABLESPACE CUS_TS01, PARTITION CUS_PART2 VALUES LESS THAN (200000) TABLESPACE CUS_TS02 )
Hash partition(HASH分区)这个最傻瓜了最好用了,不需要指定分区的条件的
CREATE TABLE emp ( empno NUMBER (4),ename VARCHAR2 (30),sal NUMBER )PARTITION BY HASH (empno) PARTITIONS 8 STORE IN (emp1,emp2,emp3,emp4,emp5,emp6,emp7,emp8);
Component Partition
create table dinya_test ( transaction_id number primary key,item_id number(8) not null,transaction_date date ) partition by range(transaction_date)subpartition by hash(transaction_id) subpartitions 3 store in (dinya_space01,dinya_space02,dinya_space03) ( partition part_01 values less than(to_date(‘2006-01-01’,’yyyy-mm-dd’)), partition part_02 values less than(to_date(‘2010-01-01’,’yyyy-mm-dd’)), partition part_03 values less than(maxvalue) );
分区表和表分析一样需要在数据库没有交易甚至是需要断开所有的连接时才能安全有效的去做的一个动作,但是oracle从9i后开始提供了一种在线分区,对于拥有百万级数据的一张表来说进行分区即可以保证并发访问的安全同时速度又快-仅几秒种时间就可以完成。
在线重定义分区表
- 不动原表结结,建立和原表结构一样的表,并进行分区,此时新表是拥有分区结构的,且数据为空(空表)
- 利用在线重定义把原表的数据整个copy到新的分区表中去
- 删去原表
EXEC DBMS_REDEFINITION.CAN_REDEF_TABLE('schema名', '你将要被切换的表名', DBMS_REDEFINITION.CONS_USE_PK); EXEC DBMS_REDEFINITION.START_REDEF_TABLE('schema名','你将要被切换的表名', '拥分区结构的新表'); EXEC DBMS_REDEFINITION.sync_interim_table('schema名', '你将要被切换的表名', '拥分区结构的新表'); EXEC DBMS_REDEFINITION.FINISH_REDEF_TABLE('schema名', '你将要被切换的表名', '拥分区结构的新表');
上述四条语句依次执行,几秒钟内你源有的表立记得就变成了新的分区表了.
exec DBMS_REDEFINITION.ABORT_REDEF_TABLE('schema名','你将要被切换的表名','拥分区结构的新表');
然后你检查一下错误 ,重新把那四条在线重定义分区表语句再依次运行一下即可。
4.11 Oracle性能监控


相关推荐
Oracle性能调优-朝拜先知之旅 本文主要介绍了在 Linux 环境下安装 Oracle 10g 的方法,并对 Oracle 性能调优进行了详细的说明。下面是本文的知识点总结: 一、Oracle 基本概念 * Oracle 是一种关系型数据库管理...
6. **通向架构师的道路(第二十四天)之Oracle性能调优-朝拜先知之旅.docx** Oracle是广泛使用的数据库系统,性能调优是提升数据库效率的关键。文档可能涵盖了索引优化、查询优化、存储结构调整等方法,帮助读者深入...
内容概要:本文详细介绍了基于DSP28035的CAN在线升级程序及其Bootloader开发服务。主要内容涵盖CAN通讯协议的设计与实现,包括CAN模块初始化、Hex文件解析、内存分配以及应用程序跳转等关键技术点。此外,还讨论了上位机软件的开发选择和技术难点,如超时检测、CRC校验、中断向量表重映射等。文中不仅提供了具体的代码示例,还分享了许多实践经验,如避免内存越界、处理地址扩展等问题的方法。 适合人群:从事嵌入式系统开发的技术人员,尤其是那些对DSP28035感兴趣或正在使用该处理器进行项目的开发者。 使用场景及目标:适用于需要实现远程固件更新的嵌入式设备制造商,旨在提高产品维护效率并减少物理干预的需求。通过学习本文,读者可以掌握如何构建一个稳定可靠的CAN在线升级解决方案。 其他说明:文章强调了协议设计的重要性,并指出了一些常见的错误和陷阱,帮助读者避开这些问题。同时,作者还提到了一些优化技巧,比如利用DMA加速数据传输、合理规划内存布局等,以确保系统的高性能和稳定性。
内容概要:本文详细介绍了基于UDS(Unified Diagnostic Services)协议的Bootloader在Autosar架构下的定制开发过程。主要内容涵盖Autosar架构与DCM(诊断通信管理)模块的集成,以及针对不同系列芯片(如NXP S32K、Infineon TC275等)的具体实现细节。文中通过具体的代码示例展示了从初始化、诊断服务处理到跳转应用程序的全过程,并讨论了不同芯片之间的差异及其应对策略。此外,还涉及了存储器管理、数据传输优化和安全启动等方面的内容。 适合人群:从事汽车电子开发的专业人士,尤其是对Bootloader开发感兴趣的工程师和技术人员。 使用场景及目标:适用于需要深入了解和实现基于UDS协议的Bootloader定制项目的团队。主要目标是提高汽车电子系统的诊断效率和可靠性,同时确保不同芯片平台间的兼容性和性能最优化。 其他说明:文章不仅提供了理论指导,还包括大量实用的代码片段和实践经验分享,帮助读者更好地理解和应用于实际项目中。
内容概要:本文详细介绍了如何通过Modbus协议实现昆仑通态触摸屏与台达VFD-M系列变频器之间的通讯,具体涵盖了硬件接线、关键参数设置、MCGS组态环境中的设备配置、变量定义、界面设计及脚本编写等内容。文中不仅提供了详细的参数设置方法,还分享了一些常见的调试技巧和故障排查方法,如硬件接线注意事项、参数设置要点、通讯故障解决措施等。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是那些需要进行触摸屏与变频器通讯集成工作的人员。 使用场景及目标:适用于需要通过触摸屏远程控制变频器的应用场景,如工厂自动化生产线、机械设备控制等。目标是让读者能够独立完成从硬件连接到软件编程的整个通讯系统搭建过程。 其他说明:文章强调了实际操作中的注意事项和容易忽视的细节,如硬件接线的特殊性、参数设置的准确性、通讯协议的具体应用等,有助于提高项目的成功率和稳定性。同时,提供了丰富的调试工具和方法,帮助读者快速定位和解决问题。
内容概要:本文详细介绍了一种750W高功率因数(PF)充电机电源方案,采用UCC28070、ST6599和PIC16F193X三款芯片组合。UCC28070用于功率因数校正(PFC),通过交错式升压电路提升PF值;ST6599负责LLC谐振变换器,确保高效功率转换;PIC16F193X作为微控制器进行智能控制。文中不仅提供了详细的原理图、设计文件和烧录程序,还分享了具体的应用代码和调试技巧。此外,引用了华南理工大学硕士学位论文,深入探讨了设计优化方法。 适合人群:电源设计工程师、电子工程专业学生、对高效电源设计感兴趣的开发者。 使用场景及目标:适用于需要高功率因数和高效能的充电机应用场景,如电动汽车充电桩、数据中心备用电源等。目标是帮助读者掌握高效电源设计的技术细节,提升产品性能。 其他说明:本文不仅提供了硬件设计思路,还包括软件编程实例,如PFC控制算法、LLC频率调整、故障保护机制等。同时强调了实际应用中的注意事项,如寄存器配置、元件选型、PCB布局等。
内容概要:本文详细介绍了基于200smart PLC和昆仑通态触摸屏构建的一拖三恒压供水系统的实现方法及其调试经验。主要内容涵盖系统架构设计、PID控制参数整定、触摸屏配置、水泵轮换逻辑以及常见的调试技巧和注意事项。文中强调了PID控制在变频器调度中的重要性,提供了具体的代码示例和技术细节,如PID输出限幅处理、Modbus通信映射、压力反馈处理等。此外,作者还分享了许多宝贵的实战经验和教训,如避免在触摸屏上进行复杂运算、确保硬件布局合理性等。 适合人群:从事自动化控制系统设计与调试的技术人员,尤其是对PID控制和PLC编程有一定基础的研发人员。 使用场景及目标:适用于需要精确控制供水压力的工业场合,如小区二次供水、厂房循环水系统等。目标是帮助技术人员理解和掌握一拖三恒压供水系统的实现方法,提高系统的稳定性和可靠性。 其他说明:文中提到的具体参数和代码片段可供参考,但在实际应用中需根据具体情况进行适当调整。
该资源为natsort-3.1.2.tar.gz,欢迎下载使用哦!
该资源为natsort-2.0.0-py2.7.egg,欢迎下载使用哦!
内容概要:本文详细阐述了DeepSeek大模型在服装行业的应用方案,旨在通过人工智能技术提升服装企业的运营效率和市场竞争力。文章首先介绍了服装行业的现状与挑战,指出传统模式难以应对复杂的市场变化。DeepSeek大模型凭借其强大的数据分析和模式识别能力,能够精准预测市场趋势、优化供应链管理、提升产品设计效率,并实现个性化推荐。具体应用场景包括设计灵感生成、自动化设计、虚拟试衣、需求预测、生产流程优化、精准营销、智能客服、用户体验提升等。此外,文章还探讨了数据安全与隐私保护的重要性,以及技术实施与集成的具体步骤。最后,文章展望了未来市场扩展和技术升级的方向,强调了持续优化和合作的重要性。 适用人群:服装行业的企业管理层、技术负责人、市场和销售团队、供应链管理人员。 使用场景及目标:①通过市场趋势预测和用户偏好分析,提升设计效率和产品创新;②优化供应链管理,减少库存积压和生产浪费;③实现精准营销,提高客户满意度和转化率;④通过智能客服和虚拟试衣技术,提升用户体验;⑤确保数据安全和隐私保护,建立用户信任。 阅读建议:此资源不仅涵盖技术实现的细节,还涉及业务流程的优化和管理策略的调整,建议读者结合实际业务需求,重点关注与自身工作相关的部分,并逐步推进技术的应用和创新。
内容概要:本文详细介绍了一套基于三菱FX3U PLC的完整开发方案,涵盖硬件设计和软件编程两个方面。硬件部分包括详细的原理图、PCB文件以及关键组件的选择和布局技巧,如电源模块、光耦隔离电路、继电器输出等。软件部分则涉及梯形图编程和C语言开发,展示了如何利用GX Works2进行梯形图编程,以及如何使用Keil进行C语言开发,实现复杂的控制逻辑和高效的任务调度。此外,还提供了许多调试技巧和注意事项,帮助开发者避免常见错误并提高开发效率。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对PLC开发感兴趣的初学者和有一定经验的研发人员。 使用场景及目标:适用于需要深入了解PLC底层运作机制、掌握硬件设计和软件编程技能的场合。目标是通过实际案例和详细指导,帮助读者快速上手三菱FX3U PLC的开发,实现高效的控制系统设计。 其他说明:文中提供的代码片段和设计思路不仅有助于理解PLC的工作原理,还可以作为实际项目的参考,加速开发进程。同时,文中还分享了许多实践经验,对于解决实际开发中的问题非常有帮助。
甲壳虫adb助手安全下载.apk
内容概要:本文详细介绍了基于SJA1000协议栈的FPGA实现CAN总线控制器的全过程。涵盖了Verilog和VHDL双版本源码、Altera和Xilinx平台的具体实现细节以及完整的testbench程序。文中深入探讨了状态机控制器、CRC校验器、位时序单元和FIFO缓存四大核心模块的设计思路和技术要点。同时,提供了详细的仿真验证方法和优化技巧,如随机延迟测试、时钟管理配置等。此外,还附带了Quartus II 13.0和ISE14.7的安装指南及常见问题解决方案。 适合人群:FPGA开发者、嵌入式系统工程师、电子工程专业学生及研究人员。 使用场景及目标:适用于希望深入了解CAN总线控制器硬件实现的技术人员,帮助他们快速掌握FPGA开发流程,完成从代码编写到仿真的全流程操作。目标是在实际项目中高效实现CAN总线通信功能,提升系统的稳定性和性能。 其他说明:本文不仅提供完整的工程代码和仿真工具,还包括详细的开发板引脚约束配置和跨平台移植指导,确保用户能够顺利进行开发和调试。
中兴光猫G7610V2-V3.0.0P1N12固件
流变学仿真方法:流变学仿真软件介绍.zip
内容概要:本文详细介绍了如何利用昆仑通态触摸屏与ABB变频器ACS510通过Modbus RTU协议实现直接通讯,构建高效的恒压供水系统。文中涵盖了硬件连接、参数设置、脚本编写、策略配置等方面的内容。通过这种方式,不仅简化了操作流程,还提高了系统的稳定性和可靠性。具体而言,文章首先解释了选择这两者的理由,接着逐步讲解了硬件接线方法、参数配置细节、脚本控制逻辑以及一些常见的调试技巧。此外,还特别提到了夜间降压逻辑、故障复位按钮等高级功能的应用。 适合人群:从事自动化控制系统设计、维护的技术人员,尤其是对恒压供水系统感兴趣的工程师。 使用场景及目标:适用于需要稳定水压供应的场合,如居民小区、商业建筑等。主要目标是通过简化操作流程、提高系统稳定性,从而实现更加智能和高效的供水管理。 其他说明:文章提供了大量实际案例和技术细节,帮助读者更好地理解和应用相关技术。同时,强调了硬件和软件相结合的重要性,分享了许多实用的经验和技巧。
内容概要:本文全面介绍了移动开发的相关知识,首先概述了移动开发的概念及其重要性,随后详细介绍了iOS和Android两大主流平台的开发语言、环境及工具,并涵盖了跨平台开发框架如React Native、Flutter等。接着列举了版本控制、构建自动化、UI设计及调试测试等常用工具。文章还提供了丰富的学习资源,包括官方文档、书籍和视频教程。此外,针对移动开发中常见的性能优化、兼容性、安全性和用户体验设计等问题进行了探讨,并通过社交、电商、健身追踪和地图导航等实际案例展示了不同应用场景的技术实现。最后推荐了一些适合初学者的项目,鼓励读者实践所学知识。; 适合人群:对移动开发感兴趣的初学者,以及希望深入了解移动开发技术的开发者。; 使用场景及目标:①了解iOS和Android平台的开发环境和技术栈;②掌握跨平台开发工具的选择与使用;③学习如何解决移动开发中的性能、兼容性、安全等常见问题;④通过实战案例掌握不同类型应用的核心技术实现。; 其他说明:移动开发是一个不断发展的领域,文中提到的技术和工具可能会随行业发展而更新,建议读者持续关注最新动态并不断学习新技能。
基于python的多种函数递归与斐波那契数列文件
内容概要:本文详细介绍了复盘的概念、操作手法、应用场景及其对企业及个人成长的重要性。复盘源自围棋术语,指对过去的经验进行回顾和反思,以从中学习和改进。文章阐述了复盘的五大核心要素:回顾目标、评估结果、分析原因、总结经验教训和提出改进建议。复盘不仅适用于个人成长,还广泛应用于企业管理和项目管理中,能够帮助企业提升执行力、改善决策流程、优化运营效率,并最终推动组织学习和发展。文中特别强调了复盘在军队、联想集团和英国石油公司(BP)中的成功实践。 适合人群:企业管理者、项目经理、团队领导者及希望提升自我反思和学习能力的职场人士。 使用场景及目标:①帮助个人和团队从过去的经历中吸取教训,避免重复错误;②通过系统的反思和总结,提升团队的协作效率和创新能力;③促进企业内部的知识共享和文化传播,构建学习型组织;④为企业战略调整提供数据支持,确保战略目标的有效落地。 其他说明:为了使复盘成为一种常态化的工作方法和习惯,组织应加强培训,培养专业的引导者,并将复盘融入日常管理流程中。此外,复盘的成功实施还需要营造开放、坦诚的文化氛围,鼓励全员积极参与。复盘不仅仅是回顾过去,更是面向未来的持续改进工具。