簡體   English   中英

基本插入/更新性能問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM