我正在调试我的数据库的性能问题,并在数据库日志中看到一些不寻常的条目:
2021-04-21 01:07:33.857 UTC [14823] user@db LOG: duration: 933645.469 ms plan:
Query Text: select systemv0_.id as id1_11_0_, systemv0_.createdTs as createdT2_11_0_, systemv0_.systemType as syste3_11_0_, systemv0_.foundProblemsCount as foundPro4_11_0_, systemv0_.groupid as groupid8_11_0_,... (rest omitted for brevity)
这些带有数字和下划线的奇怪标识符是什么?通常,执行计划具有明确的名称和标识符,例如systemview.id
.
我的假设是有几个并发查询并且性能问题是由于数据库拼命地试图在低内存条件下保持一致。我注意到其他查询中有一些可疑的事情 - 几个Recheck Cond
和Materialize
树节点,由于某些 DB 缓冲区的大小不足(由于主机内存不足?),这似乎经常发生。如果有人能证实或揭穿我的理论,那就太好了。
这些不是表名,而是别名。您可以使用它们使查询更具可读性:
但当然,您也可以滥用别名来混淆和膨胀查询,就像某些对象关系映射器所做的那样。
“systemv0_”可能是一个表名(但我怀疑这不太可能)。
“systemv0_”可能是真实表的相关名称(或“别名”) (如 中)。
select ... from table1 as systemv0_
这种“看起来很奇怪的别名”在对象关系映射 (ORM) 工具中非常常见,我怀疑这是生成此查询的原因。请放心,您的数据库中没有发生任何“令人讨厌”的事情。
当然,这个查询对你我来说看起来很奇怪,但对你的 DBMS 来说,它与我们手动编写的基本的“select * from table1”样式查询没有什么不同。(当然,并不是说您会在应用程序代码中使用“select *”)。