You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-07-29 08:21:15 +03:00
MCOL4841 dev port run large join without OOM
This commit is contained in:
@ -34,8 +34,10 @@
|
||||
#include <boost/thread/condition.hpp>
|
||||
#include <boost/shared_ptr.hpp>
|
||||
#include <boost/function.hpp>
|
||||
#include <atomic>
|
||||
#include "../winport/winport.h"
|
||||
#include "primitives/primproc/umsocketselector.h"
|
||||
#include "atomicops.h"
|
||||
|
||||
namespace threadpool
|
||||
{
|
||||
@ -72,7 +74,9 @@ class PriorityThreadPool
|
||||
LOW,
|
||||
MEDIUM,
|
||||
HIGH,
|
||||
_COUNT
|
||||
_COUNT,
|
||||
EXTRA // After _COUNT because _COUNT is for jobQueue size and EXTRA isn't a jobQueue. But we need EXTRA
|
||||
// in places where Priority is used.
|
||||
};
|
||||
|
||||
/*********************************************
|
||||
@ -95,6 +99,20 @@ class PriorityThreadPool
|
||||
*/
|
||||
void dump();
|
||||
|
||||
// If a job is blocked, we want to temporarily increase the number of threads managed by the pool
|
||||
// A problem can occur if all threads are running long or blocked for a single query. Other
|
||||
// queries won't get serviced, even though there are cpu cycles available.
|
||||
// These calls are currently protected by respondLock in sendThread(). If you call from other
|
||||
// places, you need to consider atomicity.
|
||||
void incBlockedThreads()
|
||||
{
|
||||
blockedThreads++;
|
||||
}
|
||||
void decBlockedThreads()
|
||||
{
|
||||
blockedThreads--;
|
||||
}
|
||||
|
||||
protected:
|
||||
private:
|
||||
struct ThreadHelper
|
||||
@ -127,6 +145,10 @@ class PriorityThreadPool
|
||||
bool _stop;
|
||||
uint32_t weightPerRun;
|
||||
volatile uint id; // prevent it from being optimized out
|
||||
|
||||
std::atomic<uint32_t> blockedThreads;
|
||||
std::atomic<uint32_t> extraThreads;
|
||||
bool stopExtra;
|
||||
};
|
||||
|
||||
} // namespace threadpool
|
||||
|
Reference in New Issue
Block a user