aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/database/Database/DatabaseWorkerPool.cpp13
-rw-r--r--src/server/database/Database/DatabaseWorkerPool.h10
-rw-r--r--src/server/game/Maps/MapUpdater.cpp6
-rw-r--r--src/server/worldserver/Main.cpp10
4 files changed, 39 insertions, 0 deletions
diff --git a/src/server/database/Database/DatabaseWorkerPool.cpp b/src/server/database/Database/DatabaseWorkerPool.cpp
index 21f3ff423b3..53ca065136e 100644
--- a/src/server/database/Database/DatabaseWorkerPool.cpp
+++ b/src/server/database/Database/DatabaseWorkerPool.cpp
@@ -34,6 +34,10 @@
#include "Transaction.h"
#include "MySQLWorkaround.h"
#include <mysqld_error.h>
+#ifdef TRINITY_DEBUG
+#include <sstream>
+#include <boost/stacktrace.hpp>
+#endif
#define MIN_MYSQL_SERVER_VERSION 50100u
#define MIN_MYSQL_CLIENT_VERSION 50100u
@@ -413,6 +417,15 @@ void DatabaseWorkerPool<T>::Enqueue(SQLOperation* op)
template <class T>
T* DatabaseWorkerPool<T>::GetFreeConnection()
{
+#ifdef TRINITY_DEBUG
+ if (_warnSyncQueries)
+ {
+ std::ostringstream ss;
+ ss << boost::stacktrace::stacktrace();
+ TC_LOG_WARN("sql.performances", "Sync query at:\n%s", ss.str().c_str());
+ }
+#endif
+
uint8 i = 0;
auto const num_cons = _connections[IDX_SYNCH].size();
T* connection = nullptr;
diff --git a/src/server/database/Database/DatabaseWorkerPool.h b/src/server/database/Database/DatabaseWorkerPool.h
index f72817c3a8f..13d52f99539 100644
--- a/src/server/database/Database/DatabaseWorkerPool.h
+++ b/src/server/database/Database/DatabaseWorkerPool.h
@@ -206,6 +206,13 @@ class DatabaseWorkerPool
//! Keeps all our MySQL connections alive, prevent the server from disconnecting us.
void KeepAlive();
+ void WarnAboutSyncQueries([[maybe_unused]] bool warn)
+ {
+#ifdef TRINITY_DEBUG
+ _warnSyncQueries = warn;
+#endif
+ }
+
private:
uint32 OpenConnections(InternalIndex type, uint8 numConnections);
@@ -225,6 +232,9 @@ class DatabaseWorkerPool
std::unique_ptr<MySQLConnectionInfo> _connectionInfo;
std::vector<uint8> _preparedStatementSize;
uint8 _async_threads, _synch_threads;
+#ifdef TRINITY_DEBUG
+ static inline thread_local bool _warnSyncQueries = false;
+#endif
};
#endif
diff --git a/src/server/game/Maps/MapUpdater.cpp b/src/server/game/Maps/MapUpdater.cpp
index 9b0b42ee679..1b433e04caf 100644
--- a/src/server/game/Maps/MapUpdater.cpp
+++ b/src/server/game/Maps/MapUpdater.cpp
@@ -16,6 +16,7 @@
*/
#include "MapUpdater.h"
+#include "DatabaseEnv.h"
#include "Map.h"
#include "Metric.h"
@@ -102,6 +103,11 @@ void MapUpdater::update_finished()
void MapUpdater::WorkerThread()
{
+ LoginDatabase.WarnAboutSyncQueries(true);
+ CharacterDatabase.WarnAboutSyncQueries(true);
+ WorldDatabase.WarnAboutSyncQueries(true);
+ HotfixDatabase.WarnAboutSyncQueries(true);
+
while (1)
{
MapUpdateRequest* request = nullptr;
diff --git a/src/server/worldserver/Main.cpp b/src/server/worldserver/Main.cpp
index e53d2741b18..01556d4ef4f 100644
--- a/src/server/worldserver/Main.cpp
+++ b/src/server/worldserver/Main.cpp
@@ -481,6 +481,11 @@ void WorldUpdateLoop()
uint32 realCurrTime = 0;
uint32 realPrevTime = getMSTime();
+ LoginDatabase.WarnAboutSyncQueries(true);
+ CharacterDatabase.WarnAboutSyncQueries(true);
+ WorldDatabase.WarnAboutSyncQueries(true);
+ HotfixDatabase.WarnAboutSyncQueries(true);
+
///- While we have not World::m_stopEvent, update the world
while (!World::IsStopped())
{
@@ -506,6 +511,11 @@ void WorldUpdateLoop()
Sleep(1000);
#endif
}
+
+ LoginDatabase.WarnAboutSyncQueries(false);
+ CharacterDatabase.WarnAboutSyncQueries(false);
+ WorldDatabase.WarnAboutSyncQueries(false);
+ HotfixDatabase.WarnAboutSyncQueries(false);
}
void SignalHandler(boost::system::error_code const& error, int /*signalNumber*/)