优化
来源:互联网 发布:淘宝三张证件照怎么拍 编辑:程序博客网 时间:2024/05/03 01:01
生产或测试跑批完成后需要执行awr报告。
awr报告时间间隔默认为一小时,可调整,也可以手工生成snapshot,11g版本默认保留8天。
执行大概过程:
sqlplus / as sysdba
@?/rdbms/admin/awrgrpt.sql --awrRAC全局报告(生产环境执行此脚本即可 "?"的意思是指 $ORACLE_HOME路径)
@?/rdbms/admin/awrrpt.sql --单个实例报告(需要制定取哪个实例的报告)
之后交互制定输出选项,取默认输出格式 html,取默认天数,根据snapshot时间,指定开始snapshot和结束snapshot。之后取默认文件名。
AWR报告中重点需要查看sql统计信息。
Main Report -> SQL Statistics -> SQL ordered by Elapsed Time --按SQL执行时间排序
观察大表相关索引、分区情况。
-- 查询大表select table_name,partitioned,num_rows ,logging from user_tableswhere num_rows !='0' and num_rows is not null order by num_rows desc;--大于1000000数据无索引select a.table_name,a.partitioned,a.num_rows,a.logging from user_tables a left outer join user_indexes b on a.TABLE_NAME = b.table_name where a.num_rows > 1000000 and b.table_name is null;--涉及存储过程select * from user_source where upper(text) like '%..%';
部分修改建议
1. 统计信息
跑批前收集用户级别统计信息。或者收集表级别的统计信息。
统计信息完善后,oracle在执行SQL时,会走更好的执行计划。exec dbms_stats.gather_schema_stats('SRP'); exec dbms_stats.gather_table_stats('SRP','table_name',method_opt=>'...',estimate_percent=>'...');
2 任务切分
部分大任务切分为同级别小任务,充分利用多进程资源,并行执行。如数据导入 P04_IMP_CODETABLE_P3。
3 /**+append*/ HINT
每次数据加载前需要 truncate的表,insert(针对insert into .. select)时全部加 /*+append*/ 的HINT.
注意 /*+append*/不要拼错,不要随意加空格。部分存储过程此HINT没写"+",此时HINT失效。没有进行truncate的表,不要加 /*+append*/,因为加上后,此后对该表的查询,可能变慢。
4 表的logging属性
建议将系统中中间表改为 nologging属性。
select 'alter table ' ||table_name||' nologging;' from tabs where TABLE_NAME like .. ;此时对该表进行的操作写日志会大大降低,加快dml速度。
此查询结果执行完成后,将所用存储过程涉及 execute immediate 'alter table ... nologging';等语句全部去掉。
select * from user_source where lower(text) like '%execute%immediate%alter%table%';
附:确认生产库是否非归档 select log_mode from v$database ;
查询表logging属性 select table_name,logging from user_tables;
5 DDL命令
执行 truncate ,alter table 等DDL命令后,无需commit。 程序中的可以去掉。
6 并行DML
程序中需要并行dml 如存储过程 P04_IMP_S03_LOAN_BNW,如需实现并行。需要在session级别开启。
执行 execute immediate 'alter session enable parallel dml';之后执行 insert /*+parallel */ .... 等语句。
7 全局临时表
系统中,每次执行需清空,只在单个session需要用到的表,建议改为全局临时表。
P04_IMP_S03_LOAN_BNW中S03_LOAN_BNW_MID表建议改为全局临时表。
drop table S03_LOAN_BNW_MID; create global temporary table S03_LOAN_BNW_MID( cust_id VARCHAR2(32), cust_name VARCHAR2(256), jgm VARCHAR2(12), ywpz_dl VARCHAR2(11), ywpz_dl_name VARCHAR2(256), ywpz VARCHAR2(11), ywpz_name VARCHAR2(256), hbh VARCHAR2(11), dkje NUMBER(22,4), dkje_cny NUMBER(22,4), dkje_usd NUMBER(22,4), bnye NUMBER(22,4), bnye_cny NUMBER(22,4), bnye_usd NUMBER(22,4), corp_type_cd VARCHAR2(10), dbfs VARCHAR2(11), trade_cd VARCHAR2(10), trade_name VARCHAR2(256), kmh VARCHAR2(12), qdrq VARCHAR2(10), zdrq VARCHAR2(10), custterm VARCHAR2(3), dkzffs NUMBER, htbh VARCHAR2(21), jjbh VARCHAR2(17), five_class_cd VARCHAR2(5), bs VARCHAR2(3), statisticdate VARCHAR2(10))on commit preserve rows;
create index S03_LOAN_BNW_MID_Cust_Id on S03_LOAN_BNW_MID(Cust_Id);
8 代码中可重用的部分,建立中间结果表。或合并成一条SQL执行。避免执行多次的多表关联与过滤。
P04_IMP_S03_LOAN_BNW存储过程,将针对S03_LOAN_BNW_MID表从相同源表插入的多条insert合并。
也可以考虑单独新建一张临时表。insert时,从临时表中过滤结果集,避免多次表连接与源表扫描。.例如其中第2、3、4条SQL可以合并,具体更改参照修改后的P04_IMP_S03_LOAN_BNW.sql。
alter table S03_LOAN_BNW nologging;
9 大表的数据加载
1.并行dml
2.数据加载完成后并行重建索引
olap环境优化时,优先考虑并行。如过程 PRF_SS0_PT_TRAN_MSG_NEW_V 。
实现应用单进程,但oracle后台多个并行进程工作,效果明显。注意系统CPU使用率。
并行dml 仍需开启, execute immediate 'alter session enable parallel dml';
insert /*+parallel*/
针对数据加载时索引情况,可以考虑数据加载前,disable索引,之后重建。
execute immediate 'alter index .... unusable';
--数据加载 insert 完成后
execute immediate 'alter index .. rebuild nologging parallel 2'; --针对耗时长的,部分大表insert时可考虑,没必要每个存储过程都修改
同理 PRF_SS0_TBS_DZCDJB
PRF_SS0_FZHGLB
PRF_SS0_CRD_ZWTZ_DKMX
PRF_SS0_TRAN PRF_SS0_JJKKHSJ
PRO_TZ_FZRMX(数据量大) 等导入过程。
建议修改前后进行测试对比。
针对 PRF_SS0_PT_TRAN_MSG_NEW_V 过程进行测试,修改后执行语句:
TRUNCATE TABLE SS0_PT_TRAN_MSG_NEW_V; alter index SS0_PT_TRAN_MSG_NEW_BRANCH unusable; alter index SS0_PT_TRAN_MSG_NEW_COM unusable; alter index IND_SS0_STATUS unusable; INSERT /*+append*/ INTO SS0_PT_TRAN_MSG_NEW_V (tran_date, branch, drec_branch, acct_branch, ref_no, tran_time_stamp, busi_code, module_id, source_type, tran_class, direction, format, source_module, branch_flag, source_reference, source_date, orig_ref_no, tran_type, msg_type, msg_prefix, msg_code, operator, operator_termi_mark, operator_time_stamp, auth_opr, auth_termi_mark, auth_time_stamp, approval_opr, approval_termi_mark, approval_time_stamp, reject_opr, reject_termi_mark, reject_time_stamp, reject_reason, confirm_opr, confirm_termi_mark, confirm_time_stamp, send_times, send_opr, send_termi_mark, send_time_stamp, last_operator, last_termi_mark, last_time_stamp, print_times, remark, internal_key, operate_type, auto_appr, auto_confirm, settle_type, msg_seq_no, consign_date, send_bank_code, send_settle_bank, rcv_bank_code, rcv_settle_bank, acct_no, acct_name, acct_type, oth_acct_no, oth_acct_name, oth_acct_type, ccy, tran_amt, value_date, orig_msg_code, orig_msg_seq_no, orig_consign_date, orig_send_bank, orig_send_settle, orig_rcv_bank, orig_rcv_settle, settle_date, xchg_times, xchg_date, xchg_type, resend_flag, response_code, response_message, response_method, response_msg_type, response_msg_code, orig_busi_code, orig_tran_class, queue_no, instruct_type, check_flag, send_bank_node, rcv_bank_node, msg_id, msg_ref_id, error_reason, pkg_no, collate_date, tran_valid_flag, related_ref_no, busi_ref_no, pt_msg_id, sendbank_sys, rcvbank_sys, busi_type, tran_category, tndays, dr_cr_ind, status, START_DT, END_DT ) SELECT to_char(TRAN_DATE , 'yyyy-mm-dd'), BRANCH, DREC_BRANCH, ACCT_BRANCH, REF_NO, TRAN_TIME_STAMP, BUSI_CODE, MODULE_ID, SOURCE_TYPE, TRAN_CLASS, DIRECTION, FORMAT, SOURCE_MODULE, BRANCH_FLAG, SOURCE_REFERENCE, SOURCE_DATE, ORIG_REF_NO, TRAN_TYPE, MSG_TYPE, MSG_PREFIX, MSG_CODE, OPERATOR, OPERATOR_TERMI_MARK, OPERATOR_TIME_STAMP, AUTH_OPR, AUTH_TERMI_MARK, AUTH_TIME_STAMP, APPROVAL_OPR, APPROVAL_TERMI_MARK, APPROVAL_TIME_STAMP, REJECT_OPR, REJECT_TERMI_MARK, REJECT_TIME_STAMP, REJECT_REASON, CONFIRM_OPR, CONFIRM_TERMI_MARK, CONFIRM_TIME_STAMP, SEND_TIMES, SEND_OPR, SEND_TERMI_MARK, SEND_TIME_STAMP, LAST_OPERATOR, LAST_TERMI_MARK, LAST_TIME_STAMP, PRINT_TIMES, REMARK, INTERNAL_KEY, OPERATE_TYPE, AUTO_APPR, AUTO_CONFIRM, SETTLE_TYPE, MSG_SEQ_NO, CONSIGN_DATE, SEND_BANK_CODE, SEND_SETTLE_BANK, RCV_BANK_CODE, RCV_SETTLE_BANK, ACCT_NO, ACCT_NAME, ACCT_TYPE, OTH_ACCT_NO, OTH_ACCT_NAME, OTH_ACCT_TYPE, CCY, TRAN_AMT, VALUE_DATE, ORIG_MSG_CODE, ORIG_MSG_SEQ_NO, ORIG_CONSIGN_DATE, ORIG_SEND_BANK, ORIG_SEND_SETTLE, ORIG_RCV_BANK, ORIG_RCV_SETTLE, SETTLE_DATE, XCHG_TIMES, XCHG_DATE, XCHG_TYPE, RESEND_FLAG, RESPONSE_CODE, RESPONSE_MESSAGE, RESPONSE_METHOD, RESPONSE_MSG_TYPE, RESPONSE_MSG_CODE, ORIG_BUSI_CODE, ORIG_TRAN_CLASS, QUEUE_NO, INSTRUCT_TYPE, CHECK_FLAG, SEND_BANK_NODE, RCV_BANK_NODE, MSG_ID, MSG_REF_ID, ERROR_REASON, PKG_NO, COLLATE_DATE, TRAN_VALID_FLAG, RELATED_REF_NO, BUSI_REF_NO, PT_MSG_ID, SENDBANK_SYS, RCVBANK_SYS, BUSI_TYPE, TRAN_CATEGORY, TNDAYS, DR_CR_IND, STATUS, START_DT, END_DT FROM JGBS.sjk_pt_tran_msg_new_v_v@TBDATA; alter index SS0_PT_TRAN_MSG_NEW_BRANCH rebuild nologging parallel 2; -- 并行可适当去掉 alter index SS0_PT_TRAN_MSG_NEW_COM rebuild nologging parallel 2; alter index IND_SS0_STATUS rebuild nologging;
62环境测试环境修改前耗时4分50秒, 修改后耗时3分30秒, 测试导入数据量6894535。系统压力不大时,可以再加上并行dml试试效果。
附: --检查索引状态与并行度 select status,degree from user_indexes where index_name = '';
10 涉及存储过程 PS0_PAY_SYS_TRANS_INFO_INDIC
-- create bitmap index ind_SS0_PT_TRAN_DIRECTION on SS0_PT_TRAN_MSG_NEW_V(DIRECTION); 往来账查询是否较多?
create index ind_SS0_status on SS0_PT_TRAN_MSG_NEW_V(status);
最后一条SQL 涉及大表关联
tz_fzrmx 表改为 按交易日期分区 jyrq 涉及存错过程:select * from user_source where upper(text) like '%TZ_FZRMX%';
--改分区键具体操作 见:TZ_FZRMX.sql
11 针对 P04_IMP_S03_LOAN 存储过程
增加 /*+append*/ 多条insert 无法合并,针对某一条SQL耗时过长,再调整。
12 SS0_ACCT1表数据量大 是按START_DT分区的。涉及此表的存储过程很多。
start_date end_date是否涉及查询都会用。建议索引 IDX_SS0_ACCT1_SE 改成 global index 针对全局与本地索引 查看建议17
13 存储过程 PBC_CAL_A1433N
12月30日修改脚本中有对 s03_loan 索引的修改?
大部分SQL类似,新建临时表,将多表关联及公共过滤后的结果保存。避免在多条SQL中多次进行表关联。
drop index TZ_CUSTINFO_REGIONALISM;
create index TZ_CUSTINFO_REGIONALISM on TZ_CUSTINFO( substr(REGIONALISM, 1, 6));
drop index IDX_TZ_CRD_CDTZ_IDX1;
14 针对大表索引及分区情况更改。
以下为部分大表
分区 行数 logging
1 TZ_FZRMX_1119NO124533193YES
2 TZ_SJK_KZRLSBNO28093741NO
3 TZ_DJK_WJFL NO26688170NO
4 SS0_ACCT1 YES18156242
5 SS0_ACCT1_DJKNO13649452NO --基本被注释掉了
6 TZ_FZRMX YES12334515
7 SS0_FKXFJFMXYES11962830
8 TZ_XBHKYC NO10951238NO
9 TZ_DCKJTQD NO8906466 NO
10 TZ_FFHZ YES6773132
11 S03_AGREEMENTNO6773117 YES
12 TZ_FFHXX NO6773117 NO
13 SS0_TBS_DZCDJBNO6270671 NO
14 TZ_CUX_GL_DAILY_BALANCENO5620643NO
--其中大于5000000数据无索引
select a.table_name, a.partitioned, a.num_rows, a.logging from user_tables a left outer join user_indexes b on a.TABLE_NAME = b.table_name where a.num_rows > 5000000 and b.table_name is null;
1 SS0_TBS_DZCDJBNO6270671NO PRF_SS0_TBS_DZCDJB PS0_ELE_PAY_SIGN_CUST_INDIC
2 SS0_FKXFJFMXYES11962830 PRF_SS0_FKXFJFMX
3 TZ_XBHKYCNO10951238NO PRO_TZ_IMP_P3(PRO_TZ_XBHKYC) PRO_TZ_XBHKYC_HIS
4 TZ_DCKJTQDNO8906466NO P04_CAL_G01_04_3_A PRO_TZ_DCKJTQD PRO_TZ_DCKJTQD_HIS PRO_TZ_IMP_P1
5 TZ_CUX_GL_DAILY_BALANCENO5620643NO P04_CAL_G01_09_13 P04_CAL_G01_09_7 P04_CAL_G01_09_9 PRO_TZ_CUX_GL_DAILY_BALANCE
PRO_TZ_CUX_GL_DAILY_BAL__HIS PRO_TZ_IMP_P3
6 S03_AGREEMENTNO6773117YES P04_CAL_G21_19 P04_CAL_G21_19F P04_CAL_G21_20 P04_CAL_G21_21 P04_CAL_G21_21A
P04_CAL_G21_21F P04_IMP_CODETABLE_P1 P04_IMP_DEL_CODE P04_IMP_S03_AGREEMENT
7 TZ_FZRMX_1119NO124533193YES
--针对无索引大表更改
SS0_TBS_DZCDJB暂不更改
create index CUX_GL_DAILY_BALANCE_trandate on TZ_CUX_GL_DAILY_BALANCE(transaction_date); create index CUX_GL_DAILY_BALANCE_segment3 on TZ_CUX_GL_DAILY_BALANCE(segment3); create bitmap index s03_agreement_BIZ_TYPE_CD on s03_agreement(BIZ_TYPE_CD); create index s03_agreement_subjectkey on s03_agreement(substr(t1.subjectkey,1,4)); create index s03_agreement_acct_org_num on s03_agreement(acct_org_num);
-- 注意s03_agreement表 以下写法是无法走索引的。 如果mature_dt字段有索引,需要注意
-- to_date(t1.mature_dt, 'yyyy-mm-dd') -TO_DATE(dtstatisticdate, 'YYYY-MM-DD')>(STARTNUM-1)
--其他一些常用大表
drop index IDX_TZ_DJK_WJFL_CW;
create index TZ_DJK_WJFL_WJFL on TZ_DJK_WJFL(WJFL) compress;
15 修改后续无需dml操作的表。更改属性 pctfree 为 0 例如:
alter table SS0_TBS_DZCDJB pctfree 0;alter table SS0_FKXFJFMX pctfree 0;alter table TZ_XBHKYC pctfree 0;alter table TZ_DCKJTQD pctfree 0;alter table TZ_CUX_GL_DAILY_BALANCE pctfree 0;alter table TZ_SJK_KZRLSB pctfree 0;
注意:经常需要更新,或者前台需要大并发操作的表,pctfree不要随意更改。
16 针对SF6301 S6301的表T41_SYSTEMCAL_UPDAY索引有更改。在12月30日的修改中说明。生产未应用。
17 索引的使用。
针对表经常使用的谓词列添加索引。针对常用的多个查询条件,建立组合索引要比创建多个独立索引效率更高。
创建组合索引时,列顺序需要格外注意。将区分性更好的列,最常使用的查询列放在第一位。
创建组合索引时,可以将查询列,也放在索引中,避免回表。
某列不同值有限,如往来账,借贷记等。可以考虑建bitmap 索引。 create bitmap index ... on ()....; 这种列建普通索引效果不好。
在dml的过程中,索引也会维护,索引经常需要维护的表,索引数目不易过多。
全局索引与本地索引
针对分区表的查询,查询条件最好加上分区列,否则会扫描所有分区,效率低下,可能不如不分区。全局索引适用于针对全表的查询,而非单独针对某个分区的查询。
所以一些日期列,需要经常查询几个月的数据的SQL. 该日期列最好是全局索引,而非本地索引。
18 针对 P04_D06_ALL P04_IMP_S03_LOAN_BNW 修改
P04_IMP_S03_LOAN_BNW.sql
19 -- P04_D06_ALL存储过程 62环境测试结果);
SRPTEST>exec P04_C02_CUST_CRDT_BAD('2014-12-31');PL/SQL procedure successfully completed.Elapsed: 00:00:00.97SRPTEST>exec P04_C01_CRDT_AGT_BAD('2014-12-31');PL/SQL procedure successfully completed.Elapsed: 00:00:07.61SRPTEST>exec P04_D06_CUST_CRDT_LIMIT63('2014-12-31');PL/SQL procedure successfully completed.Elapsed: 00:00:03.79SRPTEST>exec P04_D06_CUST_CRDT_LIMIT3302('2014-12-31');PL/SQL procedure successfully completed.Elapsed: 00:00:03.96SRPTEST>exec P04_D06_CORP_CRDT_SMALL('2014-12-31');PL/SQL procedure successfully completed.Elapsed: 00:00:00.68SRPTEST>exec P04_D06_CORP_CRDT_MICRO('2014-12-31');PL/SQL procedure successfully completed.Elapsed: 00:00:00.63SRPTEST>exec P04_D06_CORP_CRDT_MS('2014-12-31');PL/SQL procedure successfully completed.Elapsed: 00:00:08.02SRPTEST>exec P04_D06_CORP_CRDT_LARGE('2014-12-31');PL/SQL procedure successfully completed.Elapsed: 00:00:00.62SRPTEST>exec P04_D06_CORP_CRDT_MEDIUM('2014-12-31');PL/SQL procedure successfully completed.Elapsed: 00:00:00.65SRPTEST>exec P04_D06_INDI_OPER_LN('2014-12-31');PL/SQL procedure successfully completed.Elapsed: 00:00:00.38SRPTEST>exec P04_D06_S6302('2014-12-31');PL/SQL procedure successfully completed.Elapsed: 00:00:02.43SRPTEST>exec P04_D06_S6402('2014-12-31');PL/SQL procedure successfully completed.Elapsed: 00:00:06.53SRPTEST>exec P04_D06_CUST_CRDT_LMT63_ALL('2014-12-31');PL/SQL procedure successfully completed.Elapsed: 00:00:06.64SRPTEST>exec P04_D06_CUST_CRDT_LMT3302_ALL('2014-12-31');PL/SQL procedure successfully completed.Elapsed: 00:00:04.00SRPTEST>exec P04_D06_CORP_CRDT_SMALL_ALL('2014-12-31');PL/SQL procedure successfully completed.Elapsed: 00:00:02.82SRPTEST>exec P04_D06_CORP_CRDT_MICRO_ALL('2014-12-31');PL/SQL procedure successfully completed.Elapsed: 00:00:04.08SRPTEST>exec P04_D06_CORP_CRDT_MS_ALL('2014-12-31');PL/SQL procedure successfully completed.Elapsed: 00:22:01.61SRPTEST>exec P04_D06_CORP_CRDT_MEDIUM_ALL('2014-12-31');PL/SQL procedure successfully completed.Elapsed: 00:00:05.53SRPTEST>exec P04_D06_INDI_OPER_LN_ALL('2014-12-31');PL/SQL procedure successfully completed.Elapsed: 00:00:06.86SRPTEST>exec P04_D06_S6301('2014-12-31');PL/SQL procedure successfully completed.Elapsed: 00:00:10.08SRPTEST>exec P04_D06_CORP_CRDT_BILL_LARGE('2014-12-31');PL/SQL procedure successfully completed.Elapsed: 00:00:08.02SRPTEST>exec P04_D06_CORP_CRDT_BILL_MEDIUM('2014-12-31');PL/SQL procedure successfully completed.Elapsed: 00:00:09.25SRPTEST>exec P04_D06_CORP_CRDT_BILL_SMALL('2014-12-31');PL/SQL procedure successfully completed.Elapsed: 00:00:20.32SRPTEST>exec P04_D06_CORP_CRDT_BILL_MICRO('2014-12-31');PL/SQL procedure successfully completed.Elapsed: 00:00:09.84SRPTEST>exec P04_D06_CORP_CRDT_BILL_MS('2014-12-31');PL/SQL procedure successfully completed.Elapsed: 08:10:43.52SRPTEST>exec P04_D06_INDI_OPER_LN_BILL('2014-12-31');PL/SQL procedure successfully completed.Elapsed: 00:01:25.25SRPTEST>exec P04_D06_LN_DISTR('2014-12-31');PL/SQL procedure successfully completed.Elapsed: 00:00:14.65SRPTEST>exec P04_D06_S6401('2014-12-31');PL/SQL procedure successfully completed.Elapsed: 00:00:01.23
--其中存储过程 P04_D06_CORP_CRDT_MS_ALL P04_D06_CORP_CRDT_BILL_MS 耗时较长
-- 这两个存储过程 加并行 dml
create index ind_CRDT_MICRO_ALL_com on D06_CORP_CRDT_MICRO_ALL(CUST_ID,BELONG_BANK_CD); create index ind_CRDT_SMALL_ALL_com on D06_CORP_CRDT_SMALL_ALL(CUST_ID,BELONG_BANK_CD); create index ind_CRDT_LMT63_ALL_com on D06_CUST_CRDT_LMT63_ALL(CUST_ID,BELONG_BANK_CD); create index ind__CRDT_LMT3302_ALLL_com on D06_CUST_CRDT_LMT3302_ALL(CUST_ID,BELONG_BANK_CD); create index ind_CRDT_BILL_SMALL_com on D06_CORP_CRDT_BILL_SMALL T1(CUST_ID,BELONG_BANK_CD); create index ind_CRDT_BILL_MICRO_com on D06_CORP_CRDT_BILL_MICRO T1(CUST_ID,BELONG_BANK_CD); alter table D06_CORP_CRDT_3410 nologging; alter table D06_CORP_CRDT_BILL_LARGE nologging; alter table D06_CORP_CRDT_BILL_MEDIUM nologging; alter table D06_CORP_CRDT_BILL_MICRO nologging; alter table D06_CORP_CRDT_BILL_MS nologging; alter table D06_CORP_CRDT_BILL_SMALL nologging; alter table D06_CORP_CRDT_LARGE nologging; alter table D06_CORP_CRDT_LARGE_ALL nologging; alter table D06_CORP_CRDT_MEDIUM nologging; alter table D06_CORP_CRDT_MEDIUM_ALL nologging; alter table D06_CORP_CRDT_MICRO nologging; alter table D06_CORP_CRDT_MICRO_ALL nologging; alter table D06_CORP_CRDT_MS nologging; alter table D06_CORP_CRDT_MS_ALL nologging; alter table D06_CORP_CRDT_SMALL nologging; alter table D06_CORP_CRDT_SMALL_ALL nologging;
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- 优化
- Objective - C基础: 第三天 - 1.NSString的基本认识
- 十二个移动App云测试服务盘点
- Doubango代码学习(六):timer
- ListView点击后item的颜色不变色
- JAVA垃圾回收机制详解--perfect
- 优化
- Zigbee协议栈OSAL层API函数
- Android View系统解析(下)
- LeetCode:Symmetric Tree
- Oracle11gRAC中的等待事件
- Java类加载器工作原理
- 守护进程日志的实现
- stm32单片机数据传输的一些问题。
- ios 调用系统通讯录