From 736b9ac112fd6a9b2ccd889e0925eda9d18a4806 Mon Sep 17 00:00:00 2001 From: Giacomo Pozzoni Date: Thu, 30 Jul 2020 19:42:27 +0000 Subject: Log sync db queries in World::Update() loop (#25174) * Core/Misc: Log sync queries on critical path * Fix build * Rename * Fix warning * Fix no-pch * Change WarnAboutSyncQueries() to be header-only (cherry picked from commit deceb11b5fc52c8036f249d628ccc69ca5d022b3) --- src/server/database/Database/DatabaseWorkerPool.cpp | 13 +++++++++++++ src/server/database/Database/DatabaseWorkerPool.h | 10 ++++++++++ 2 files changed, 23 insertions(+) (limited to 'src/server/database') 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 +#ifdef TRINITY_DEBUG +#include +#include +#endif #define MIN_MYSQL_SERVER_VERSION 50100u #define MIN_MYSQL_CLIENT_VERSION 50100u @@ -413,6 +417,15 @@ void DatabaseWorkerPool::Enqueue(SQLOperation* op) template T* DatabaseWorkerPool::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 _connectionInfo; std::vector _preparedStatementSize; uint8 _async_threads, _synch_threads; +#ifdef TRINITY_DEBUG + static inline thread_local bool _warnSyncQueries = false; +#endif }; #endif -- cgit v1.2.3