mirror of
https://github.com/actiontech/dble.git
synced 2026-01-06 21:00:25 -06:00
fix high cpu usage inner 2240
This commit is contained in:
@@ -7,7 +7,6 @@ package com.actiontech.dble.statistic.stat;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
|
||||
public class UserSqlHighStat {
|
||||
|
||||
@@ -15,7 +14,6 @@ public class UserSqlHighStat {
|
||||
|
||||
private Map<String, SqlFrequency> sqlFrequencyMap = new ConcurrentHashMap<>();
|
||||
|
||||
private ReentrantLock lock = new ReentrantLock();
|
||||
|
||||
|
||||
private StatSqlParser sqlParser = new StatSqlParser();
|
||||
@@ -24,24 +22,17 @@ public class UserSqlHighStat {
|
||||
String newSql = this.sqlParser.mergeSql(sql);
|
||||
SqlFrequency frequency = this.sqlFrequencyMap.get(newSql);
|
||||
if (frequency == null) {
|
||||
if (lock.tryLock()) {
|
||||
try {
|
||||
frequency = new SqlFrequency();
|
||||
frequency.setSql(newSql);
|
||||
} finally {
|
||||
lock.unlock();
|
||||
}
|
||||
} else {
|
||||
while (frequency == null) {
|
||||
frequency = this.sqlFrequencyMap.get(newSql);
|
||||
}
|
||||
frequency = new SqlFrequency();
|
||||
frequency.setSql(newSql);
|
||||
SqlFrequency tmp = sqlFrequencyMap.putIfAbsent(newSql, frequency);
|
||||
if (tmp != null) {
|
||||
frequency = tmp;
|
||||
}
|
||||
}
|
||||
frequency.setLastTime(endTime);
|
||||
frequency.incCount();
|
||||
//TODO setExecuteTime has thread safe problem
|
||||
frequency.setExecuteTime(executeTime);
|
||||
this.sqlFrequencyMap.put(newSql, frequency);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user