`

记一次性能优化 reclaim

 
阅读更多

项目的开发终于只剩了我一个,自己瞎搞终于抠完了,发现将近100万的数据量根本跑不动,页面就剩一个圈圈在转,于是只能改代码优化.

逻辑中有先把符合规则的数据select 出来,然后处理一下再一条条update和insert.

首先把update 写成batch update

//                for(Match match:updateMatchList){
//                    executor.update("MATCH.updateMatch", match);
//                    batch++;
//                    if(batch==500){
//                        LOG.info(""+i);
//                        executor.executeBatch();       
//                        batch=0;
//                        i++;
//                    }
//                }

 

把insert into 写成insert into ()values(...),(...),(...)的形式, 改善很小没啥用

 

2.然后想到改sql, 希望把n个sql并成一条

于是把select的记录把id取出拼成数组,写成update ... where id in(...)的形式,但这样由于id太多,sql太长,结果超出了mysql的允许大小.并且一次取出超过100000条数据在内存会out of menory,后来又把这些每50000条记录拆分操作,没报错但还是很慢.

 

    <insert id="saveMatchClassfication" parameterClass="java.util.List">
        insert into matchClassfication (
            match_id,
            class_id,
            priority,
            created_at
        )values
       
        <iterate conjunction =",">
            <![CDATA[
            (#matches[].id#, #matches[].classId#, #matches[].priority#, now())
            ]]>
        </iterate>
       
    </insert>
   

    <update id="updateMatchClassIdBatch" parameterClass="java.util.HashMap">
        update matchedVideo
        set class_id=#classId#
        where id in
              <iterate close=")" open="("   conjunction="," property="idList">
                <![CDATA[ 
                 #idList[]#  
                ]]>  
            </iterate>        
    </update>

 

3.后来受同事启发一开始就不应该把记录先取出再处理,而应该直接用sql处理, 这样既不需要update上万次也没有out of menory的风险.于是稍微调增额业务处理的顺序,然后用两句sql搞定.然后发现数据量大sql的效率极低,甚至低于修改前.后来检查了一下sql,发现在where 中用了 is null,这样不会走索引,百万级数据会直接卡死.于是又修改了业务处理的顺序,避免这种问题.

 

4. 总结 :

  a.能优化逻辑先优化逻辑,避免把表中大量数据一次取出的情况

  b.避免一大批数据要一条一条update/insert的情况

  c.写sql时避免关联很大的表,最好能用表中的一部分数据取出成一个新表再做关联

  d.对于索引失效的情况得注意

  e.适时用存储过程等做优化

  f.对于读操作数据量大时要用缓存,避免每次都和数据库打交道

  g.若还是很慢无法忍受,只能改成异步操作,每次用户点完直接返回并加上恰当的提示不至于让用户一直等在那无法操作.

分享到:
评论

相关推荐

    基于Oracle8i的数据库性能优化.pdf

    【Oracle8i数据库性能优化】 ...Oracle8i数据库性能优化是一个综合性的任务,涉及数据库设计、参数配置、监控分析等多个环节。通过对这些方面的细致调整,可以实现数据库性能的显著提升,从而满足日益增长的业务需求。

    Allocation & Reclaim实验报告.doc

    "Allocation & Reclaim"实验是一个重要的操作系统实践环节,它让学习者深入理解内存管理的复杂性和重要性。通过模拟分配和回收过程,参与者能够更好地掌握操作系统的核心机制,这对于未来在IT领域的职业发展具有深远...

    reclaim-website-rendered

    "reclaim-website-rendered" 是一个与网站优化相关的项目,其主要目标可能是提升网站的渲染性能和资源管理。在Web开发中,优化网站的渲染速度对于用户体验至关重要,特别是对于那些内容丰富、交互复杂的网站。这里...

    Allocation & Reclaim

    在IT行业中,内存管理和优化是系统性能的关键环节。"Allocation & Reclaim" 是这个领域中的核心概念,主要涉及计算机程序如何有效地分配和回收内存资源。本文将深入探讨这两个主题,并结合"Allocation&Rec"的标签,...

    Apache优化全面详细教程

    针对数据库的优化也是提高Web应用程序性能的关键环节之一。以下是一些基本的MySQL优化策略: 1. **编译和安装MySQL**:确保使用了最新稳定版本的MySQL,并且在编译时选择了合适的优化选项。 2. **优化表结构**:...

    LAMP服务器性能优化技巧之Apache服务器优化

    在"Console"部分,用户可以调整Apache的关键参数以优化性能: 1. "Modified File Detection":自动检测文件改动,确保更新的代码能及时生效。 2. "Filepath Identification":设定文件路径深度,影响Apache查找文件...

    内存优化方案

    内存压缩技术作为一种有效的内存优化手段,在提升系统性能方面发挥着重要作用。本文将详细介绍内存压缩技术的前身与现状以及其工作原理。 #### 一、内存压缩的前身与现状 ##### 1.1 前身:Compcache 内存压缩的...

    胡凯 - Android内存优化之5R法则

    在Android开发中,内存优化始终是开发者面临的一大挑战。特别是随着移动设备性能的提升和应用功能的增加,如何有效地管理内存使用成为提升应用性能的关键。根据胡凯在MDCC 2015中国移动开发者大会上的演讲内容,我们...

    垃圾回收零象.rar

    另一个文件名“ox_reclaim”可能是后端服务器或数据库的一部分,可能包含了与骑手(Ox,这里可能是牛的英文ox,寓意强壮有力)相关的回收业务逻辑和数据存储。 总结起来,这个“垃圾回收零象”系统是一个集成了前端...

    tsm磁带使用tsm磁带使用,Reclamation回收概念TSM单驱动器磁带回收测试记录

    - **调度**:Reclaim通常每60分钟执行一次,应选择非关键备份时间执行。 - **磁盘stgpool**:单个driver时,必须指定磁盘stgpool作为reclaim pool。 - **仅对Full磁带操作**:Reclaim仅针对Full状态的磁带执行。 ...

    一位内核开发者的见闻记Linux Kernel Summit2011大会.pdf

    【Kernel Memory Accounting】内核内存会计(kernel memory accounting)是跟踪内核空间内存使用情况的过程,这对于理解系统整体内存使用和优化性能至关重要。在大型网络服务器环境中,确保准确的kernel memory ...

    改后ReclaimCMP表面缺陷的优化与研究.docx

    【描述】:本文是硕士研究生学位论文,主题聚焦于Reclaim CMP(化学机械平坦化)过程中的表面缺陷优化与研究,属于集成电路设计领域。作者通过分析硅片在CMP工艺后的表面损伤和污染,探讨如何提高控挡片(用于监测...

    Android 中app内存回收优化(一):R版本

    配合framework 下CachedAppOptimizer 中的关于 proc reclaim 节点的驱动patch。

    SSD磁盘在VMware vSphere5.5 下不能正确显示测试.docx

    "VMware vSphere 5.5 中的 SSD 磁盘设置和优化" 在 VMware vSphere 5.5 环境中,如何正确设置 SSD 磁盘以发挥其性能?本文将对此进行详细的介绍和优化方法。 标题解释 标题 "SSD 磁盘在 VMware vSphere 5.5 下不能...

    算法设计与分析课件

    《算法设计与分析》是计算机科学领域的一门核心课程,主要关注如何有效地解决问题,并通过算法的设计、实现和分析来优化计算过程。王晓东教授的第三版课件是该领域的经典资源,深受学习者欢迎。本课件涵盖了算法设计...

    TSM存储池磁带回收方案

    Reclaim STGPOOL命令是指将所有剩余文件从一个卷移动到另一个卷,使卷上的分段空间可以再次使用。该命令可以回收顺序存取存储池中的卷。 知识点5:WORM设备的存储池 WORM设备的存储池是指使用一次写入、多次读取的...

    linux监控 安全

    它涉及到识别和消除系统瓶颈,优化操作系统配置,以达到最佳性能。性能监控不仅局限于提高系统速度,还包括确保资源合理分配,防止过载和系统崩溃。 #### 监控工具的安装与使用 安装和配置适当的监控工具是进行性能...

    藏经阁-HBase 在网易的实践.pdf

    在本文档中,"藏经阁-HBase 在网易的实践...综上所述,网易在HBase的实际应用中采取了一系列系统和架构层面的优化措施,以提高大数据处理的效率和稳定性。这些经验对于其他企业或组织在使用HBase时具有重要的参考价值。

    深入理解DB2插入时间集群ITC表内部原理-contracted.doc

    3. 定期运行`REORG TABLE … RECLAIM EXTENTS`以优化空间利用率,但要选择在系统负载较低的时候执行,避免影响在线业务。 4. 监控表的扩展和空间使用情况,以便及时调整存储策略。 总之,插入时间集群表(ITC)是...

Global site tag (gtag.js) - Google Analytics