Postgresql

一次發出許多小插入和更新時的 Postgresql 性能問題

  • May 12, 2015

我有一個帶有 postgresql 數據庫的生產網路伺服器。

我的伺服器每小時從另一台伺服器獲取數據。另一台伺服器喚醒並向我的伺服器發送許多請求,每個請求都會導致對 postgresql 數據庫的插入/更新。

為了避免我的伺服器超載,請求被排隊並一次處理一個

所以通常我的伺服器大部分時間都在(不是很多)從數據庫中讀取,並且每小時都會執行許多插入和更新,一個接一個。

我遇到的問題是,一旦更新/插入開始,數據庫的性能會在幾分鐘內變得非常糟糕,然後,即使更新/插入繼續,性能也會變得更好並保持在良好的水平,直到更新/插入完成。

在此處輸入圖像描述

我四處詢問並得到了一些很好的方向,可以解釋網路伺服器本身性能的下降,但由於我看到數據庫的性能也下降了,可能還有更多。

什麼可以解釋這種行為?我怎樣才能解決這個問題?

為了避免我的伺服器超載,請求被排隊並一次處理一個

這就是問題所在。你不是在避免,而是以這種方式導致超載。單行INSERT/UPDATE比整體做同樣的事情要貴得多。每個語句都必須單獨計劃和執行。根據缺少的詳細資訊,可能還會產生事務成本甚至連接成本。

嘗試執行多行INSERT/UPDATE命令。或使用COPY, 或最快的選項之一是定義一個外部表並直接在單個 SQL 命令中從遠端數據庫獲取所有數據(如果可能的話)。

或者根據細節,其他一些複製方法可能適合您的需要。

這是一次更新多行的方式:

以下是如何從 CSV 文件執行此操作:

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