diff options
author | Martin Polden <mpolden@mpolden.no> | 2020-01-28 18:13:54 +0100 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2020-01-28 18:21:32 +0100 |
commit | b9431971db7eb52f1c6a3da4321b07394484e639 (patch) | |
tree | d77444679b5dd6ca8061ae34d53b2806825816d7 | |
parent | 551febd6d6e1e63750d136e229397c12bf1ec54a (diff) |
Improve log pruning performance
benchmark old ns/op new ns/op delta
BenchmarkDeleteLogBefore-4 110507581 9547903 -91.36%
-rw-r--r-- | sql/sql.go | 4 | ||||
-rw-r--r-- | sql/sql_test.go | 17 |
2 files changed, 21 insertions, 0 deletions
@@ -47,6 +47,9 @@ CREATE TABLE IF NOT EXISTS log ( ); CREATE INDEX IF NOT EXISTS log_time ON log(time); +CREATE INDEX IF NOT EXISTS log_remote_addr_id ON log(remote_addr_id); +CREATE INDEX IF NOT EXISTS log_rr_question_id ON log(rr_question_id); +CREATE INDEX IF NOT EXISTS log_rr_type_id ON log(rr_type_id); CREATE TABLE IF NOT EXISTS log_rr_answer ( id INTEGER PRIMARY KEY, @@ -57,6 +60,7 @@ CREATE TABLE IF NOT EXISTS log_rr_answer ( ); CREATE INDEX IF NOT EXISTS log_rr_answer_log_id ON log_rr_answer(log_id); +CREATE INDEX IF NOT EXISTS log_rr_answer_rr_answer_id ON log_rr_answer(rr_answer_id); CREATE TABLE IF NOT EXISTS cache ( id INTEGER PRIMARY KEY, diff --git a/sql/sql_test.go b/sql/sql_test.go index 72a4df8..50746ed 100644 --- a/sql/sql_test.go +++ b/sql/sql_test.go @@ -231,3 +231,20 @@ func BenchmarkReadLog(b *testing.B) { c.readLog(1000) } } + +func BenchmarkDeleteLogBefore(b *testing.B) { + c := testClient() + for n := 0; n < b.N; n++ { + b.StopTimer() + // Generate test data with many unique values for each column + for i := 0; i < 16; i++ { + for j := 0; j < 256; j++ { + if err := c.writeLog(time.Now(), net.ParseIP(fmt.Sprintf("127.0.%d.%d", i, j)), false, 1, fmt.Sprintf("%d-%d.example.com.", i, j), fmt.Sprintf("127.1.%d.%d", i, j)); err != nil { + b.Fatal(err) + } + } + } + b.StartTimer() + c.deleteLogBefore(time.Now()) + } +} |