无码国模产在线观看免费-无码国内精品久久人妻-无码国内精品久久综合88-无码国内精品人妻少妇-无码国内精品人妻少妇蜜桃视频-无码国语中文在线播放

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

性能比拼: MySQL vs PostgreSQL

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

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

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

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

首先,我們會測量:

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

此外,我們還會測量:

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

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

最后,我們將評估 數(shù)據(jù)庫的連接池(connection pool),觀察它們?nèi)绾喂芾聿迦霐?shù)據(jù)的連接。

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

我使用的是當(dāng)前最新版本:

  • PostgreSQL 17.0
  • MySQL 9.0


測試設(shè)計

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

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

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

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

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

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

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

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

如果你有任何關(guān)于 改進(jìn)測試設(shè)計 的建議,請告訴我!


代碼概覽

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

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

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

此外,我確保:

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

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


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

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

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

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

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

測試結(jié)果:

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

最大區(qū)別:

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

連接池情況:

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

臨界點:

  • 當(dāng) QPS 達(dá)到 5,500 時,MySQL 開始跟不上 PostgreSQL
  • MySQL 的延遲和 CPU 使用率激增,導(dǎo)致整體性能下降
  • 當(dāng) QPS 達(dá)到 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. 內(nèi)存使用

  1. 磁盤寫入操作

  1. 連接池大小

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


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

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

測試內(nèi)容:

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

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

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

測試結(jié)果:

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

臨界點:

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

結(jié)論:

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

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

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

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

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

  1. CPU 使用率

  1. 內(nèi)存使用

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

主站蜘蛛池模板: 白嫩无码人妻丰满熟妇啪啪 | 天天在线高清黄页 | 国产精品久久久久无码人妻网站 | h入口成人精品人伦一区二区三区蜜 | 精品亚洲成a人片在线观看 精品亚洲成a人在线播放 | 丰满人妻熟妇乱又伦精品视 | 精品无码久久久久久久久水蜜桃 | 99久久婷婷国产综合 | 欧美多毛的大隂道 | 国产成人精品美女在线 | 高清无码观看日产韩国精品黄色 | 国产69精品麻豆久久久久 | 欧美日韩午夜一区二区 | 免费看国产精品麻豆 | 91久久偷偷做嫩草影院精品 | 1区2区日韩欧美国产 | 久久美女精品国产精品亚洲 | 欧美孕妇乱大交xxxx | 一本大道一卡二卡三卡四卡在线观 | 国产精品国产精品专区不卡 | 狠狠色丁香婷婷综合久久片 | 亚洲国产另类久久久精品小说 | 国产区图片区小说区亚洲区 | 欧美孕妇变态重口另类 | av无码电影一区二区三区 | 亚洲精品白浆高清久久久久久 | 国产伦一区二区三区精品免费 | 日韩高清成人 | 丁香五月开心婷婷 | 99福利在线观看 | 国产爆乳无码福利电影 | 国产果果在线播放在线 | 亚洲人妻精品综合无码专区 | 国产成人av在线 | 久久九九精品国产av片国产 | 国产精品毛片a∨一区二区三区 | 亚洲一级aa无 | 麻豆短视频传媒网站 | 人妻无码久久 | 国产偷窥熟女精品视频大全 | 无码免费一区二区三区日本A片 |