簡體   English   中英

MYSQL 隨機更新查詢耗時較長

[英]MYSQL Update Query randomly takes a long time

我在網絡服務器上有一個 php 腳本,稱為每秒一個。 此腳本訪問 mysql 數據庫並讀取/更新一些信息。 大多數情況下,腳本會在 <30 毫秒內返回結果。 然而,有時腳本需要 4-8 秒。

編輯的表格只有 1 行 4 列。

通過記錄腳本使用的不同部分的時間,我發現時間總是被第一個 UPDATE 查詢所消耗。 如果查詢的順序發生變化,情況也是如此。

我還嘗試將所有內容放在一個 mySql 事務中,然后提交 function 需要第一個 UPDATE 查詢正常使用的時間。

我已經通過“顯示打開的表 WHERE In_use > 0”檢查了鎖定表; 但沒有找到。

通常需要時間的查詢代碼如下:

// Add Timestamp
echo ("BeforeTimestamps Updated" . (time()- $time) . "Seconds"); // DEBUG DEBUG DEBUG
$time =  time();
// Try updating Timestamp
$sql = "UPDATE $LobbyID SET lastconnect=$reftime WHERE id = $PlayerID";
$conn -> query($sql);
echo ("Timestamps Updated" . (time()- $time) . "Seconds"); // DEBUG DEBUG DEBUG

所以出於某種原因,有時連接的第一次更新查詢需要幾秒鍾,我不知道為什么。 因此,如果有人可以提供幫助,我將非常高興。

編輯:根據評論中的要求; 這是顯示創建表

+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table    | Create Table                                                                                                                                                                                                                           |
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| L2787828 | CREATE TABLE `L2787828` (
 `id` int unsigned NOT NULL,
 `type` varchar(2) NOT NULL,
 `command` text NOT NULL,
 `lastconnect` int NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

(如果我跳到錯誤的結論,請道歉。)

你有幾張桌子? L2787828讓我擔心你可能有 2787828 個表,這是一個嚴重的問題——表的緩存空間有限。 打開(和必要的關閉)很多桌子效率很低。 將所有相似的表合並到一個帶有額外列的表中以根據需要區分行會更有效。

(有一個單行甚至單列的表是完全可以的,但如果它不是許多類似表中的一個。)

時間將通過以下方式解釋:

  • table_open_cache中彈出一些其他“打開的表”。
  • 打開L2787828這涉及通過操作系統接觸至少兩個文件,以及 InnoDB 中的一些元表。
  • 然后繼續UPDATE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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