2010-03-11 154 views
0

我們的DB具有非常差的插入和更新性能。大多數大桌子每插入需要2-3秒。如果我們重建表格,時間減少到0.02-0.03,這意味着每秒鐘大約40個插入。即使這個數字很低,我們也無法負擔現在重建表格的時間。這是一個耗時的過程,並鎖定表的持續時間。 如果我們將插入組合到事務中,性能會增加。但在我們的應用程序中,我們需要立即提交插入。 任何人都可以建議可以做些什麼來改善插入性能。mysql插入性能

這是從服務器的mysqlreport,如果它指示任何事情:值得注意的一件事是Com_rollback是我們的服務器上非常高。這可能意味着什麼?

MySQL 5.0.51a-3ubuntu5。正常運行時間2 22時23分十一秒週四3月11日9點13分33秒2010

__重點_________________________________________________________________

緩衝區使用3.00克%使用70.03M:2.28
當前552.19M%用途:17.97
寫打到78.74%
讀取命中99.63%

__問題___________________________________________________________

總803.30M 3.2 K/S
COM_ 606.44M 2.4K /秒%總計:75.49
QC點擊130.15M 513.7 /秒16.20
DMS 47.99M 189.4 /秒5.97
+未知18.69M 73.7 /秒2.33
COM_QUIT 32.23k 0.1 /秒0.00
慢速(10)3.24k 0.0/s的0.00%DMS:0.01日誌:ON DMS 47.99M 189.4 /秒5.97
SELECT 40.94M 161.6 /秒5.10 85.30
INSERT 3.92M 15.5 /秒0.49 8.16
UPDATE 2.85M 11.2/s 0.35 5.93
DELETE 29 1.57k 1.2 /秒0.04 0.61
REPLACE 0 0 /秒0.00 0.00
COM_ 606.44M 2.4K /秒75.49
set_option 467.34M 1.8K /秒58.18
回滾126.23M 498.2 /秒15.71
提交11.44M 45.2/s的1.42

__選擇和排序_____________________________________________________

掃描85.20k 0.3 /秒%SELECT:0.21
範圍1.91M 7.5 /秒4.67
FUL升聯接126 0.0 /秒0.00
範圍檢查0 0 /秒0.00
全RNG加入0 0 /秒0.00
排序掃描914 0.0/s的
排序範圍191.09k 0.8/s的
排序MRG傳遞0 0/s的

__查詢高速緩衝_________________________________________________________使用的1.00G%

內存使用190.04M:18。56
塊Fragmnt 24.36%
點擊130.15M 513.7/s的
插入12.10M 47.8/s的
INSRT:剪枝12.10M:1 47.8/s的
命中:插入10.75:1個

__ [表鎖_________________________________________________________

等了52.96k 0.2 /秒%總計:0.08
立即63.16M 249.3/s的

__表______________________________________________________________

打開64 64%緩存的:100.00
開業1.07米4.2/s的

__聯繫_________________________________________________________

最多使用的500%396最大:79.20
總49.06k 0.2/s

__創建臨時文件________________________________________________________

磁盤表5.27k 0.0/s的
表47.47k 0.2/s的大小:200.0M
文件27 0.0/s的

__線程_____________________________________________________________

運行245
緩存的4 0 18 %Hit:39.82
Created 29.53k 0.1/s
Slow 0 0/s

__中止_____________________________________________________________

客戶33.67k 0.1/s的
連接13 0.0/s的

__字節_______________________________________________________________ 發送227.04G 896.0k /秒
收到106.15G 418.9k /秒

__ InnoDB緩衝池__________________________________________________

用法將4.00g的將4.00g%用於:100.00
讀取命中99.96%

免費0%總計:0.00
數據251.34k 95.88%Drty:0.86
其它10807 4.12
鎖存2 0.00
讀取13.04 ģ51.4k/s的
從文件5.02M 19.8 /秒0.04 超前了Rnd 133920 0.5/s的 超前的Sql 246973 1.0/s的 寫入968.37M 3.8K/s的 刷新19.42M 76。6 /秒 等待免費0 0 /秒

__ InnoDB的鎖_________________________________________________________

等待1540 0.0 /秒 電流0 時間獲得 總計1239283毫秒 平均804毫秒 最大51521毫秒

__ InnoDB數據,頁面,行數____________________________________________

數據 閱讀6.86M 27 0.1/s的 寫入21.30M 84.1/s的 FSYNC 13.42M 53.0/s的 待定 讀取1 寫入0 FSYNC 1

頁 創建2.34M 9.2/s的 讀23.39M 92.3/s的 書面19.42M 76.6/s的

行 刪除291.57k 1.2/s的 插入138.07M 544.9/s的 讀7.21G 28.5k/s的 更新2.78M 11.0/s的

回答

0

檢查DISC IO參數。可能你simlpy超載你的光盤子系統 - 這將意味着要獲得更多的光盤,RAID控制器等。

我在Windows/SQL Server上看到了關於壞插入perforamnce的custome rcomlpain,並且測量顯示平均光盤響應時間爲1.2 SECONDS - 如此超載的是光盤。這應該在2位數毫秒的區域 - 比如15ms或者15ms。

0

Com_rollback意思是'commit rollback'我假設。這意味着你有很多事務提交失敗。

通常我懷疑你是在用你的鍵做一些不尋常的事情,特別是你的主鍵(你有一個,對嗎?)。你的密鑰是如何定義的?你是否經常更改密鑰列?如果你的INSERT和UPDATE命令在你重建表之後快得多,那麼它聽起來像你的主鍵,MySQL的命令和存儲你的表的行的主鍵正在改變。

把你的表格定義在這裏應該有幫助(DESCRIBE your_table_nameSHOW CREATE TABLE your_table_name將做的伎倆 - 我偏向後者的格式)。