You've already forked mariadb-columnstore-engine
							
							
				mirror of
				https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
				synced 2025-11-03 17:13:17 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			141 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/* Copyright (C) 2014 InfiniDB, Inc.
 | 
						|
 | 
						|
   This program is free software; you can redistribute it and/or
 | 
						|
   modify it under the terms of the GNU General Public License
 | 
						|
   as published by the Free Software Foundation; version 2 of
 | 
						|
   the License.
 | 
						|
 | 
						|
   This program is distributed in the hope that it will be useful,
 | 
						|
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
						|
   GNU General Public License for more details.
 | 
						|
 | 
						|
   You should have received a copy of the GNU General Public License
 | 
						|
   along with this program; if not, write to the Free Software
 | 
						|
   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 | 
						|
   MA 02110-1301, USA. */
 | 
						|
 | 
						|
/***********************************************************************
 | 
						|
 *   $Id: querystats.h 4028 2013-08-02 18:49:00Z zzhu $
 | 
						|
 *
 | 
						|
 *
 | 
						|
 ***********************************************************************/
 | 
						|
 | 
						|
#pragma once
 | 
						|
 | 
						|
#include <ctime>
 | 
						|
#include <string>
 | 
						|
#include <vector>
 | 
						|
#include <map>
 | 
						|
#include <boost/shared_ptr.hpp>
 | 
						|
 | 
						|
#include "bytestream.h"
 | 
						|
#include "resourcemanager.h"
 | 
						|
 | 
						|
namespace querystats
 | 
						|
{
 | 
						|
const uint32_t DEFAULT_USER_PRIORITY_LEVEL = 33;  // Low
 | 
						|
const std::string DEFAULT_USER_PRIORITY = "LOW";
 | 
						|
 | 
						|
struct QueryStats
 | 
						|
{
 | 
						|
  uint64_t fMaxMemPct;        // peak memory percentage used during a query
 | 
						|
  uint64_t fNumFiles;         // number of temp files used for a query
 | 
						|
  uint64_t fFileBytes;        // number of bytes in temp files
 | 
						|
  uint64_t fPhyIO;            // physical block count for a query
 | 
						|
  uint64_t fCacheIO;          // cache block count for a query
 | 
						|
  uint64_t fMsgRcvCnt;        // msg (block) receive count for a query
 | 
						|
  uint64_t fCPBlocksSkipped;  // Casual Partition blks skipped for a query
 | 
						|
  uint64_t fMsgBytesIn;       // number of input msg bytes for a query
 | 
						|
  uint64_t fMsgBytesOut;      // number of output msg bytes for a query
 | 
						|
  uint64_t fRows;             // number of rows return/affected
 | 
						|
  time_t fStartTime;          // query start time
 | 
						|
  time_t fEndTime;            // query end time
 | 
						|
  std::string fStartTimeStr;  // query start time in YYYY-MM-DD HH:MM:SS format
 | 
						|
  std::string fEndTimeStr;    // query end time in YYYY-MM-DD HH:MM:SS format
 | 
						|
  uint64_t fErrorNo;          // query error number. 0 if succeed
 | 
						|
  uint64_t fBlocksChanged;    // blocks changed for DML queries
 | 
						|
  uint64_t fSessionID;        // session id of this query
 | 
						|
  std::string fQueryType;     // query type as "select", "update", "delete" ...
 | 
						|
  std::string fQuery;         // query text
 | 
						|
  std::string fUser;          // user
 | 
						|
  std::string fHost;          // host
 | 
						|
  std::string fPriority;      // priority
 | 
						|
  uint32_t fPriorityLevel;    // priority level
 | 
						|
 | 
						|
  QueryStats();
 | 
						|
  ~QueryStats()
 | 
						|
  {
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
    reset the stats fields.
 | 
						|
  */
 | 
						|
  void reset();
 | 
						|
 | 
						|
  // only += for fields that make sense for subquery
 | 
						|
  QueryStats operator+=(const QueryStats& rhs)
 | 
						|
  {
 | 
						|
    fNumFiles += rhs.fNumFiles;
 | 
						|
    fFileBytes += rhs.fFileBytes;
 | 
						|
    fPhyIO += rhs.fPhyIO;
 | 
						|
    fCacheIO += rhs.fCacheIO;
 | 
						|
    fMsgRcvCnt += rhs.fMsgRcvCnt;
 | 
						|
    fCPBlocksSkipped += rhs.fCPBlocksSkipped;
 | 
						|
    fMsgBytesIn += rhs.fMsgBytesIn;
 | 
						|
    fMsgBytesOut += rhs.fMsgBytesOut;
 | 
						|
    fBlocksChanged += rhs.fBlocksChanged;
 | 
						|
 | 
						|
    return *this;
 | 
						|
  }
 | 
						|
 | 
						|
  void setStartTime()
 | 
						|
  {
 | 
						|
    time(&fStartTime);
 | 
						|
    char buffer[80];
 | 
						|
    struct tm timeinfo;
 | 
						|
    localtime_r(&fStartTime, &timeinfo);
 | 
						|
    strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", &timeinfo);
 | 
						|
    fStartTimeStr = buffer;
 | 
						|
  }
 | 
						|
 | 
						|
  void setEndTime()
 | 
						|
  {
 | 
						|
    time(&fEndTime);
 | 
						|
    char buffer[80];
 | 
						|
    struct tm timeinfo;
 | 
						|
    localtime_r(&fEndTime, &timeinfo);
 | 
						|
    strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", &timeinfo);
 | 
						|
    fEndTimeStr = buffer;
 | 
						|
  }
 | 
						|
 | 
						|
  // joblist::ResourceManager* rm() { return fRm; }
 | 
						|
  // void rm(joblist::ResourceManager* rm)
 | 
						|
  //{
 | 
						|
  //	delete fRm;
 | 
						|
  //	fRm = rm;
 | 
						|
  //	fIsOwnRm = false;
 | 
						|
  //}
 | 
						|
 | 
						|
  void serialize(messageqcpp::ByteStream& bs);
 | 
						|
  // unserialize, and merge new stats to this when handling stats comming from different processes.
 | 
						|
  void unserialize(messageqcpp::ByteStream& bs);
 | 
						|
 | 
						|
  /**
 | 
						|
   insert to query stats table. The table is pre-created and the number/type of
 | 
						|
   columns are fixed. If changing the table defintion, this function needs to be
 | 
						|
   modified accordingly.
 | 
						|
  */
 | 
						|
  void insert();
 | 
						|
 | 
						|
  /* User mysql API to query priority table and get this user's assigned priority */
 | 
						|
  uint32_t userPriority(std::string host, const std::string user);
 | 
						|
 | 
						|
 private:
 | 
						|
  //	default okay
 | 
						|
  //	QueryStats(const QueryStats& stats);
 | 
						|
  //	QueryStats& operator=(const QueryStats&);
 | 
						|
};
 | 
						|
 | 
						|
}  // namespace querystats
 |