Cloverleaf v19.1.2.1P – Persistent Database Connection for Performance Optimization & Reducing Connection Overhead
Hi everyone,
We are using Cloverleaf v19.1.2.1P and facing severe performance bottlenecks because our current architecture establishes a new database connection per message to MSSQL Server.
We are looking for a persistent MSSQL connection that can be used across multiple messages without opening & closing connections for every single message.
Architecture & Current Setup
We have divided our Cloverleaf system into three dedicated sites:
1️⃣ IB-Site (Inbound-Site)
One central ADT-Thread receiving all ADT messages
Distributes messages via Static/RAW route to a Destination-Thread in the PROC-Site
2️⃣ PROC-Site (Processing-Site)
Handles business logic, Xlate transformations, routing & database interaction
50+ routes, 10-15 of them perform direct database operations
Each message is written to MSSQL via a TCL script after Xlate
Currently, every message opens & closes a new database connection
Goal: Utilize a persistent database connection for performance optimization
3️⃣ OB-Site (Outbound-Site)
External systems are connected via standard Outbound-Threads
Communication from PROC-Site to OB-Site happens via Destination-Threads
Problem: High Overhead Due to Per-Message DB Connection
Our TCL scripts in the PROC-Site establish a new database connection for each message, leading to:
1️⃣ High Total Queue Time (TQT) due to connection overhead
Each process opens a new DB connection (~100-300ms per message)
Under high load, database routing becomes overloaded
34 incoming ADT messages resulted in over 500 processed messages
Tests & Approaches
1️⃣ Persistent ODBC Connection via Windows & TCL
❌ Not possible – Each TCL execution opens a new session
2️⃣ Stored Procedures via Database-Outbound-Thread
❌ Issue: Cannot pass parameters dynamically to the stored procedure
Goals
✅ Use a persistent MSSQL database connection for all messages
✅ TCL scripts should use an existing connection instead of opening a new one per message
✅ Reduce connection overhead by a factor of 2x – 5x
✅ Significantly decrease Total Queue Time (TQT) & improve scalability
Questions to the Community
🔹 How can a persistent MSSQL connection be used across multiple message processes in Cloverleaf?
🔹 Can Cloverleaf Database-Inbound & Outbound Threads be configured to act as persistent connections?
🔹 Is there a way to use Windows ODBC sessions persistently?
🔹 How can dynamic SQL parameters be passed to a Database-Outbound-Thread?
Any insights & experiences would be greatly appreciated! 🚀
Cloverleaf v19.1.2.1P – Persistente Datenbankverbindung für Performance-Optimierung & Reduktion von Verbindungs-Overhead
Hallo zusammen,
wir arbeiten mit Cloverleaf v19.1.2.1P und stehen vor einem erheblichen Performance-Engpass, da unsere derzeitige Architektur dazu führt, dass pro Nachricht eine neue Datenbankverbindung zu MSSQL aufgebaut und wieder abgebaut wird.
Wir suchen eine Lösung, um eine persistente MSSQL-Verbindung in Cloverleaf zu nutzen, ohne pro Nachricht eine neue Verbindung zu öffnen.
Architektur & Aktuelles Setup
Unser Cloverleaf-System ist in drei dedizierte Sites aufgeteilt:
1️⃣ IB-Site (Inbound-Site)
Zentraler ADT-Thread, der alle eingehenden ADT-Nachrichten verarbeitet
Nachrichten werden über eine Static/RAW Route an ein Destination-Thread in die PROC-Site übergeben
2️⃣ PROC-Site (Processing-Site)
Hier erfolgt die Business-Logik, Xlate-Mapping, Routing & Datenbank-Interaktion
50+ Routen, wovon 10-15 direkt mit der Datenbank interagieren
Jede Nachricht wird nach einem Xlate über ein TCL-Script in die Datenbank geschrieben
Aktuell baut das TCL-Skript pro Nachricht eine neue MSSQL-Verbindung auf und wieder ab
Ziel: Eine persistente Datenbankverbindung, um die Performance zu optimieren
3️⃣ OB-Site (Outbound-Site)
Externe Systeme werden über reguläre Outbound-Threads angebunden
Die Kommunikation zwischen PROC-Site und OB-Site erfolgt über Destination-Threads
Problemstellung: Hoher Overhead durch Verbindungsaufbau pro Nachricht
Unsere TCL-Skripte in der PROC-Site führen für jede einzelne Nachricht einen vollständigen Verbindungsaufbau zur MSSQL-Datenbank durch.
Dies führt zu folgenden Problemen:
1️⃣ Hohe TQT (Total Queue Time) durch Overhead
Jeder Nachrichtenprozess baut eine neue DB-Verbindung auf (~100-300ms pro Nachricht)
Bei hoher Last sind die Datenbank-Routings überlastet
Testlauf mit 34 ADT-Eingangsnachrichten resultierte in über 500 Ausgangsnachrichten
Tests & Lösungsversuche
1️⃣ Persistente ODBC-Verbindung für MSSQL über Windows & TCL nutzen
❌ Nicht möglich → Cloverleaf öffnet bei jedem TCL-Aufruf eine neue ODBC-Session
2️⃣ Stored Procedures via Database-Outbound-Thread
❌ Problem: Übergabe von Parametern an die Stored Procedure nicht möglich
Zielsetzung: Was wir erreichen wollen
✅ Eine persistente MSSQL-Datenbankverbindung für alle Nachrichten
✅ TCL-Skripte sollen bestehende Verbindungen nutzen, anstatt sie pro Nachricht neu aufzubauen
✅ Reduktion des Verbindungs-Overheads um Faktor 2x – 5x
✅ Signifikante Reduktion der Total Queue Time (TQT) und bessere Skalierbarkeit
Fragen an die Community
🔹 Wie kann man in Cloverleaf eine persistente MSSQL-Verbindung über mehrere Nachrichtenprozesse hinweg nutzen?
🔹 Ist es möglich, die Cloverleaf Database-Inbound- und Outbound-Threads so zu konfigurieren, dass sie als persistente Verbindung genutzt werden?
🔹 Gibt es eine Möglichkeit, Windows ODBC-Sessions dauerhaft zu nutzen?
🔹 Wie kann man dynamische SQL-Parameter an einen Database-Outbound-Thread übergeben?
Wir freuen uns über jeglichen Input & Erfahrungen! 🚀