Postgresql

PostgreSQL 過程語言成本 (plpython / plsql / pllua…)

  • August 25, 2015

我正在嘗試在實時任務的過程語言性能中查找有關 PostgreSQL使用者定義函式的資訊。

  1. 它們與內置函式相比如何?
  2. Postgres 如何呼叫/管理 plpython vs plpgsql vs pllua 函式有什麼區別(成本)(我對 Postgres 集成/上下文/數據傳輸方面感興趣,而不是 VM 本身)?
  3. 上下文是一個很大的成本嗎?我可以將它用於實時數據映射(假設 1000 個查詢/秒))
  4. 在 plpgsql 然後在其他 pg/語言中編寫使用者定義的函式有什麼好處嗎?他們在文件中列舉了優勢,但我認為它們適用於所有 postgresql 過程語言。

相關發現:

  1. 解釋語言中的 UDF 幾乎總是比用 C 或內置函式編寫的 UDF 慢得多,所有其他事情都是一樣的。
  2. 每種語言綁定都有不同的程式碼將 PostgreSQL 連接到該語言,具有不同程度的優化、不同的傳遞某些數據類型的方式等。因此肯定存在差異。除非您傳遞的數據類型在一種語言中的處理方式與另一種語言的處理方式截然不同,否則它不應該很大,例如,一種將 ahstore作為字元串傳遞,而另一種將其轉換為dict.
  3. 不清楚“上下文”是什麼。你能用它來“實時數據映射”嗎……嗯,這取決於函式的作用,以及它在執行它的伺服器上是否足夠快,對於它要處理的客戶端,以及你的要求。一段繩子有多長?基準。
  4. PL/PgSQL 編寫起來更簡單,並且可以更快地訪問 SQL。當您需要圍繞大量 SQL 包裝一些邏輯時,通常會更好。數學運算和復雜算法的速度非常慢,因此應盡可能避免使用 PL/PgSQL 中的純計算程式碼,以支持 C 或更快的過程語言。

用 C 語言重新實現 PL/PgSQL 程式碼時的加速可以從微不足道到超過 1000 倍不等。這一切都取決於程式碼實際在做什麼。

(這種多問題不太適合 Stack Exchange,因為很難有明確的答案)

引用自:https://dba.stackexchange.com/questions/81094