Mysql
MySQL 配置。查詢沒有得到返回的結果(DataGrip、DBeaver、PHP)。某事超時
我正在執行一個簡單的 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