oracle普通表 临时表 awr统计分析

业务需要,我在oracle中建了一个名为 t_0_mtbuf 的表,用建普通表的语句建的,其实这个表的作用是临时表的作用,即:

java中每次select 1500条出来,再在循环中逐个insert 进sqlserver数据库,然后在oracle中将这条记录删掉。

但是这样运行了一段时间,今天,表里缓存了6W多条数据,之前是几十甚至100的走的,现在是2条,1条的走,数据走不动了,问题很严重。

于是,高手让我执行了一句:

analyze table t_0_mtbuf compute statistics


执行这句话,花了一段时间,执行完后,速度神奇的起来了!

--这条语句重新分析表的统计信息

举个例子,

你的表有 10 条记录,已经删除 5 条了,可是数据库并不知道你删除 5 条,他记录还10条

这样就发生冲突了,这样数据库就容易停在那里

这条语句是告诉 oracle,给我重新统计一下 表的信息,两边都一致了,问题也就解决了

--问:那有没有比较好的删除记录的语句,直接删掉之后,两边都同步的

--答:使用 truncate 删除表,但是将表清空了, 不能像 delete 可以加 where 条件保留部分记录

--问:记录要一条条删除

--答:那就加 commit ,删除一定要提交。或者做一下控制,累积删除 200 条 commit 一次

--问:我想不通,我那个表的数据,不多,才6W条。没有commit,最多的也只1500条,怎么会就走不动了

--答:这个是把 普遍数据表 作为临时表 经常遇到的问题,频繁的增加删除 经常容易造成访问非常慢的情况。

 

查看某表物理大小,分区:

select segment_name ,bytes/1024/1024 MB from user_segments where segment_name = 'EMP'

把emp 换成你的表名,单引号中表名要大写一般情况下300w 数据是300m左右。一天300m,一个月约10g 左右。可以采用按月进行分区,一年12 张表每个月一张表,每个分区表一天是一个子分区。

 

awr统计分析

另外,没有找到这个原因之前,要分析到底什么引起了数据走不动的问题:使用awr统计,看是什么导致wait

 select * from dba_directories

看看有没有directories,没有的话 要建一个

SQL> select * from dba_directories;

OWNER                          DIRECTORY_NAME                 DIRECTORY_PATH
------------------------------ ------------------------------ --------------------------------------------------------------------------------
SYS                            ADMIN_DIR                      C:\ADE\aime_10.2_nt_push\oracle/md/admin
SYS                            SUBDIR                         D:\oracle\product\10.2.0\db_1\demo\schema\order_entry\/2002/Sep
SYS                            DATA_FILE_DIR                  D:\oracle\product\10.2.0\db_1\demo\schema\sales_history\
SYS                            WORK_DIR                       C:\ADE\aime_10.2_nt_push\oracle/work
SYS                            LOG_FILE_DIR                   D:\oracle\product\10.2.0\db_1\demo\schema\log\
SYS                            MEDIA_DIR                      D:\oracle\product\10.2.0\db_1\demo\schema\product_media\
SYS                            XMLDIR                         D:\oracle\product\10.2.0\db_1\demo\schema\order_entry\
SYS                            DATA_PUMP_DIR                  D:\oracle\product\10.2.0\db_1\admin\orclyxkj\dpdump\
                                              
8 rows selected


 

create or replace directory wlldpdata as 'd:\dump';

建一个,后面是路径,保证要有这个文件夹

SQL> select * from dba_directories;

OWNER                          DIRECTORY_NAME                 DIRECTORY_PATH
------------------------------ ------------------------------ --------------------------------------------------------------------------------
SYS                            ADMIN_DIR                      C:\ADE\aime_10.2_nt_push\oracle/md/admin
SYS                            SUBDIR                         D:\oracle\product\10.2.0\db_1\demo\schema\order_entry\/2002/Sep
SYS                            DATA_FILE_DIR                  D:\oracle\product\10.2.0\db_1\demo\schema\sales_history\
SYS                            WORK_DIR                       C:\ADE\aime_10.2_nt_push\oracle/work
SYS                            LOG_FILE_DIR                   D:\oracle\product\10.2.0\db_1\demo\schema\log\
SYS                            MEDIA_DIR                      D:\oracle\product\10.2.0\db_1\demo\schema\product_media\
SYS                            XMLDIR                         D:\oracle\product\10.2.0\db_1\demo\schema\order_entry\
SYS                            DATA_PUMP_DIR                  D:\oracle\product\10.2.0\db_1\admin\orclyxkj\dpdump\
SYS                            WLLDPDATA                         e:\dump

9 rows selected
exec   DBMS_SWRF_INTERNAL.AWR_EXTRACT(DMPFILE => 'awr.dmp',DMPDIR => 'WLLDPDATA');

然后在d:\dump路径 找到awr.dmp

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值