Performance

MariaDB Uuid 作為主鍵性能問題/調整

  • February 19, 2021

我將我們的 mariadb 數據庫從 PRIMARY KEY INT AUTO_INCREMENT 升級到 UUID PRIMARY KEY。我們有大約 80 個表,它們之間有多種關係。我已經建構了一個遷移腳本來將 id 欄位更改為 BINARY(16) 並為每一行創建一個 Uuid v4。然後我更新了與新 uuid 的關係(也作為 BINARY(16))。當我執行多個查詢來進行性能基準測試時,我的本地 docker 環境的平均性能下降了 15%。id 欄位是 PRIMARY KEY。關係欄位被標記為索引並具有外鍵約束。

我能做些什麼來提高性能?

大多數表都有大約 20 萬個條目。整個數據庫大小為3.2GB

UUID 在性能方面並不好。特別是,您通過 UUID 獲取的“下一個”行與目前記憶體的所有其他行之間沒有關係。

Docker 可能有一個“小”值innodb_buffer_pool_size,因此當隨機訪問表時會導致 I/O。

UUID v1 可以對其位進行洗牌以使它們“按時間順序”,將消除大部分訪問的“隨機性”。但是您使用的是 v4。

計劃 A:放棄 UUID。

計劃 B:使用 UUID v1打亂位

計劃 C:給 docker 足夠的空間來擁有一個大的 buffer_pool,以便大多數索引可以保存在 RAM 中。

更多:http: //mysql.rjweb.org/doc.php/uuid

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