Re: DISKLESS TOO BAD PERFORMANCE
Hi,
The InnoDB engine executes all queries in a single thread,
this thread is the same thread that executes the query in
the MySQL Server. So single-threaded queries (like a single
insert) is not necessarily faster in NDB.
However by running insert queries with many inserts per query
gives NDB the chance to parallelise the query since NDB can
execute queries also in a parallel fashion. So that way NDB
can run faster than InnoDB at times.
NDB's distributed architecture gives it the capability to run
queries at very high rates, but individual single queries are
not necessarily faster although a higher throughput can be
achieved.
However I wonder how this 3M record update can happen in
1ms or 6ms. Neither NDB nor InnoDB are able to perform
a 3M row transaction within such a short time.
Rgrds Mikael Ronström
Yury Tsaregorodtsev Wrote:
-------------------------------------------------------
> Hi Gurus,
> have anyone idea why InnoDB perform much faster
> then NDB within single server (single node) ?
> simple table, for 3000000 rows (ID, COL1, COL2)
> when I do: UPDATE TEST SET COL1=1;
> its took 6ms on NDB vs 1ms on InnoDB.
> DataMemory & IndexMemory huge enough,
> MaxNoOfExecutionThreads=9
> RealtimeScheduler=1
> MaxNoOfConcurrentOperations=3100000
> accordingly to this config NDB should fly!
> What I miss ?
>
>
> How to reproduce:
> 1. Create table:
> CREATE TABLE `TEST` (
> `ID` int(11) NOT NULL AUTO_INCREMENT,
> `TIME` timestamp NULL DEFAULT
> CURRENT_TIMESTAMP,
> `COL1` varchar(45) DEFAULT NULL,
> `COL2` varchar(45) DEFAULT NULL,
> `COL3` varchar(45) DEFAULT NULL,
> `COL4` varchar(255) DEFAULT NULL,
> PRIMARY KEY (`ID`),
> UNIQUE KEY `ID_UNIQUE` (`ID`),
> KEY `TIME` (`TIME`)
> ) ENGINE=ndbcluster AUTO_INCREMENT=1 DEFAULT
> CHARSET=utf8;
>
> 2. Fill table:
> INSERT INTO TEST(COL1,COL2,COL3,COL4) VALUES
> (1,2,3,4);
>
> 3. Insert 3000000 rows:
> DELIMITER $$
> CREATE PROCEDURE insert_test_data()
> BEGIN
> DECLARE i INT DEFAULT 1;
>
> WHILE i < 3000000 DO
> INSERT INTO `TEST` (`COL1`, `COL2`, `COL3`,
> `COL4`)
> SELECT `COL1`, `COL2`, `COL3`, `COL4`
> FROM `TEST`
> WHERE id = 1;
> SET i = i + 1;
> END WHILE;
> END$$
> DELIMITER ;
>
> 4. Fill tables with rows:
> CALL insert_test_data();
>
> 5. Perform UPDATE:
> UPDATE TEST SET COL1=2;