上线第一年,点哪儿都跟手。第二年,打开客户列表要等两秒,导出一张报表要几分钟;到了月底结账那天,几个人同时操作,谁点都像在等。有人第一反应是软件不行了,换个新的;也有人直接把服务器配置加了一档,加完快了两周,又慢回去。这篇只讨论一个行业层面的问题:一套管理系统用久了变慢,慢在哪里,怎么分清是数据长了、用法变了,还是环境没跟上。

先说结论:变慢很少是软件突然变差,多数是三件事叠在一起——数据在长、用法在变、维护没跟上。处置有先后:先分清慢在哪一层,再决定花钱还是改习惯。顺序反了,钱花了,问题还在。

慢,通常从哪三处长出来?

把听到的抱怨归归类,源头基本落在三层。

第一层是数据。记录一年一年往里堆,附件一年一年往里存,历史的单据、过期的客户、导出的表格,全都在同一套库里。数据长不一定是问题,问题在于列表默认要算的东西跟着一起长——原来翻两百条,现在翻二十万条,用时自然不一样。第二层是用法。默认列越开越多、时间范围越拉越长、导出动辄全量、月底几个人同时拉大报表。这一层的特点是:它不改变数据量,却能把同一份数据的处理成本放大好几倍。第三层是环境。服务器配置、磁盘剩余空间、网络带宽、同时在用的人数,任何一项到了临界点,体感都会突然变差。

三层的关系可以这么理解:数据层是底子,用法层是放大器,环境层是临界点。同一套系统,在不同公司慢的原因常常完全不同——有的公司在数据,有的公司纯粹是用法,还有的公司只是磁盘快满了。

怎么先判断慢在哪一层?

不需要专业工具,四个观察角度就能把范围缩小很多:谁慢,是全体还是少数几个人;什么时候慢,是全天还是某个时段;慢在哪一步,是打开、保存、导出还是切换;换个环境还慢不慢,换台机器、换个网络再试一次。

把这四个角度和常见现象对照,多数误判能当场排掉。

现象更可能在哪一层先验证什么
只有外地的同事说慢环境层的网络让本地同事同一时间打开同一个页面比较
上午十点、下午三点集中卡环境层的并发看这个时段有多少人在拉列表、导报表
打开列表慢,打开单条记录快用法层与数据层把默认字段减到常用的几列,缩短时间范围再看
导出越来越久数据层先看导出的时间范围是不是又被设成了全部
保存一张单要等很久数据层的关联与附件看这张单挂了多少明细、多少附件
某天突然变慢且一直没恢复环境层看磁盘、内存、服务状态,而不是先改配置

这张表替代不了排查,它的价值在于避免最常见的那个误判:把用法问题当成性能问题,然后去加硬件。加完之后快两周,是因为重启清掉了缓存,用法一点没变,慢还会回来。

数据在长,哪些增长其实没必要?

数据增长里有相当一部分是无效的,清掉不影响业务,却能实实在在减轻负担。

最常见的是重复客户。同一家公司在不同时间被三个人各录一次,或者一次导入进来几百条重复记录,之后再没人回头合并。其次是测试数据。上线初期试录的客户、试建的单据,本来只为了看看效果,结果一直留在正式库里。第三是过期附件。合同扫描件、报价单、现场照片,数量最大、单体也最大,很多早已过了用得上的阶段。第四是历史导出文件。为了做一份报表导出的表格,做完就没人打开,却一直放在服务器上占着空间。

清理要讲方法:先归档,再判断去留;重复的先合并归属,不要直接删;测试数据先确认不是真单;附件按年份打包留存,别在原库里一放到底。更重要的是往回看一层——数据治理不是一次大扫除,而是每次录入时少造一条垃圾。录入端多一道查重、少一个非必填字段,比年底清一次库有效得多。

用法,为什么会比配置更影响速度?

很多慢是用出来的,而且用的人完全无感。

默认列表把所有字段都打开,等于每次打开都在算一遍全部内容;默认时间范围设成全部,用户只想看最近的单子,系统却要把所有历史翻一遍;导出习惯性全量,明明只要这个月的,导出时忘了改范围;月底最后一天下午,几个人同时拉全量报表,谁也别想快。这四件事都不涉及任何技术改动,却能把同一套系统的响应时间拉开几倍。

对应四条习惯,几乎零成本:列只留常用的那几列,其余按需展开;时间范围设一个合理的默认值,比如最近三个月,需要时再放宽;导出前先看一眼范围,全量导出安排在闲时;重活错峰,月底的报表提前两天做。听起来琐碎,但这是投入产出比最高的一层——改配置要人,改习惯只要说清楚。

环境这一层,自己能做的有哪几件?

环境层的动作要花钱,所以更该按顺序来。

先看磁盘。系统和数据放同一块盘、附件又都堆在里面,是最常见的情形;留出余量往往比升级配置更便宜,也更快见效。再看内存与并发。同时在用的人数从十个人涨到三十个人,配置要跟着走,这一步不能靠优化绕过去。第三看网络。跨地区访问慢,多半是链路问题,不一定是系统问题,让本地同事同一时间试一次就能分清。第四是数据库的日常维护,定期做一次完整性核对,把长期积累的碎片理一理,成本不高但常被忽略。

环境层的判断标准其实只有一句:同样的操作,换台机器换个网络再试一次。换了还慢,才谈得上加配置。

本地部署与云端部署下的系统运行环境差异

有些慢不是算得慢,是等得久

还有一类抱怨,听起来和卡顿一样,实际完全不同:打开页面很快,但要等三天才能往下走。等资料、等人、等确认,这些等待在体感上和系统慢没区别,加硬件一点用都没有。

分清两者的方法很简单:看时间花在谁身上。花在屏幕上,是算得慢;花在别人手上,是等得久。前者要靠数据、用法、环境三层去治;后者要靠把责任落到具体的人、把环节的时限说清楚。实际经验里,等待时间往往比计算时间长得多,也更值得先治——只是它不会显示成一条报错,所以最容易被当成技术问题。

什么时候该动结构,什么时候只需改习惯?

判断只需要三个问题:慢的是全体还是少数;是特定操作还是全站;是随时间慢慢恶化,还是某天突然发生。

全体、全站、突然发生,几乎一定在环境层,先查磁盘、内存、服务状态。少数、特定操作、逐步恶化,多半在用法层与数据层,先改默认配置、清无效数据。还有一种情形要单独看:规模真的到了结构撑不住的地步——用户数、数据量、并发都超出了这套设计当初的假设,这时候调整配置只能拖延,换架构或换系统才是正解。但这种情形比想象中少,多数公司在清理与习惯调整之后,都能回到可用状态。

所以顺序应该是:先做便宜的,再做贵的。改默认列、改导出范围、清重复数据,成本几乎为零;加硬件次之;换系统最贵,也最容易被当成第一选择。用久了变慢的系统,很多并不是不能用了,只是没人回头整理过。

常见问题

问:系统用久了变慢,是不是只能换一套?
答:不必。先分清慢在数据、用法还是环境。多数情况在调整默认配置、清理无效数据、补齐环境之后就能缓解;换系统解决的是结构不适合,不是用久了。

问:数据要不要定期删?
答:不建议直接删。先归档、再去重、最后才考虑清理;合同、单据这类记录往往有留存要求,动手前要确认清楚。

问:加服务器配置一定有用吗?
答:只在环境层是瓶颈时有用。如果慢是因为导出全量、列表字段太多,加配置只是让同样的浪费跑得快一点,问题很快会回来。

一套系统的速度曲线,其实是这家公司数据习惯的曲线。刚上线时大家都轻装,越往后越考验有没有人回头整理:谁在往里放东西,放进去的东西还有没有用,用的时候是不是又开了全量。把这些问清楚,比换一套新系统更接近答案。