🪟 Windows TippsAndroid 17: Neue Version ist hier – Das ist alles neu(16.09.2026 um 11:40 Uhr)
🕵️ Hacking12 Best CASB Solutions Compared (2026): Features & Pricing(16.09.2026 um 09:31 Uhr)
🕵️ Hacking12 Best CIEM Tools Compared (2026): Features & Pricing(16.09.2026 um 09:37 Uhr)
🪟 Windows TippsAndroid 17: Neue Version ist hier – Das ist alles neu(16.09.2026 um 11:40 Uhr)
🕵️ Hacking12 Best CASB Solutions Compared (2026): Features & Pricing(16.09.2026 um 09:31 Uhr)
🕵️ Hacking12 Best CIEM Tools Compared (2026): Features & Pricing(16.09.2026 um 09:37 Uhr)

🔧 Programmierung 🕛 vor 1 Jahr 2 Min Lesezeit
0

Dev2

↗ Quelle (dev.to)
🗣️ Stimme:

import java.io.BufferedReader;

import java.io.FileReader;

import java.io.IOException;

import java.util.*;

import java.util.regex.Matcher;

import java.util.regex.Pattern;



public class SQLAnalyzer {




CODE
private static class QueryInfo {
private final String query;
private int stuckCount;
private int activeCount;
private final Set<String> threadIds;
private final Set<Integer> lineNumbers;

public QueryInfo(String query) {
this.query = query;
this.stuckCount = 0;
this.activeCount = 0;
this.threadIds = new HashSet<>();
this.lineNumbers = new HashSet<>();
}

public int getStuckCount() {
return stuckCount;
}

public void setStuckCount(int stuckCount) {
this.stuckCount = stuckCount;
}

public int getActiveCount() {
return activeCount;
}

public void incrementStuck() {
this.stuckCount++;
}

public void incrementActive() {
this.activeCount++;
}

public void addThreadId(String threadId) {
this.threadIds.add(threadId);
}

public void addLineNumber(Integer lineNumber) {
this.lineNumbers.add(lineNumber);
}

@Override
public String toString() {
return String.format(
"Query: %s%nStuck Count: %d%nActive Count: %d%nThread IDs: %s%nLine Numbers: %s%n",
query, stuckCount, activeCount, threadIds, lineNumbers
);
}
}

private final Map<String, QueryInfo> queryMap = new HashMap<>();
private final StringBuilder currentQuery = new StringBuilder();
private String currentThread;
private String currentStatus;
private Integer currentLineNum;
private Boolean isCollectingQuery;

private static final Pattern LOG_PATTERN = Pattern.compile(
"Line (\\d+): DEBUG .*?" +
"\\[(STUCK|ACTIVE)\\] " +
"ExecuteThread: '(\\d+)' .*?" +
"(?:Preparing: )?(SELECT.+?)(?:;\\s*$|(?=Line \\d+: DEBUG))",
Pattern.DOTALL
);

private static final String LOG_FILE_PATH = "C:/Users/Downloads/client_load.log"; // Corrected path

public SQLAnalyzer() {
// No need for initializations here
}

private String normalizeQuery(String query) {
// ... (Your normalization logic - this is fine)
}

public Map<String, QueryInfo> analyzeLogs() throws IOException {
try (BufferedReader reader = new BufferedReader(new FileReader(LOG_FILE_PATH))) {
String line;
while ((line = reader.readLine()) != null) {
processLine(line);
}
if (isCollectingQuery) {
finalizeQuery();
}
}
return queryMap;
}

private void processLine(String line) {
// ... (Your processLine logic - this is fine)
}

private void finalizeQuery() {
String normalizedQuery = normalizeQuery(currentQuery.toString());

QueryInfo info = queryMap.computeIfAbsent(normalizedQuery, QueryInfo::new);

if (Objects.equals(currentStatus, "STUCK")) {
info.incrementStuck();
} else if (Objects.equals(currentStatus, "ACTIVE")) {
info.incrementActive();
}

info.addThreadId(currentThread);
info.addLineNumber(currentLineNum);

isCollectingQuery = false;
currentQuery.setLength(0);
}

public void printAnalysis() {
System.out.println("=== SQL Query Analysis ===\n");

queryMap.entrySet().stream()
.sorted(Comparator.comparingInt(entry -> entry.getValue().getStuckCount() + entry.getValue().getActiveCount()).reversed())
.forEach(entry -> {
System.out.println(entry.getValue().toString());
System.out.println(String.join("", Collections.nCopies(80, "-")) + "\n");
});
}

public static void main(String[] args) {
SQLAnalyzer analyzer = new SQLAnalyzer();
try {
analyzer.analyzeLogs();
analyzer.printAnalysis();
} catch (IOException e) {
System.err.println("Error reading log file: " + e.getMessage());
e.printStackTrace();
}
}




}

Vollständiger Original-Artikel
Den kompletten Beitrag mit allen Details direkt auf dev.to lesen.
↗ Original-Artikel auf dev.to lesen
Wie bewertest du diesen Beitrag?
1 Klick Feedback
Teilen mit Netzwerk & Team:

Community-Analysen & Experten-Meinungen 0

Verfasse deine eigene Analyse, teile Workarounds oder diskutiere diesen Vorfall im Blog.
Noch keine Community-Analyse verfasst. Markiere einen Textabschnitt oder klicke oben auf Eigene Analyse verfassen“!
Community Pulse: Relevanz-Einschätzung
1 Klick Experten-Votum
🔴 Akute Relevanz 0%
🟡 In Evaluierung 0%
🟢 Keine Auswirkung 0%
Spannende Innovation 0%
Verwandte Story-Cluster & Quellen (Vektor-KI)
Port 8095 Engine
2 Quellen
CVE-2026-88255 | ZenHive mpp up to 0.16.1 Duplicate Submission Gate lib/mpp/replay.ex reserve_hash_atomic input validation (EUVD-2026-80256)
1 Quelle
Android 17: Neue Version ist hier – Das ist alles neu
1 Quelle
Die entscheidende Hürde: Xpeng will deutsch und nicht chinesisch sein
Ähnliche Beiträge
🔍 Verwandte News

Auch interessante Nachrichten Dev2

Thematisch verwandte Begriffe: Dev2 · 6 Treffer

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...