我們對單個MySQL表(存儲用戶活動信息)進行了簡單更新。比方說,我們將它們分組爲每秒批量更新。MySQL:平均每箱支持多少次更新?
我想知道當一個典型的4核8GB盒子上的mysql何時開始有一個問題跟上每秒更新的時間。例如。每秒可以做多少行更新?
這是一個想法練習,以決定在我們的應用程序發佈初期(即簡化開發)我是否應該使用MySQL,或者如果MySQL很可能在短時間內發生炸彈,甚至不值得冒險走這條路。
我們對單個MySQL表(存儲用戶活動信息)進行了簡單更新。比方說,我們將它們分組爲每秒批量更新。MySQL:平均每箱支持多少次更新?
我想知道當一個典型的4核8GB盒子上的mysql何時開始有一個問題跟上每秒更新的時間。例如。每秒可以做多少行更新?
這是一個想法練習,以決定在我們的應用程序發佈初期(即簡化開發)我是否應該使用MySQL,或者如果MySQL很可能在短時間內發生炸彈,甚至不值得冒險走這條路。
,你可以得到一個體面的,唯一的辦法就是通過基準測試您的特定使用案例的開銷。變量太多,而且沒有辦法。
它不應該花太長時間,如果你只是敲一個bash腳本或一個小演示程序,並用jmeter錘擊它,那麼這可以給你一個好主意。
我試圖用基準測試類似的用例時使用了jmeter。不同的是我在尋找編號爲INSERTS
的寫入吞吐量。在我玩遊戲時出現的最有用的東西是'innodb_flush_log_at_trx_commit'參數。如果您使用的是INNODB
和不需要 ACID符合您的用例,然後將其更改爲0.這與吞吐量的差異爲INSERT
,並且可能在您的UPDATE
用例中執行相同的操作。雖然請注意,使用此設置,更改只會每秒刷新到磁盤一次,因此如果您的服務器出現斷電或某種情況,您可能會丟失一秒鐘的數據。
在我的四核8GB機爲我用例:
innodb_flush_log_at_trx_commit=1
造成每秒innodb_flush_log_at_trx_commit=0
80個INSERTS造成每秒這些數字很可能將承擔2000 INSERTS沒有與您的用例相關 - 這就是爲什麼您需要自己進行基準測試的原因。
唯一的問題是,這個設置是全局的,所以如果你有一個數據庫需要它,一個不需要,你必須安裝兩個MySQL實例... –
不會將'innodb_flush_log_at_trx_commit'設置爲0結果在更快的表現? Ho在2級是最符合ACID標準的時候是否會在第2級獲得2000插入? –
是的,你是對的。 0是每秒只刷新到磁盤的設置。更新。謝謝。 – theon
這個問題不容易給出一個普遍的答案。您要求的數字不僅依賴於數據庫服務器的硬件,MySQL本身,還依賴於服務器/客戶端配置,網絡以及數據庫/表格設計 - 同樣重要。
一般來說,如果我從localhost
開始,在最新服務器上使用裸MySQL設置並使用唯一密鑰更新語句,但我不會在200 update-statementsp er second下面出現問題。至少這是我在六歲的winxp測試環境中獲得的。在新系統上進行裸設備的規模會更大。如果你認爲方式更大,一臺服務器是不可行的。 MySQL在某些方面可以是tweaked和scaled out,因此很多公司都非常依賴它。
只是一些基本知識:
There are whole books written about it,所以我會在這裏停下來,並建議一些進一步的閱讀,如果你有興趣!
它很大程度上取決於您用於推送到數據庫的代碼的質量。
如果您編寫批處理每INSERT
請求(即,
INSERT INTO table (field) VALUES (value_1);
INSERT INTO table (field) VALUES (value_2);
...
INSERT INTO table (field) VALUES (value_n);
,你的表現會和好如初。
如果您插入使用值的單一INSERT
(即插入單個值
INSERT INTO table (field) values (value_1),(value_2)...(value_n);
,你會發現,你可以很容易地插入每秒
多條記錄作爲一個例子,我編寫了一個快速應用程序,它需要將一個LDAP帳戶請求的詳細信息添加到持有數據庫。一次插入一個字段(即,即,LDAP_field, LDAP_value
),整個腳本的執行花費了10秒。當我將這些值串聯到一個INSERT請求中時,腳本的執行時間從開始到結束降低到大約2秒。這包括啓動和提交事務
希望這有助於
您的交易界限在哪裏?您是否需要[耐久性](http://en.wikipedia.org/wiki/Durability_(database_systems))? –