Postgresql
PostgreSQL 執行計劃中帶有數字和下劃線的奇怪表
我正在調試我的數據庫的性能問題,並在數據庫日誌中看到一些不尋常的條目:
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_.id 作為 id1_11_0_
, systemv0_.createdTs作為 createdT2_11_0_ , systemv0_.systemType 作為
syste3_11_0_
, systemv0_.foundProblemsCount 作為 foundPro4_11_0_
, systemv0_.groupid 作為 groupid8_11_0_
,…
“systemv0_”可能是一個表名(但我懷疑這不太可能)。
“systemv0_”可能是真實表的相關名稱(或“別名”) (如 中)。
select ... from table1 as systemv0_
這種“看起來很奇怪的別名”在對象關係映射 (ORM) 工具中*非常常見,我懷疑這是生成此查詢的原因。*請放心,您的數據庫中沒有發生任何“令人討厭”的事情。
當然,這個查詢對你我來說看起來很奇怪,但對你的 DBMS 來說,它與我們手動編寫的基本的“select * from table1”樣式查詢沒有什麼不同。(當然,並不是說您會在應用程式碼中使用“select *”)。