超碰人人人人人,亚洲AV午夜福利精品一区二区,亚洲欧美综合区丁香五月1区,日韩欧美亚洲系列

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

性能比拼: MySQL vs PostgreSQL

admin
2025年4月8日 23:58 本文熱度 367

本內容是對知名性能評測博主 Anton Putra MySQL vs PostgreSQL Performance Benchmark (Latency - Throughput - Saturation)[1] 內容的翻譯與整理, 有適當刪減, 相關指標和結論以原作為準

MySQL vs PostgreSQL 數(shù)據(jù)庫性能對比

在本內容中,我們將對比 MySQL 和 PostgreSQL 關系型數(shù)據(jù)庫的性能。我們將運行一系列測試,其中 第一項測試 重點關注 數(shù)據(jù)寫入(ingestion)效率。

首先,我們會測量:

  • 數(shù)據(jù)插入請求的延遲,使用 p99 百分位數(shù) 進行評估
  • 數(shù)據(jù)庫的吞吐量,即每秒可處理的 請求數(shù)和插入數(shù)
  • 數(shù)據(jù)庫的飽和度(saturation),即數(shù)據(jù)庫的負載情況,在這里我們主要關注:
    • CPU 使用率
    • 內存使用率

此外,我們還會測量:

  • 磁盤寫入操作數(shù)
  • 數(shù)據(jù)庫在磁盤上的存儲效率

值得一提的是,這兩種數(shù)據(jù)庫在這些方面的差異 非常大。

最后,我們將評估 數(shù)據(jù)庫的連接池(connection pool),觀察它們如何管理插入數(shù)據(jù)的連接。

在 第二項測試 中,我們將測量 數(shù)據(jù)讀?。╮etrieval) 的效率。

我使用的是當前最新版本:

  • PostgreSQL 17.0
  • MySQL 9.0


測試設計

為了進行測試,我在 兩個數(shù)據(jù)庫 中分別創(chuàng)建了 兩張表,具體的 SQL 語句如下。

假設我們有一個 分析系統(tǒng)(analytics backend),用于記錄 用戶在網(wǎng)站上的行為,例如:

  • 登錄
  • 登出
  • 搜索
  • 將商品加入購物車

數(shù)據(jù)庫中有兩張表:

  1. Customer 表
    • 存儲用戶的 姓名、地址
    • 設有 主鍵 ID
  2. Event 表
    • 設有 主鍵 ID
    • 外鍵 指向 Customer 表的主鍵
    • 記錄 用戶執(zhí)行的操作類型(action type)

第一項測試
我們將使用以下 SQL 語句插入數(shù)據(jù),隨機生成客戶 ID 和操作類型。

第二項測試
我們將在包含 約 7000 萬條記錄 的數(shù)據(jù)庫上執(zhí)行 簡單的 JOIN 查詢

  • 隨機生成一個 event ID
  • 查詢并連接 customer 表
  • 返回用戶的姓名、地址和操作類型

如果你有任何關于 改進測試設計 的建議,請告訴我!


代碼概覽

在客戶端編寫方面,我選擇使用 Golang,因為:

  • Golang 是一門流行的編程語言
  • 它擁有成熟的數(shù)據(jù)庫驅動庫

為了讓 MySQL 和 PostgreSQL 的測試盡可能公平,我使用 database/sql 接口 進行數(shù)據(jù)庫操作,而不是直接使用 pgx 驅動(盡管 pgx 可能會降低查詢延遲)。
但本次測試的重點是 對比數(shù)據(jù)庫本身的性能,而不是不同的驅動實現(xiàn)。

此外,我確保:

  • 執(zhí)行相同的 SQL 查詢
  • 使用相同的數(shù)據(jù)庫連接配置

如果你有任何改進建議,請告訴我,或者更好的是,提交一個 Pull Request


第一項測試:數(shù)據(jù)寫入

現(xiàn)在,我們開始 第一項測試

這次測試 總共持續(xù)了近 3 小時,但我會將其壓縮至 幾分鐘 展示。
測試過程中,我們會:

  • 部署多個客戶端
  • 逐步增加負載
  • 持續(xù)向數(shù)據(jù)庫發(fā)送請求
  • 每 60 秒增加一個虛擬客戶端

你可以在 右上方的圖表 看到 每秒查詢數(shù)(QPS),而 左側圖表 顯示的是 從客戶端測量的插入延遲。

測試結果:

  • 從一開始,PostgreSQL 的插入延遲明顯低于 MySQL
  • MySQL 插入數(shù)據(jù)的時間幾乎是 PostgreSQL 的兩倍
  • PostgreSQL 的 CPU 使用率更低,意味著它有更大的吞吐能力
  • PostgreSQL 占用的內存也更少

最大區(qū)別:

  • MySQL 需要更多的磁盤操作來存儲相同數(shù)量的記錄
  • PostgreSQL 在磁盤上的存儲效率更高
  • PostgreSQL 執(zhí)行的磁盤操作更少,數(shù)據(jù)占用空間也更小

連接池情況:

  • 兩個數(shù)據(jù)庫的連接池最終都達到了 80 個連接
  • 每個客戶端的最大連接數(shù)設置為 40
  • 每個數(shù)據(jù)庫有 2 個客戶端在不斷生成負載

臨界點:

  • 當 QPS 達到 5,500 時,MySQL 開始跟不上 PostgreSQL
  • MySQL 的延遲和 CPU 使用率激增,導致整體性能下降
  • 當 QPS 達到 12,000 時,我為 PostgreSQL 額外添加了一個客戶端
  • 最終,PostgreSQL 最高可處理 19,000 QPS(4 核 CPU + 直連 SSD)
  • MySQL 最高只能處理 10,000 QPS,約為 PostgreSQL 的一半

第一項測試:數(shù)據(jù)分析

現(xiàn)在,我們查看 整個測試期間的數(shù)據(jù)

  1. 每秒查詢數(shù)(QPS)

  1. 插入延遲(客戶端測量)

  1. CPU 使用率

  1. 總插入記錄數(shù)

  • PostgreSQL 插入 約 6500 萬條記錄
  • MySQL 插入 約 5000 萬條記錄
  • 在第二項測試前,我會為 MySQL 增加一些記錄,使數(shù)據(jù)量一致
  1. 內存使用

  1. 磁盤寫入操作

  1. 連接池大小

  1. 數(shù)據(jù)庫大小
    • PostgreSQL 存儲數(shù)據(jù)的 磁盤效率更高
    • CPU 和磁盤操作占用更少
    • PostgreSQL 在數(shù)據(jù)寫入方面明顯優(yōu)于 MySQL


第二項測試:數(shù)據(jù)讀取

在運行 第二項測試 之前,我為 MySQL 額外添加了一些記錄,使其與 PostgreSQL 的數(shù)據(jù)量保持一致。

測試內容:

  • 查詢 event 表中的數(shù)據(jù)
  • 通過 event ID 進行 JOIN
  • 返回用戶的姓名、地址和操作類型
  • 測試前,重啟兩個數(shù)據(jù)庫,以清除緩存

磁盤讀取數(shù)據(jù)問題:

  • 由于可能的配置錯誤,我沒有獲取到 PostgreSQL 的磁盤讀取數(shù)據(jù)
  • 但我仍然有 MySQL 的磁盤操作數(shù)據(jù)

測試結果:

  • 延遲差距不像第一項測試那么大
  • 但 PostgreSQL 仍然比 MySQL 低延遲
  • MySQL 的 CPU 使用率 顯著高于 PostgreSQL
  • 這個趨勢一直持續(xù),直到 MySQL 達到 CPU 使用瓶頸,性能下降

臨界點:

  • 當 QPS 達到 18,000 時,MySQL 的性能下降更明顯
  • MySQL 的延遲出現(xiàn)波動,而 PostgreSQL 仍然保持穩(wěn)定
  • 當 QPS 達到 20,000 時,MySQL 無法再處理更多查詢
  • 我為 PostgreSQL 額外增加了一個客戶端,加速測試
  • 最終,PostgreSQL 在 32,000 QPS 時達到 90% CPU 使用率,開始下降

結論:

  • 在數(shù)據(jù)寫入和讀取方面,PostgreSQL 都比 MySQL 更高效
  • 如果你有任何改進建議,例如更改客戶端代碼或測試設計,請告訴我!

第二項測試:數(shù)據(jù)分析

現(xiàn)在,我們查看 整個測試期間的數(shù)據(jù)

  1. 每秒查詢數(shù)(QPS)

  1. 數(shù)據(jù)讀取延遲

  1. CPU 使用率

  1. 內存使用

  1. 數(shù)據(jù)庫連接數(shù)

  1. 磁盤讀取操作

參考資料
[1] 

MySQL vs PostgreSQL Performance Benchmark (Latency - Throughput - Saturation): 

https://www.youtube.com/watch?v=R7jBtnrUmYI

閱讀原文:原文鏈接


該文章在 2025/4/9 12:01:24 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業(yè)務管理,結合碼頭的業(yè)務特點,圍繞調度、堆場作業(yè)而開發(fā)的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved