我正在维护一个拥有超过数百万用户的彩票网站。一些活跃用户(可能超过30,000)会在1秒内购买超过1000张彩票。 现在当前的逻辑使用 select .... for update 来确保帐户余额,但同时数据库服务器过载且处理速度非常慢?我们必须实时处理它们。
有人遇到过类似的场景吗?
最佳答案
首先,您需要设计一个满足您的业务规则的事务系统。暂时忘掉磁盘和内存,以及什么放在哪里。尝试设计一个尽可能轻量的系统,执行所需的最少锁定量,以满足您的业务规则。
现在,运行系统,会发生什么?如果性能可以接受,那么恭喜你,你就完成了。
如果性能 Not Acceptable ,避免猜测问题的诱惑,并开始进行调整。您需要对系统进行概要分析。您需要了解花费最多时间的地方,以便您知道应该将调优工作重点放在哪些方面。最简单的方法是使用 SQL_TRACE 进行跟踪。您没有提及 Oracle 版本、版本或平台。所以,我假设您至少使用的是 10gR2 的某个版本。因此,使用 DBMS_MONITOR 来开始/结束跟踪。现在,范围界定在这里很重要。我的意思是,启动跟踪、运行要分析的代码然后立即关闭跟踪至关重要。这样,您只跟踪您感兴趣的内容,并且配置文件不会包含任何无关信息。获得跟踪文件后,您需要对其进行处理。有几种工具。最常见的是TkProf,它是Oracle提供的,但确实做得不是很好。据我所知,最好的免费分析器是 OraSRP。下载 OraSRP 的副本,并检查结果。报告中的数据应该为您指明正确的方向。
完成所有这些操作后,如果您仍有疑问,请在此处提出新问题,我相信我们可以帮助您解释 OraSRP 的输出,从而帮助您了解瓶颈所在。
希望有帮助。
关于java - Oracle如何解决大量并发写操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8163531/