我正在维护一个拥有数百万用户的彩票网站。某些活跃用户(也许超过30,000个)会在1秒内购买1000多个彩票。
现在,当前逻辑使用select ....进行更新以确保帐户余额,但是同时数据库服务器超载并且处理起来很慢?我们必须实时处理它们。

有人遇到过类似的场面吗?

最佳答案

首先,您需要设计一个满足您的业务规则的交易系统。暂时,不用理会磁盘和内存以及什么地方。尝试设计一个尽可能轻量的系统,该系统执行的锁最少,并且满足您的业务规则。

现在,运行系统,会发生什么?如果性能可以接受,那么恭喜,您已完成。

如果性能不可接受,请避免尝试猜测问题,然后开始进行调整。您需要分析系统。您需要了解在哪里花费了最多的时间,以便知道哪些方面需要您进行调优。最简单的方法是使用SQL_TRACE对其进行跟踪。您没有提到Oracle版本,版本或平台。因此,我假设您至少使用的是10gR2版本。因此,使用DBMS_MONITOR来开始/结束跟踪。现在,范围在这里很重要。我的意思是,启动跟踪,运行要分析的代码,然后立即关闭跟踪,这一点至关重要。这样,您可以仅跟踪您感兴趣的内容,并且配置文件不会包含任何无关的信息。有了跟踪文件后,就需要对其进行处理。有几种工具。最常见的是Oracle提供的TkProf,但实际上做得并不好。我知道的最好的免费分析器是OraSRP。下载OraSRP的副本,然后检查结果。报告中的数据应为您指明正确的方向。

完成所有步骤后,如果仍然有疑问,请在此处提出一个新问题,我相信我们可以帮助您解释OraSRP的输出,以帮助您了解瓶颈所在。

希望能有所帮助。

07-24 22:21