Performance
MariaDB Uuid 作為主鍵性能問題/調整
我將我們的 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