java - Oracle如何解决大量并发写操作?

标签 java oracle concurrency transactions real-time

我正在维护一个拥有超过数百万用户的彩票网站。一些活跃用户(可能超过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/

相关文章:

python - 哪个 Python API 连接到 Oracle

Java ConcurrentSkipListMap的computeIfAbsent方法 "applied once atomically"

java - Java EE 应用程序中的并发

c# - 如何在一个 IEnumerable 上同时运行两种方法

java - 来自 ContributionManager 中 IActions 的表中的复选框

java - 当我停止使用 Tomcat 9 和 Java 10 的 Spring Boot Web 应用程序时的非法反射访问

python - Oracle 11g - 即使有 NOCACHE 提示,查询似乎也会缓存

sql - 将 24 小时时间转换为 12 小时加上 AM/PM 指示 Oracle SQL

java - 如何使用 jEdit 处理导入?

java - 两个BlockingQueue在同一个死循环中?