业务需要,我在Oracle中建了一个名为 t_0_mtbuf 的表,用建普通表的语句建的,其实这个表的作用是临时表的作用,即:java中每次select 1500条出来,再在循环中逐个insert 进sqlserver数据库,然后在oracle中将这条记录删掉。但是这样运行了一段时间,今天,表里缓存了6W多条数据,之前是几十甚至100的走的,现在是2条,1条的走,数据走不动了,问题很严重。于是,高手让我执行了一句:
[sql] - analyze table t_0_mtbuf compute statistics
执行这句话,花了一段时间,执行完后,速度神奇的起来了!--这条语句重新分析表的统计信息,举个例子,你的表有 10 条记录,已经删除 5 条了,可是数据库并不知道你删除 5 条,他记录还10条这样就发生冲突了,这样数据库就容易停在那里这条语句是告诉 oracle,给我重新统计一下 表的信息,两边都一致了,问题也就解决了 --问:那有没有比较好的删除记录的语句,直接删掉之后,两边都同步的--答:使用 truncate 删除表,但是将表清空了, 不能像 delete 可以加 where 条件保留部分记录--问:记录要一条条删除--答:那就加 commit ,删除一定要提交。或者做一下控制,累积删除 200 条 commit 一次--问:我想不通,我那个表的数据,不多,才6W条。没有commit,最多的也只1500条,怎么会就走不动了--答:这个是把 普遍数据表 作为临时表 经常遇到的问题,频繁的增加删除 经常容易造成访问非常慢的情况。
查看某表物理大小,分区:[sql] - select segment_name ,bytes/1024/1024 MB from user_segments where segment_name = "EMP"
把emp 换成你的表名,单引号中表名要大写。一般情况下300w 数据是300m左右。一天300m,一个月约10g 左右。可以采用按月进行分区,一年12 张表每个月一张表,每个分区表一天是一个子分区。
awr统计分析另外,没有找到这个原因之前,要分析到底什么引起了数据走不动的问题:使用awr统计,看是什么导致wait
[sql] - select * from dba_directories
看看有没有directories,没有的话 要建一个
[sql] - SQL> select * from dba_directories;
-
- OWNER DIRECTORY_NAME DIRECTORY_PATH
- ------------------------------ ------------------------------ --------------------------------------------------------------------------------
- SYS ADMIN_DIR C:ADEaime_10.2_nt_pushoracle/md/admin
- SYS SUBDIR D:oracleproduct10.2.0db_1demoschemaorder_entry/2002/Sep
- SYS DATA_FILE_DIR D:oracleproduct10.2.0db_1demoschemasales_history
- SYS WORK_DIR C:ADEaime_10.2_nt_pushoracle/work
- SYS LOG_FILE_DIR D:oracleproduct10.2.0db_1demoschemalog
- SYS MEDIA_DIR D:oracleproduct10.2.0db_1demoschemaproduct_media
- SYS XMLDIR D:oracleproduct10.2.0db_1demoschemaorder_entry
- SYS DATA_PUMP_DIR D:oracleproduct10.2.0db_1adminorclyxkjdpdump
-
- 8 rows selected
[sql] - create or replace directory wlldpdata as "d:dump";
建一个,后面是路径,保证要有这个文件夹
[sql] - SQL> select * from dba_directories;
-
- OWNER DIRECTORY_NAME DIRECTORY_PATH
- ------------------------------ ------------------------------ --------------------------------------------------------------------------------
- SYS ADMIN_DIR C:ADEaime_10.2_nt_pushoracle/md/admin
- SYS SUBDIR D:oracleproduct10.2.0db_1demoschemaorder_entry/2002/Sep
- SYS DATA_FILE_DIR D:oracleproduct10.2.0db_1demoschemasales_history
- SYS WORK_DIR C:ADEaime_10.2_nt_pushoracle/work
- SYS LOG_FILE_DIR D:oracleproduct10.2.0db_1demoschemalog
- SYS MEDIA_DIR D:oracleproduct10.2.0db_1demoschemaproduct_media
- SYS XMLDIR D:oracleproduct10.2.0db_1demoschemaorder_entry
- SYS DATA_PUMP_DIR D:oracleproduct10.2.0db_1adminorclyxkjdpdump
- SYS WLLDPDATA e:dump
-
- 9 rows selected
[sql] - exec DBMS_SWRF_INTERNAL.AWR_EXTRACT(DMPFILE => "awr.dmp",DMPDIR => "WLLDPDATA");
然后在d:dump路径 找到awr.dmp Oracle正则表达式Oracle启动 init.ora spfile pfile相关资讯 Oracle基础教程
- Oracle块编程返回结果集详解 (11/10/2013 10:45:58)
- Oracle基础教程之设置系统全局区 (08/22/2013 14:24:00)
- Oracle基础教程知识点总结 (06/18/2013 07:43:32)
| - Oracle基础教程之tkprof程序详解 (10/22/2013 11:49:50)
- Oracle基础教程之sqlplus汉字乱码 (07/18/2013 16:30:00)
- Oracle 管理之 Linux 网络基础 (02/16/2013 18:37:35)
|
本文评论 查看全部评论 (0)