Mysql

具有 80K-100K 數據庫的 MariaDB 伺服器

  • October 8, 2020

背景 :

我們有一個環境,​​幾乎每分鐘都會創建一個新數據庫,並且在幾天或幾週(最多 1 個月)後將被刪除,因此 /var/lib/mysql/ 中使用的空間約為 300GB~400GB,即 500GB尺寸。

我們在 Centos6 VM 上使用 MariaDB 5.3.5(已修復,無法升級)。

問題 :

當 mysql 卷 90% 使用 85K 數據庫時,創建新數據庫很慢,DB Dropping 也很慢。

問題 :

MariaDB 5.3.5 的 85K 數據庫太多了嗎?

記錄在案的安全限制是多少?

如何使數據庫創建不會被數據庫刪除阻止?

當數據庫太多時,速度緩慢的真正罪魁禍首是什麼?

我可以在伺服器上啟用哪些參數來跟踪緩慢?

詳細資訊: 每個數據庫將有 12 個表。每個表將有 10~100 行。

每個 DB 大約為 3MB~5MB。

我們使用 LVM,將 / 掛載為 ext4。

MariaDB 5.3.5 在具有 Linux 核心 2.6.32-504.3.3.el6.x86_64 的 Centos6.6 VM 上執行。

VM 有 4 個 CPU (3GHz) 和 32GB RAM,託管在執行 Cisco UCS 刀片的 VMWare ESX 5.5 上。

如前所述,文件系統是問題所在。但是,可能會有一些調整會有所幫助。

如果innodb_file_per_table已開啟,則每個數據庫目錄中有 212 個文件。關閉它會導致更少的文件(但不是更少的目錄)。這可能會**有所*幫助。

SHOW VARIABLES LIKE 'table%';
SHOW VARIABLES LIKE 'innodb%files';
SHOW VARIABLES LIKE 'open%';
SHOW GLOBAL STATUS LIKE 'Opened%';
SHOW GLOBAL STATUS LIKE 'Uptime%';
SHOW GLOBAL STATUS LIKE 'Table%';

可以從這些輸出中收集一些資訊。

或者,給我 (1) 數量的 RAM、 (2)SHOW VARIABLES;和 (3) SHOW GLOBAL STATUS;。我將執行一些檢查來查看 table_open_cache 是否太小,以及其他事情。

如果我了解您可以創建多達 85,000 個數據庫?嗯,我同意其中一篇文章,而不是最好的方法。如果“information_schema”無法跟上數據庫的數量,我能想到的唯一問題。你的 key_buffer_size 是多少?你的打開文件限制是多少?表記憶體?

老實說,你最好以不同的方式處理這個問題。與其用很少的表和很少的行創建那麼多數據庫,不如將所有這些數據庫合併到幾個數據庫/表中。如果您必須分離架構(數據庫),我將生成多個 Mysql 伺服器並使用循環系統在每個伺服器上創建數據庫。

(MySQL對數據庫數量沒有限制,底層文件系統可能對目錄數量有限制。)

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