為什麼 Federatedx Engine 在 MariaDB 10.6 中非常慢,並且必須讀取所有表才能僅獲取前 10 行?
我正在嘗試從一個 MariaDB 到另一個 MariaDB 獲取 10 行。但是,這需要一分半鐘。
我創建了帶有指向遠端 MariaDB 的聯合引擎的表。包括所有索引。
我嘗試了以下幾點但沒有成功:
- 只得到 5 列
- 使用兩個外掛 federatedx 和 federated
- 獲取包括索引日期在內的前 10 行,將執行時間減少到 45 秒。但還是很慢。
my.cnf 兩邊都有預設值:
$$ mysqld $$ datadir=D:/MARIADB/數據埠=3306 innodb-page-size=65536 innodb_buffer_pool_size=7G character-set-server=utf8 event_scheduler=ON $$ client $$ port = 3306 plugin-dir = D:/MARIADB/lib/plugin
最後,我發現讀取舊答案和分析伺服器之間傳輸的資訊量的問題:SELECT in federated table is to slow
當您擁有 federatedX 表並直接執行 select 獲取前 10 行 (select * from table1 limit 10; ) 時。所有表都從主機伺服器移動到遠端伺服器,在我的情況下,它的大小為 3GB(45 秒 x 500 Mbps = 25000 Mbits / 8 = 3.12GB aprox),這是表的總大小。移動所有表後,MariaDB 目標獲取前 10 行,使其效率低下:
解決方案是按照舊文章中的建議在 WHERE 語句中使用索引列(由 Verace 推薦)。使用 WHERE 語句中的索引列,FEDERATEDX 引擎僅將索引中的寄存器從伺服器移動到伺服器。使用索引列,查詢僅花費了 1.938 秒,並且在我的案例中將一天的資訊在伺服器之間移動了 100 MB。
SELECT * FROM db.table1 WHERE start_date=‘2021-07-14’ LIMIT 10