[英]Basic Insert / Update Performance Issue
運行MySQL數據庫,所有表都是InnoDB
每天晚上,我們都會列出通過批處理腳本發送給我們的最嚴重的慢速查詢列表。
此列表中有兩個查詢,即插入和更新。
插入腳本記錄用戶的頁面視圖。 為了提高效率,我們將只為會話中的用戶編寫一次插入。 因此,我們存儲在會話中查看的頁面,並在頁面加載時執行in_array。 如果頁面不在數組中,那么我們將寫一個插入。
該表有700,000多個記錄,唯一的索引是主鍵(id)。
該表中的插入內容如下所示:
insert into page_views (user_id,page_name,created)
values ('4','Test Page','2013-08-13 10:44:21')
此查詢需要一段時間才能顯示在我們的慢速查詢日志中。 我的問題是,如何才能提高效率。 我覺得這似乎是我們數據庫運行緩慢的部分原因。
我們還有一個更新查詢,該查詢在具有大約14,000多個記錄的InnoDB表上運行。 當用戶首次查看特定記錄並且我們設置標題為“ viewed ='YES'”的字段時,將進行更新。
update test_table set viewed='YES' where id=55
此更新也顯示在慢查詢日志中。 該表“ test_table”具有大約(5)個不同的索引。
慢查詢日志的輸出
計數:165(0.35%)時間:總計2252.210041 s,平均13.649758 s,最大2.026723 s至313.311842 s(8.96%)95%的時間:總計1181.480258 s,平均7.573591 s平均,2.026723 s至49.99961 s最大鎖定時間(s ):總計12.722 ms,平均77,最大38至233(0.04%)鎖定的95%:總計11.681 ms,75平均,38至84最大發送的行:0平均,0至0最大(0.00%)已檢查的行:平均0個,最大0至0(0.00%)數據庫:用戶:XXXXX @ localhost:查詢的100.00%(165),所有用戶的99.76%(46921)
查詢摘要:SET timestamp = N; INSERT INTO page_views(user_id,page_name,創建)VALUES('S','S','S')1;
page_views的表結構
id(int)主鍵page_name(varchar(255))創建的日期時間
在大型表上加快簡單插入和更新速度的方法有哪些?
根據表中大量的行,應定期在這些表中添加/修改行。 我建議先執行以下查詢,並查看您提到的查詢的執行時間:
分析表page_views;
分析表test_table;
上面的命令不會花費很多時間,應該以5/10秒的時間執行。
如果您負擔不起更長的維護時間(取決於表的大小):
優化表page_views;
優化表test_table;
如果您看到性能提高,我也想通知您,您可以配置cron作業,該作業每天執行分析並每周/每月進行優化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.