NO.35 Arch4的一些性能优化点

本文总结了半年内优化使用Arch4项目的性能改进措施,包括解决等待提示框导致的IE内存泄露问题,通过修改代码避免全局变量的不当使用;缓存管理的规划不足问题,提出了合理利用缓存的最佳实践;分析并优化了几个关键系统配置,如Linux下WebLogic9启动缓慢的问题,通过设置JAVA_OPTIONS参数加速启动过程;还揭示了一个监听器的Bug,该Bug可能影响操作效率。

 

(未完待续)

    半年来,做了一些使用Arch4的项目的性能优化工作,特将一些公共的优化点总结如下:

1.等待提示框造成IE内存泄露(YAHOO.widget.Panel

     据观察,有几处使用了等待提示框的地方,每出现一次,IE占用内存都有4M左右(内存消耗后证实与加载的图片大小有关)的增长,但也有同样的提示框却不增长的,对比发现代码上有如下不同,且提供了一种可行的修改方法:

 

会造成内存泄露的写法:

  

不会造成内存泄露的写法:

  

 

    具体情况可以参见此文:

NO.16 在有PreUpdateEventListener.onPreUpdate情况下的Hibernate脏数据检查机制(Dirty Checking)分析

 

3.缓存CacheManager使用缺少规划

   

4.几个影响性能的系统配置

 

5.LinuxWebLogic9启动慢

     setDomainEnv.sh或其它启动shell中加入此参数即可

      JAVA_OPTIONS="${JAVA_OPTIONS}  -Djava.security.egd=file:/dev/zero"

      export JAVA_OPTIONS

2.自动修改时更新“operateTimeForHis”字段的监听器有BUG,可能造成效率降低

WITH ACT AS (SELECT DATE_PART('year', AGE(date_trunc('month', CURRENT_DATE), TO_DATE(C.READ_METER_MONTH, 'YYYY-MM-DD'))) * 12 + DATE_PART('month', AGE(date_trunc('month', CURRENT_DATE), TO_DATE(C.READ_METER_MONTH, 'YYYY-MM-DD'))) DEBTS_MONTHS, A.ARCH_NO, A.ID USER_ID, C.AREA_ID, C.ID meter_read_id, D.PAY_TYPE, B.DEBTS_AMOUNT, C.READ_METER_MONTH, C.LAST_MONTH_READ, C.THIS_MONTH_READ, C.BOOK_IN_NO, T.ID TAB_ID, T.TAB_TYPE, C.entry_time, CASE WHEN B.ACCT_ITEM_TYPE_CODE = '0010001' THEN B.DEBTS_NUM ELSE 0 END BASIC_SUM, CASE WHEN B.ACCT_ITEM_TYPE_CODE = '0020001' THEN B.DEBTS_NUM ELSE 0 END SEW_WA_SUM, CASE WHEN B.ACCT_ITEM_TYPE_CODE = '0010001' THEN B.DEBTS_AMOUNT ELSE 0 END BASIC_FEE, CASE WHEN B.ACCT_ITEM_TYPE_CODE = '0020001' THEN B.DEBTS_AMOUNT ELSE 0 END SEW_WA_FEE FROM ueccp.rs_meter_read c INNER JOIN ueccp.rs_USER_ARCH A ON c.arch_no = a.arch_no AND A.USER_STATE <> 8 AND A.tenant_id = 'T001' INNER JOIN ueccp.rs_TAB_ARCH T ON c.user_id = t.user_id LEFT JOIN ueccp.rs_ACCT_ITEM b ON B.meter_read_id = C.ID AND B.STATUS NOT IN (4, 5, 7) AND B.DEBTS_AMOUNT > 0 AND B.is_offset != 1 LEFT JOIN ueccp.rs_ACCOUNT D ON c.user_id = D.USER_ID WHERE 1 = 1 AND t.area_id IN (-1, 1214008, 1214012, 1214025, 1214186, 1214187, 1214188, 1214189, 1214190, 1214191, 1214192, 1214193, 1214194, 1214195, 1214196, 1214197, 1214198, 1214199, 1214200, 1214201, 1214202, 1214203, 1214204, 1214205, 1214206, 1214207, 1214208, 1214209, 1214210, 1214211, 1214212, 1214213, 1214214, 1214215, 1214216, 1214217, 1214218, 1214219, 1214220, 1214074, 1214075, 1214076, 1214077, 1214078, 1214079, 1214080, 1214081, 1214082, 1214083, 1214084, 1214085, 1214013, 1214086, 1214087, 1214088, 1214089, 1214090, 1214091, 1214092, 1214093, 1214094, 1214095, 1214096, 1214097, 1214098, 1214099, 1214014, 1214100, 1214101, 1214102, 1214103, 1214104, 1214105, 1214106, 1214107, 1214108, 1214109, 1214110, 1214015, 1214016, 1214111, 1214112, 1214113, 1214114, 1214115, 1214116, 1214117, 1214017, 1214118, 1214119, 1214120, 1214121, 1214122, 1214123, 1214124, 1214125, 1214126, 1214127, 1214128, 1214129, 1214130, 1214131, 1214132, 1214133, 1214134, 1214135, 1214136, 1214137, 1214138, 1214139, 1214140, 1214141, 1214142, 1214143, 1214144, 1214018, 1214145, 1214146, 1214147, 1214148, 1214149, 1214150, 1214151, 1214152, 1214153, 1214154, 1214155, 1214156, 1214019, 1214020, 1214157, 1214158, 1214159, 1214160, 1214161, 1214162, 1214163, 1214164, 1214165, 1214166, 1214167, 1214168, 1214169, 1214170, 1214171, 1214172, 1214173, 1214174, 1214175, 1214176, 1214177, 1214021, 1214022, 1214023, 1214178, 1214024, 1214179, 1214180, 1214181, 1214182, 1214183, 1214184, 1214185, 1214009, 1214026, 1214027, 1214221, 1214222, 1214223, 1214224, 1214225, 1214226, 1214227, 1214028, 1214228, 1214229, 1214230, 1214231, 1214232, 1214233, 1214234, 1214235, 1214236, 1214237, 1214238, 1214239, 1214240, 1214241, 1214242, 1214243, 1214244, 1214245, 1214246, 1214247, 1214248, 1214249, 1214250, 1214251, 1214252, 1214253, 1214254, 1214255, 1214256, 1214257, 1214258, 1214259, 1214260, 1214261, 1214262, 1214263, 1214264, 1214265, 1214266, 1214267, 1214268, 1214269, 1214270, 1214271, 1214272, 1214273, 1214029, 1214274, 1214275, 1214276, 1214277, 1214030, 1214011, 1214050, 1214051, 1214052, 1214053, 1214054, 1214055, 1214056, 1214057, 1214058, 1214059, 1214060, 1214061, 1214062, 1214063, 1214064, 1214065, 1214066, 1214067, 1214068, 1214069, 1214070, 1214071, 1214072, 1214073, 1214278, 1214279, 1214280, 1214281, 1214031, 1214282, 1214283, 1214284, 1214285, 1214286, 1214287, 1214032, 1214288, 1214033, 1214289, 1214034, 1214290, 1214291, 1214292, 1214293, 1214294, 1214295, 1214296, 1214297, 1214298, 1214299, 1214300, 1214301, 1214302, 1214303, 1214304, 1214305, 1214306, 1214307, 1214308, 1214309, 1214310, 1214311, 1214035, 1214312, 1214010, 1214036, 1214313, 1214314, 1214315, 1214316, 1214317, 1214318, 1214319, 1214320, 1214321, 1214322, 1214323, 1214324, 1214325, 1214326, 1214037, 1214327, 1214328, 1214329, 1214330, 1214331, 1214332, 1214038, 1214333, 1214334, 1214335, 1214039, 1214336, 1214337, 1214338, 1214339, 1214040, 1214340, 1214341, 1214342, 1214343, 1214344, 1214041, 1214042, 1214043, 1214345, 1214044, 1214346, 1214347, 1214045, 1214348, 1214046, 1214349, 1214047, 1214048, 1214350, 1214351, 1214352, 1214049, 1214353, 1214354, 1214355, 1214356, 1214357, 1214006, 1214007, 1214364, 1214374, 1214384, 1214394, 1214404, 1214395, 1214414, 1214415, 1214396, 1214405, 1214416) AND C.READ_METER_STATE = 174), result AS (SELECT F.NAME AREA_NAME, B.BOOK_IN_NO, A.MAIN_ARCH_ID MAIN_ARCH_NO, A.ID USER_ID, A.ARCH_NO, A.USER_NAME, B.RECEIVABLE_FEE, B.DEBTS_NUM, B.MIN_READ_METER_MONTH, B.MAX_READ_METER_MONTH, B.DEBTS_MONTHS, A.USER_ADDRESS, A.TOUCH_PHONE, A.CONTACT_PHONE, (SELECT NAME FROM ueccp.rs_DICTIONARY DA WHERE DA.NODE = A.USER_TYPE) userTypeStr, B.PAY_TYPE, B.LAST_MONTH_READ, B.BASIC_SUM, B.SEW_WA_SUM, B.BASIC_FEE, B.SEW_WA_FEE, C.START_READ_METER_MONTH, C.END_READ_METER_MONTH, C.TOTAL_FEE, ROUND(C.TOTAL_NUM, 0) TOTAL_NUM, coalesce(t1.THIS_MONTH_READ, t1.LAST_MONTH_READ) THIS_MONTH_READ, to_char(e.entry_time, 'yyyy-mm-dd hh24:mi:ss') entry_time, COALESCE(tt.debts_amount, 0) debtsAmount, (C.total_fee - COALESCE(tt.debts_amount, 0)) oldReceIvableFee, (SELECT bb.meter_staff_phone FROM ueccp.rs_area_meter_rela bb WHERE bb.area_id = f.area_id) meter_staff_phone, (SELECT dd.name FROM ueccp.rs_dictionary dd WHERE dd.node = d.pay_type) payTypeStr, D.balance FROM ueccp.rs_USER_ARCH A, (SELECT T.ARCH_NO, MAX(T.USER_ID) USER_ID, MAX(T.AREA_ID) AREA_ID, SUM(T.DEBTS_AMOUNT) RECEIVABLE_FEE, COUNT(DISTINCT meter_read_id) DEBTS_NUM, MAX(DEBTS_MONTHS) DEBTS_MONTHS, MIN(T.LAST_MONTH_READ) LAST_MONTH_READ, MAX(T.THIS_MONTH_READ) THIS_MONTH_READ, MIN(T.READ_METER_MONTH) MIN_READ_METER_MONTH, MAX(T.READ_METER_MONTH) MAX_READ_METER_MONTH, MAX(T.PAY_TYPE) PAY_TYPE, MAX(T.BOOK_IN_NO) BOOK_IN_NO, SUM(T.BASIC_SUM) BASIC_SUM, SUM(T.SEW_WA_SUM) SEW_WA_SUM, SUM(T.BASIC_FEE) BASIC_FEE, SUM(T.SEW_WA_FEE) SEW_WA_FEE, MAX(T.entry_time) entry_time FROM ACT T WHERE 1 = 1 AND T.read_meter_month >= '2025-08' AND T.read_meter_month <= '2025-08' GROUP BY T.ARCH_NO HAVING 1 = 1) AS B LEFT JOIN (SELECT MAX(T.entry_time) entry_time, t.arch_no FROM act t GROUP BY t.arch_no) AS e ON e.arch_no = b.arch_no LEFT JOIN (SELECT MAX(r.THIS_MONTH_READ) THIS_MONTH_READ, MAX(r.LAST_MONTH_READ) LAST_MONTH_READ, arch_no, MAX(entry_time) entry_time FROM act r GROUP BY arch_no) AS t1 ON t1.entry_time = e.entry_time AND t1.arch_no = e.arch_no, ueccp.rs_FEEAREA F, (SELECT MIN(C.READ_METER_MONTH) START_READ_METER_MONTH, MAX(C.READ_METER_MONTH) END_READ_METER_MONTH, SUM(C.DEBTS_AMOUNT) TOTAL_FEE, SUM(C.BASIC_SUM) TOTAL_NUM, C.ARCH_NO FROM ACT C GROUP BY C.ARCH_NO) AS C LEFT JOIN (SELECT SUM(tt.debts_amount) AS debts_amount, tt.arch_no FROM act tt WHERE tt.read_meter_month = (SELECT TO_CHAR(now(), 'yyyy-mm')) GROUP BY arch_no) tt ON tt.arch_no = C.arch_no, ueccp.rs_account D WHERE A.ARCH_NO = B.ARCH_NO AND A.ARCH_NO = C.ARCH_NO AND B.AREA_ID = F.AREA_ID AND a.tenant_id = 'T001' AND B.RECEIVABLE_FEE > 0 AND A.ID = D.USER_ID ORDER BY F.AREA_ID, B.BOOK_IN_NO, a.arch_no) SELECT COUNT(*) AS total FROM result 语句查询太慢 如何优化
08-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值