Mysql

MySQL 配置。查詢沒有得到返回的結果(DataGrip、DBeaver、PHP)。某事超時

  • September 8, 2021

我正在執行一個簡單的 INSERT INTO … SELECT … ON DUPLICATE KEY UPDATE … 使用 DataGrip 或 DBeaver 或 PHP 的查詢,它總是不註冊結果。

裡面的 SELECT 大約需要 10 分鐘,查詢總是完成(表已更新),但程序/PHP 程序沒有得到結果,只是等待。

使用 SHOW FULL PROCESSLIST 我可以看到正在執行的查詢,10 分鐘後它轉換為“命令:睡眠”並掛在那裡。

我的 MySQL 版本是託管在 AWS EC2 上的 5.7.33-0ubuntu0.16.04.1 以及來自 SHOW VARIABLES 的一些相關變數:

Variable_name   Value
connect_timeout 3600
delayed_insert_timeout  300
have_statement_timeout  YES
innodb_flush_log_at_timeout 1
innodb_lock_wait_timeout    100
innodb_rollback_on_timeout  OFF
interactive_timeout 1800
lock_wait_timeout   31536000
net_read_timeout    3600
net_write_timeout   3600
rpl_stop_slave_timeout  31536000
slave_net_timeout   60
wait_timeout    28800

有什麼想法要改變嗎?缺少要更新的配置嗎?謝謝

超時剛剛消失,現在工作正常。我知道發生了什麼,它只是自行修復。沒有對數據庫進行任何更改

(我會接受一個 20 億行的表可能需要 10 分鐘。或者更多。)

計劃 A:複製:主要 + 副本。在副本上執行選擇。

計劃 B:聽起來像匯總表可能會有所幫助。有了這個,您每晚從當天的數據中執行一個不太大的查詢,在不到 10 分鐘的時間內將新行添加到匯總表中。這也有利於SELECT獲得“報告”。更多:http: //mysql.rjweb.org/doc.php/summarytables

標準差

要使用匯總表計算標準偏差,請每天(或任何時間單位)計算:

COUNT(*)  AS ct
SUM(x)    AS sum_x
SUM(x*x)  AS sum_xx

然後通過計算多天的標準偏差

count:    SUM(ct)       AS N
sum(x):   SUM(sum_x)    AS Sx
sum(x*x): SUM(sum_xx)   AS Sxx

然後

Sx / N  AS mean

SQRT( (Sxx - Sx*Sx/N) / N )      AS pop_stdev
SQRT( (Sxx - Sx*Sx/N) / (N-1) )  AS sample_stdev

引用自:https://dba.stackexchange.com/questions/298970