Commit 018cac95 authored by unknown's avatar unknown
Browse files

wl2077 - scan optimizations

(recommit in clean clone)


ndb/src/kernel/blocks/dbdih/Dbdih.hpp:
  removed unused variable
ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
  Always give all nodes in DIGETPRIMREQ
ndb/src/kernel/blocks/dbtc/DbtcMain.cpp:
  Allow readcommited-scans to scan backup fragments
ndb/test/ndbapi/testReadPerf.cpp:
  better printous
parent f080e78f
Loading
Loading
Loading
Loading

ndb/docs/wl2077.txt

0 → 100644
+35 −0
Original line number Diff line number Diff line

100' * (select 1 from T1 (1M rows) where key = rand());
1 host, 1 ndbd, api co-hosted
results in 1000 rows / sec

		       wo/reset bounds  w/ rb
4.1-read committed     a) 4.9		b) 7.4
4.1-read hold lock     c) 4.7		d) 6.7

wl2077-read committed  6.4 (+30%)	10.8 (+45%)
wl2077-read hold lock  4.6 (-1%)	6.7 (+ 0%)

-- Comparision e)
serial pk:	       10.9'
batched (1000):	       59'
serial uniq index:     8.4'
batched (1000):	       33'
index range (1000):    186'

----

load) testScanPerf -c 1 -d 1 T1
a) testScanPerf -s 100000 -c 0 -d 0 -a 1 -l 0 -r 2 -q 0 T1
b) testScanPerf -s 100000 -c 0 -d 0 -a 1 -l 0 -r 2 -q 1 T1
c) testScanPerf -s 100000 -c 0 -d 0 -a 1 -l 1 -r 2 -q 0 T1
d) testScanPerf -s 100000 -c 0 -d 0 -a 1 -l 1 -r 2 -q 1 T1
e) testReadPerf -i 25 -c 0 -d 0 T1

--- music join		1db-co		2db-co
			
4.1			13s		14s
4.1 wo/ blobs		1.7s		3.2s

wl2077			12s		14s
wl2077 wo/ blobs	1.2s (-30%)	2.5s (-22%)
+0 −1
Original line number Diff line number Diff line
@@ -147,7 +147,6 @@ public:
    Uint32 nfConnect;
    Uint32 table;
    Uint32 userpointer;
    Uint32 nodeCount;
    BlockReference userblockref;
  };
  typedef Ptr<ConnectRecord> ConnectRecordPtr;
+9 −11
Original line number Diff line number Diff line
@@ -7080,24 +7080,22 @@ void Dbdih::execDIGETPRIMREQ(Signal* signal)
  
  ndbrequire(tabPtr.p->tabStatus == TabRecord::TS_ACTIVE);
  connectPtr.i = signal->theData[0];
  if(connectPtr.i != RNIL){
  if(connectPtr.i != RNIL)
  {
    jam();
    ptrCheckGuard(connectPtr, cconnectFileSize, connectRecord);
    ndbrequire(connectPtr.p->connectState == ConnectRecord::INUSE);
    getFragstore(tabPtr.p, fragId, fragPtr);
    connectPtr.p->nodeCount = extractNodeInfo(fragPtr.p, connectPtr.p->nodes);
    signal->theData[0] = connectPtr.p->userpointer;
    signal->theData[1] = passThrough;
    signal->theData[2] = connectPtr.p->nodes[0];
    sendSignal(connectPtr.p->userblockref, GSN_DIGETPRIMCONF, signal, 3, JBB);
    return;
  }//if
  //connectPtr.i == RNIL -> question without connect record
  }
  else
  {
    jam();
    signal->theData[0] = RNIL;
  }
  
  Uint32 nodes[MAX_REPLICAS];
  getFragstore(tabPtr.p, fragId, fragPtr);
  Uint32 count = extractNodeInfo(fragPtr.p, nodes);
  
  signal->theData[0] = RNIL;
  signal->theData[1] = passThrough;
  signal->theData[2] = nodes[0];
  signal->theData[3] = nodes[1];
+14 −0
Original line number Diff line number Diff line
@@ -8944,6 +8944,20 @@ void Dbtc::execDIGETPRIMCONF(Signal* signal)
  scanptr.i = scanFragptr.p->scanRec;
  ptrCheckGuard(scanptr, cscanrecFileSize, scanRecord);

  if(ScanFragReq::getReadCommittedFlag(scanptr.p->scanRequestInfo))
  {
    jam();
    Uint32 max = 3+signal->theData[6];
    Uint32 nodeid = getOwnNodeId();
    for(Uint32 i = 3; i<max; i++)
      if(signal->theData[i] ==  nodeid)
      {
	jam();
	tnodeid = nodeid;
	break;
      }
  }
  
  {
    /**
     * Check table
+9 −2
Original line number Diff line number Diff line
@@ -390,8 +390,15 @@ run_read(){

void
print_result(){
  int tmp = 1;
  tmp *= g_paramters[P_RANGE].value;
  tmp *= g_paramters[P_LOOPS].value;

  int t, t2;
  for(int i = 0; i<P_OP_TYPES; i++){
    g_err.println("%s avg: %u us/row", g_ops[i],
		  (1000*g_times[i])/(g_paramters[P_RANGE].value*g_paramters[P_LOOPS].value));
    g_err << g_ops[i] << " avg: "
	  << (int)((1000*g_times[i])/tmp)
	  << " us/row (" 
	  << (1000 * tmp)/g_times[i] << " rows / sec)" << endl;
  }
}