Skip to content

Commit 9692728

Browse files
committed
fix high cpu usage inner 2240
1 parent a799969 commit 9692728

File tree

1 file changed

+5
-14
lines changed

1 file changed

+5
-14
lines changed

src/main/java/com/actiontech/dble/statistic/stat/UserSqlHighStat.java

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,13 @@
77

88
import java.util.*;
99
import java.util.concurrent.ConcurrentHashMap;
10-
import java.util.concurrent.locks.ReentrantLock;
1110

1211
public class UserSqlHighStat {
1312

1413
private static final int CAPACITY_SIZE = 1024;
1514

1615
private Map<String, SqlFrequency> sqlFrequencyMap = new ConcurrentHashMap<>();
1716

18-
private ReentrantLock lock = new ReentrantLock();
1917

2018

2119
private StatSqlParser sqlParser = new StatSqlParser();
@@ -24,24 +22,17 @@ public void addSql(String sql, long executeTime, long startTime, long endTime) {
2422
String newSql = this.sqlParser.mergeSql(sql);
2523
SqlFrequency frequency = this.sqlFrequencyMap.get(newSql);
2624
if (frequency == null) {
27-
if (lock.tryLock()) {
28-
try {
29-
frequency = new SqlFrequency();
30-
frequency.setSql(newSql);
31-
} finally {
32-
lock.unlock();
33-
}
34-
} else {
35-
while (frequency == null) {
36-
frequency = this.sqlFrequencyMap.get(newSql);
37-
}
25+
frequency = new SqlFrequency();
26+
frequency.setSql(newSql);
27+
SqlFrequency tmp = sqlFrequencyMap.putIfAbsent(newSql, frequency);
28+
if (tmp != null) {
29+
frequency = tmp;
3830
}
3931
}
4032
frequency.setLastTime(endTime);
4133
frequency.incCount();
4234
//TODO setExecuteTime has thread safe problem
4335
frequency.setExecuteTime(executeTime);
44-
this.sqlFrequencyMap.put(newSql, frequency);
4536
}
4637

4738

0 commit comments

Comments
 (0)