Added count of my_sync calls (to SHOW STATUS)

tmp_table_size can now be set to 0 (to disable in memory internal temp tables)
Improved speed for internal Maria temp tables:
- Don't use packed keys, except with long text fields.
- Don't copy key all accessed pages during key search.
Some new benchmark tests to sql-bench (for group by)

BUILD/compile-pentium64-gcov:
  Update script to use same pentium_config flags as other tests
BUILD/compile-pentium64-gprof:
  Update script to use same pentium_config flags as other tests
include/my_sys.h:
  Added count of my_sync calls
mysql-test/r/variables.result:
  tmp_table_size can now be set to 0
sql-bench/test-select.sh:
  Added some new test for GROUP BY on a not key field and group by with different order by
sql/mysqld.cc:
  Added count of my_sync calls
  tmp_table_size can now be set to 0 (to disable in memory internal temp tables)
sql/sql_select.cc:
  If tmp_table_size is 0, don't use in memory temp tables (good for benchmarking MyISAM/Maria temp tables)
  Don't pack keys for Maria tables;  The 8K page size makes packed keys too slow for temp tables.
storage/maria/ma_key_recover.h:
  Moved definition to maria_def.h
storage/maria/ma_page.c:
  Moved code used to simplify comparing of identical Maria tables to own function (page_cleanup())
  Fixed that one can read a page with a read lock.
storage/maria/ma_rkey.c:
  For not exact key reads, cache the page where we found key (to speed up future read-next/read-prev calls)
storage/maria/ma_search.c:
  Moved code to cache last key page to separate function.
  Instead of copying pages, only get a link to the page. This notable speeds up key searches on bigger tables.
storage/maria/ma_write.c:
  Added comment
storage/maria/maria_def.h:
  Moved page_cleanup() to separate function.
This commit is contained in:
Michael Widenius
2010-03-09 21:22:24 +02:00
parent 700e2155f2
commit 292f6568fa
14 changed files with 138 additions and 57 deletions

View File

@ -68,7 +68,8 @@ do_many($dbh,$server->create("bench1",
["region char(1) NOT NULL",
"idn integer(6) NOT NULL",
"rev_idn integer(6) NOT NULL",
"grp integer(6) NOT NULL"],
"grp integer(6) NOT NULL",
"grp_no_key integer(6) NOT NULL"],
["primary key (region,idn)",
"unique (region,rev_idn)",
"unique (region,grp,idn)"]));
@ -105,10 +106,10 @@ for ($id=0,$rev_id=$opt_loop_count-1 ; $id < $opt_loop_count ; $id++,$rev_id--)
{
$grp=$id*3 % $opt_groups;
$region=chr(65+$id%$opt_regions);
do_query($dbh,"$query'$region',$id,$rev_id,$grp)");
do_query($dbh,"$query'$region',$id,$rev_id,$grp,$grp)");
if ($id == $half_done)
{ # Test with different insert
$query="insert into bench1 (region,idn,rev_idn,grp) values (";
$query="insert into bench1 (region,idn,rev_idn,grp,grp_no_key) values (";
}
}
@ -323,6 +324,26 @@ if ($limits->{'group_functions'})
$end_time=new Benchmark;
print "Time for count_group_on_key_parts ($i:$rows): " .
timestr(timediff($end_time, $loop_time),"all") . "\n";
$loop_time=new Benchmark;
$rows=0;
for ($i=0 ; $i < $opt_medium_loop_count ; $i++)
{
$rows+=fetch_all_rows($dbh,"select grp_no_key,count(*) from bench1 group by grp_no_key");
}
$end_time=new Benchmark;
print "Time for count_group ($i:$rows): " .
timestr(timediff($end_time, $loop_time),"all") . "\n";
$loop_time=new Benchmark;
$rows=0;
for ($i=0 ; $i < $opt_medium_loop_count ; $i++)
{
$rows+=fetch_all_rows($dbh,"select grp_no_key,count(*) as cnt from bench1 group by grp_no_key order by cnt");
}
$end_time=new Benchmark;
print "Time for count_group_with_order ($i:$rows): " .
timestr(timediff($end_time, $loop_time),"all") . "\n";
}
if ($limits->{'group_distinct_functions'})