最近,我们的 oracle 数据库在我们目前知道的 1 个查询上锁定了问题。
我将分解发生的事情,但实际上与我的问题没有太大关系,但我愿意接受建议。
断断续续地不知道什么时候会发生,在过去的一个月里已经发生了 4 次,用户会点击应用程序中的某些内容。用户点击的内容仍然未知。无论点击什么,它都会在数据库上运行一个查询,该查询将生成大约 700k 行。
我检查了正在运行查询的表,并且索引看起来不错。
数据库是 60GB,服务器上有 32GB。
从数据库服务器上的日志中,我看到高 I/O 但 CPU 和 RAM 保持不变。
一台应用服务器,CPU 高达 75% 左右。我可以找到工作进程,找到 PID,但是当我终止与工作进程关联的 PID 时,CPU 会短暂下降,然后又重新启动。
同样回收应用程序池,并重新启动 IIS 会做同样的事情,CPU 会短暂下降,然后重新启动。
要使服务器恢复正常,唯一可以做的就是重新启动。
所以我的建议如果这个查询是导致锁定的原因,可以增加盒子上的内存以允许数据库被缓存并耗尽内存。我听说过一次,但我不确定这是不是真的。
存储是具有 3 层的 HP PAR 3,数据库几乎位于 SSD 层中。
SSD和内存哪个更快
DRAM 比 NAND 闪存快。RAM 访问时间约为 100 ns,而 SSD 随机读取时间约为 16,000 ns。每个程序员都应该知道的延迟数字
您需要对正在发生的事情和原因进行系统分析。不要仅仅因为你听说过另一个系统的二手信息而改变事情。找出这个系统的问题所在。
幸运的是,DBMS 系统往往具有性能工具。Oracle 和其他 RDBMS 必须
EXPLAIN PLAN
显示完整扫描和其他低效率。即使使用索引,查询也可以执行得非常糟糕。还有像 Oracle AWR 之类的系统性能报告来查找瓶颈。如果您想进一步了解数据库性能,您也可以询问我们的姊妹网站 https://dba.stackexchange.com/