Skip to content

Instantly share code, notes, and snippets.

Insert benchmark with 2b rows, 16 tables, 16 clients
* server changed to have ~56gb of RAM, 56 cores with HT enabled, fast SSD
* InnoDB has 35gb buffer pool, MyRocks has 30gb block cache
Insert benchmark has 4 steps - see http://smalldatum.blogspot.com/2017/06/the-insert-benchmark.html
1) concurrently load 16 tables with 1 client/table
2) concurrently scan 16 tables with 1 client/table - scan is done for PK, then each secondary index, then PK index again
3) OLTP using 16 write clients and 16 read clients (1 read/write pair per table), each writer does 1000 inserts/second
3) OLTP using 16 write clients and 16 read clients (1 read/write pair per table), each writer does 100 inserts/second
=== modified file 'sql/sql_array.h'
--- sql/sql_array.h 2013-11-20 11:05:39 +0000
+++ sql/sql_array.h 2014-01-16 12:01:51 +0000
@@ -105,6 +105,21 @@ template <class Elem> class Dynamic_arra
init(prealloc, increment);
}
+ /*
+ Same as above, but make use of initial buffer provided by the caller. The
+ Dynamic_array will not try to free the initial buffer.
=== modified file 'sql/opt_subselect.cc'
--- sql/opt_subselect.cc 2013-01-07 19:21:05 +0000
+++ sql/opt_subselect.cc 2013-01-28 07:38:00 +0000
@@ -2542,6 +2542,12 @@ void advance_sj_state(JOIN *join, table_
/* Mark strategy as used */
(*strategy)->mark_used();
pos->sj_strategy= sj_strategy;
+
+ if (sj_strategy == SJ_OPT_MATERIALIZE)
+ join->sj_materialized_lookup_tables |= handled_fanout;