Mysql

MySql/MariaDb 每秒大約可以容忍多少次讀/寫?

  • August 8, 2022

我正在執行一個 python 腳本,它讀取一些歷史數據並將其插入 MariaDb。有很多數據,我考慮將其拆分為多個部分並執行腳本的多個實例。

但是由於腳本的單個實例已經以高速讀取和寫入 Db,在我看來,我想知道:MariaDb 平均每秒可以容忍多少次讀取/寫入?

如果我創建更多腳本實例會發生什麼?MariaDb 會以某種方式崩潰嗎?或者它會簡單地放慢一點但最終正確處理所有數據?

如何評估每秒是否有太多數據?

$ mysql --version
mysql  Ver 15.1 Distrib 10.5.15-MariaDB,

這取決於。

HDD,一次寫入一行——100 行/秒。

SSD 加上下面的一些提示 - 10K 行/秒。

對於寫:

  • SSD 可能比 HDD 快 10 倍。
  • 在單個 INSERT 語句中批處理 100 行比一次一行快 10 倍。( executemany)
  • 多個連接(程序)可以獲得一些並行性,對於 10 個執行緒,可能高達 5 倍。
  • LOAD DATA可以比上述任何一點更快地處理 CSV 文件——當然比在應用程序中讀取 csv、解析它、建構查詢(甚至是批處理)、將其發送到 MySQL/MariaDB、讓它解析等更好。
  • 多個二級索引,尤其是在一定程度上UNIQUE減慢了任何一個。INSERT

對於閱讀:

讀取速度更快——鎖定更少等。一些速度提示:

  • 擁有足夠大的 buffer_pool 來記憶體所有數據——也許是 10 倍的加速。
  • 不使用 UUID。
  • 多個連接,特別是如果不阻塞同一個表上的寫入。
  • 多行讀取
  • 更少的往返(例如,不要SELECTid,然後轉身並SELECT使用這些 id。)
  • 在 SQL 中聚合,而不是在應用程序中。(也就是說,當工作可以在數據庫中完成時,不要將大量數據鏟到應用程序中。)
  • 讓應用程序和數據庫在地理位置上“更接近”。(回复:網路延遲)

讀取和寫入:

注意死鎖和“鎖定等待超時”。特別是,如果你不抓住這些並處理它們,你可能會“失去”數據。(相反,重播交易等)

通常,更多的連接會導致完成更多的工作。然而,在“幾十個”連接之後,吞吐量停滯不前,延遲達到頂峰。

對於“連續”高速攝取:http: //mysql.rjweb.org/doc.php/staging_table

很忙

當“太多”發生時,所有執行緒都會執行得更慢——等待它們共享的 I/O 或 CPU 或記憶體空間或其他任何東西。

有多種超時。當這種情況發生時,特定的操作(INSERT,交易等)將中止。您應該注意錯誤,以便您可以採取某種恢復操作,否則活動就會失去。

當事情變得太忙時,MySQL(和伺服器)不太可能“崩潰”。

至於讀取與寫入——它們都在爭奪資源(I/O、CPU 等);一個可能會比其他延遲更多;很難預測哪個程序更有可能超時。

DBA 應該辨識最慢的查詢並尋找加速(或避免)這些查詢的特定方法,從而為所有程序釋放資源。

一個常見的情況是使用mysqldump每晚備份所有數據。典型設置將鎖定一個表足夠長的時間,以便對該表的寫入抱怨和超時。還有其他方法可以進行備份;可能有辦法在晚上的那個時候避免這樣的寫入;等等

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