🪟 Windows TippsThe Gemini desktop app is now available for Windows(11.09.2026 um 17:06 Uhr)
🔧 AI Nachrichten ChatGPT automatically logged out [Fix](12.09.2026 um 17:09 Uhr)
⚠️ Malware / Trojaner / VirenWindows 11 just dropped the tool ransomware abused, Microsoft says don’t restore WMIC(10.09.2026 um 20:11 Uhr)
🪟 Windows TippsServertimeout in Outlook über 10 Minuten verlängern(12.09.2026 um 15:10 Uhr)
🕵️ SicherheitslückenCVE-2026-84651 | Jenkins Project up to 2.567.x REST API permission(13.09.2026 um 04:28 Uhr)
🕵️ SicherheitslückenCVE-2026-84652 | Jenkins Project up to 2.567.x session fixiation(13.09.2026 um 04:28 Uhr)
🪟 Windows TippsThe Gemini desktop app is now available for Windows(11.09.2026 um 17:06 Uhr)
🔧 AI Nachrichten ChatGPT automatically logged out [Fix](12.09.2026 um 17:09 Uhr)
⚠️ Malware / Trojaner / VirenWindows 11 just dropped the tool ransomware abused, Microsoft says don’t restore WMIC(10.09.2026 um 20:11 Uhr)
🪟 Windows TippsServertimeout in Outlook über 10 Minuten verlängern(12.09.2026 um 15:10 Uhr)
🕵️ SicherheitslückenCVE-2026-84651 | Jenkins Project up to 2.567.x REST API permission(13.09.2026 um 04:28 Uhr)
🕵️ SicherheitslückenCVE-2026-84652 | Jenkins Project up to 2.567.x session fixiation(13.09.2026 um 04:28 Uhr)

🔧 Programmierung 🕛 vor 1 Jahr 3 Min Lesezeit
0

Dev3

↗ Quelle (dev.to)
🗣️ Stimme:

CODE

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 SQLAnalyzerJava8 {

private static class QueryStats {
String query;
int stuckCount;
int activeCount;
Set<String> threadIds = new HashSet<>();
Set<Integer> lineNumbers = new HashSet<>();

public QueryStats(String query) {
this.query = query;
}
}

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"; // **Use forward slashes or double backslashes**

public void analyzeLogs() {
Map<String, QueryStats> statsMap = new HashMap<>();

try (BufferedReader reader = new BufferedReader(new FileReader(LOG_FILE_PATH))) {
String line;
StringBuilder currentQuery = new StringBuilder();
String currentThread = null;
String currentStatus = null;
Integer currentLineNum = null;
boolean isCollectingQuery = false;

while ((line = reader.readLine()) != null) {
Matcher matcher = LOG_PATTERN.matcher(line);

if (matcher.find()) {
if (isCollectingQuery) {
// Finalize the previous query
finalizeQuery(statsMap, currentQuery.toString(), currentStatus, currentThread, currentLineNum);
currentQuery.setLength(0); // Reset
}

currentLineNum = Integer.parseInt(matcher.group(1));
currentStatus = matcher.group(2);
currentThread = matcher.group(3);
String queryPart = matcher.group(4);

if (queryPart != null) {
currentQuery.append(queryPart);
isCollectingQuery = true;
}
} else if (isCollectingQuery && !line.trim().isEmpty()) {
currentQuery.append(" ").append(line.trim());
}
}

// Finalize the last query (if any)
if (isCollectingQuery) {
finalizeQuery(statsMap, currentQuery.toString(), currentStatus, currentThread, currentLineNum);
}

} catch (IOException e) {
System.err.println("Error reading log file: " + e.getMessage());
e.printStackTrace();
}

printAnalysis(statsMap);
}

private void finalizeQuery(Map<String, QueryStats> statsMap, String query, String status, String threadId, Integer lineNum) {
String normalizedQuery = normalizeQuery(query);

// Simpler logic for Java 8 - no computeIfAbsent
QueryStats stats = statsMap.get(normalizedQuery);
if (stats == null) {
stats = new QueryStats(normalizedQuery);
statsMap.put(normalizedQuery, stats);
}

if ("STUCK".equals(status)) {
stats.stuckCount++;
} else if ("ACTIVE".equals(status)) {
stats.activeCount++;
}

stats.threadIds.add(threadId);
stats.lineNumbers.add(lineNum);
}

private String normalizeQuery(String query) {
if (query == null) {
return "";
}

query = query.replaceAll("\\s+", " ").trim();

// Normalize parameter placeholders
query = query.replaceAll("=\\s*\\?", "= ?");
query = query.replaceAll("IN\\s*\\([^)]*\\)", "IN (?)");

// Normalize numbers in identifiers
query = query.replaceAll("\\b\\d+\\b", "?");

// Normalize quoted strings
query = query.replaceAll("'[^']*'", "?");

// Handle BETWEEN
query = query.replaceAll("BETWEEN\\s*\\?\\s*AND\\s*\\?", "BETWEEN ? AND ?");

// Handle LIKE
query = query.replaceAll("LIKE\\s*\\?", "LIKE ?");

// Basic handling of order of clauses (very simplistic example)
if (query.startsWith("SELECT")) {
String[] parts = query.split("WHERE");
if (parts.length == 2) {
String selectAndFrom = parts[0].trim();
String whereClause = parts[1].trim();

String[] conditions = whereClause.split("AND");
Arrays.sort(conditions);

query = selectAndFrom + " WHERE " + String.join(" AND ", conditions);
}
}

return query;
}

private void printAnalysis(Map<String, QueryStats> statsMap) {
System.out.println("=== SQL Query Analysis ===\n");

List<QueryStats> sortedStats = new ArrayList<>(statsMap.values());
Collections.sort(sortedStats, new Comparator<QueryStats>() {
@Override
public int compare(QueryStats s1, QueryStats s2) {
// Sort by combined stuck and active count, descending
return Integer.compare(s2.stuckCount + s2.activeCount, s1.stuckCount + s1.activeCount);
}
});

for (QueryStats stats : sortedStats) {
System.out.println("Query: " + stats.query);
System.out.println("Stuck Count: " + stats.stuckCount);
System.out.println("Active Count: " + stats.activeCount);
System.out.println("Thread IDs: " + stats.threadIds);
System.out.println("Line Numbers: " + stats.lineNumbers);
System.out.println("--------------------------------------------------------------------------------\n");
}
}

public static void main(String[] args) {
SQLAnalyzerJava8 analyzer = new SQLAnalyzerJava8();
analyzer.analyzeLogs();
}
}



Vollständiger Original-Bericht
Ausführliche Details, Code-Beispiele & Hersteller-Stellungnahme auf dev.to.
↗ 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
1 Quelle
The Gemini desktop app is now available for Windows
1 Quelle
ChatGPT automatically logged out [Fix]
1 Quelle
Windows 11 just dropped the tool ransomware abused, Microsoft says don’t restore WMIC
Ähnliche Beiträge
🔍 Verwandte News

Auch interessante Nachrichten Dev3

Thematisch verwandte Begriffe: Dev3 · 6 Treffer

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...