From 91ae5ed3a4902e8ecf3a0e4a69f06b3ebf95ab4c Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Fri, 9 Sep 2022 21:15:03 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E8=B0=83=E6=95=B4=E5=86=99?= =?UTF-8?q?=E5=85=A5=E5=8D=95=E6=AC=A1=E5=86=99=E5=85=A5=E8=AE=BF=E9=97=AE?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=95=B0=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/db/models/http_access_log_dao.go | 15 +++++++++++++-- internal/db/models/http_access_log_dao_test.go | 2 +- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/internal/db/models/http_access_log_dao.go b/internal/db/models/http_access_log_dao.go index 6e16e16f..7c4107c8 100644 --- a/internal/db/models/http_access_log_dao.go +++ b/internal/db/models/http_access_log_dao.go @@ -86,13 +86,24 @@ func init() { // 导出队列内容 goman.New(func() { var ticker = time.NewTicker(1 * time.Second) + var accessLogPerLoop = accessLogPerTx + for range ticker.C { - var countTxs = accessLogCountPerSecond / accessLogPerTx + var countTxs = accessLogCountPerSecond / accessLogPerLoop if countTxs <= 0 { countTxs = 1 } for i := 0; i < countTxs; i++ { - hasMore, err := SharedHTTPAccessLogDAO.DumpAccessLogsFromQueue(accessLogPerTx) + var before = time.Now() + hasMore, err := SharedHTTPAccessLogDAO.DumpAccessLogsFromQueue(accessLogPerLoop) + + // 如果用时过长,则调整每次写入次数 + var costMs = time.Since(before).Milliseconds() + if costMs > 150 { + accessLogPerLoop = accessLogPerTx / 4 + } else if costMs > 100 { + accessLogPerLoop = accessLogPerTx / 2 + } // 这里不需要恢复成默认值,因为可能是写入数量比较小 if err != nil { remotelogs.Error("HTTP_ACCESS_LOG_QUEUE", "dump access logs failed: "+err.Error()) } else if !hasMore { diff --git a/internal/db/models/http_access_log_dao_test.go b/internal/db/models/http_access_log_dao_test.go index 7ad5533d..f7ead1a7 100644 --- a/internal/db/models/http_access_log_dao_test.go +++ b/internal/db/models/http_access_log_dao_test.go @@ -79,7 +79,7 @@ func TestCreateHTTPAccessLog_Tx(t *testing.T) { if err != nil { t.Fatal(err) } - for i := 0; i < 1000; i++ { + for i := 0; i < 200; i++ { err = SharedHTTPAccessLogDAO.CreateHTTPAccessLog(tx, dao.DAO, accessLog) if err != nil { t.Fatal(err)