home *** CD-ROM | disk | FTP | other *** search
/ PC World 2002 July & August / PCWorld_2002-07-08_cd.bin / Komunik / MySQL / mysql / data1.cab / Development / bench / test-big-tables < prev    next >
Text File  |  2002-02-21  |  4KB  |  159 lines

  1. #!/usr/bin/perl
  2. # Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
  3. #
  4. # This library is free software; you can redistribute it and/or
  5. # modify it under the terms of the GNU Library General Public
  6. # License as published by the Free Software Foundation; either
  7. # version 2 of the License, or (at your option) any later version.
  8. #
  9. # This library is distributed in the hope that it will be useful,
  10. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  12. # Library General Public License for more details.
  13. #
  14. # You should have received a copy of the GNU Library General Public
  15. # License along with this library; if not, write to the Free
  16. # Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
  17. # MA 02111-1307, USA
  18. #
  19. # Test of extreme tables.
  20. #
  21.  
  22. ##################### Standard benchmark inits ##############################
  23.  
  24. use DBI;
  25. use Benchmark;
  26.  
  27. $opt_loop_count=1000; # Change this to make test harder/easier
  28. $opt_field_count=1000;
  29.  
  30. chomp($pwd = `pwd`); $pwd = "." if ($pwd eq '');
  31. require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n";
  32.  
  33. $opt_field_count=min($opt_field_count,$limits->{'max_columns'},
  34.              ($limits->{'query_size'}-30)/14);
  35.  
  36. $opt_loop_count*=10 if ($opt_field_count<100);    # mSQL has so few fields...
  37.  
  38. if ($opt_small_test)
  39. {
  40.   $opt_loop_count/=10;
  41.   $opt_field_count/=10;
  42. }
  43.  
  44.  
  45. print "Testing of some unusual tables\n";
  46. print "All tests are done $opt_loop_count times with $opt_field_count fields\n\n";
  47.  
  48.  
  49. ####
  50. ####  Testing many fields
  51. ####
  52.  
  53. $dbh = $server->connect();
  54. print "Testing table with $opt_field_count fields\n";
  55.  
  56. $sth = $dbh->do("drop table bench1" . $server->{'drop_attr'});
  57.  
  58. my @fields=();
  59. my @index=();
  60. my $fields="i1";
  61. push(@fields,"$fields int");
  62. $values= "1," x ($opt_field_count-1) . "1";
  63. for ($i=2 ; $i <= $opt_field_count ; $i++)
  64. {
  65.   push(@fields,"i${i} int");
  66.   $fields.=",i${i}";
  67. }
  68.  
  69. $start_time=new Benchmark;
  70.  
  71. do_many($dbh,$server->create("bench1",\@fields,\@index));
  72. $sth = $dbh->do("insert into bench1 values ($values)") or die $DBI::errstr;
  73.  
  74. if ($opt_fast && defined($server->{vacuum}))
  75. {
  76.   $server->vacuum(0,\$dbh);
  77. }
  78.  
  79. test_query("Testing select * from table with 1 record",
  80.        "Time to select_many_fields",
  81.        "select * from bench1",
  82.        $dbh,$opt_loop_count);
  83.  
  84.  
  85. if ($limits->{'working_all_fields'})
  86. {
  87.   test_query("Testing select all_fields from table with 1 record",
  88.          "Time to select_many_fields",
  89.          "select $fields from bench1",
  90.          $dbh,$opt_loop_count);
  91. }
  92.  
  93. test_query("Testing insert VALUES()",
  94.        "Time to insert_many_fields",
  95.        "insert into bench1 values($values)",
  96.        $dbh,$opt_loop_count);
  97.  
  98. if ($opt_fast && defined($server->{vacuum}))
  99. {
  100.   $server->vacuum(0,\$dbh);
  101. }
  102.  
  103. test_command("Testing insert (all_fields) VALUES()",
  104.          "Time to insert_many_fields",
  105.          "insert into bench1 ($fields) values($values)",
  106.          $dbh,$opt_loop_count);
  107.  
  108. $sth = $dbh->do("drop table bench1" . $server->{'drop_attr'}) or die $DBI::errstr;
  109.  
  110. if ($opt_fast && defined($server->{vacuum}))
  111. {
  112.   $server->vacuum(0,\$dbh);
  113. }
  114.  
  115. ################################ END ###################################
  116. ####
  117. #### End of the test...Finally print time used to execute the
  118. #### whole test.
  119.  
  120. $dbh->disconnect;
  121.  
  122. end_benchmark($start_time);
  123.  
  124.  
  125. ############################ HELP FUNCTIONS ##############################
  126.  
  127. sub test_query
  128. {
  129.   my($test_text,$result_text,$query,$dbh,$count)=@_;
  130.   my($i,$loop_time,$end_time);
  131.  
  132.   print $test_text . "\n";
  133.   $loop_time=new Benchmark;
  134.   for ($i=0 ; $i < $count ; $i++)
  135.   {
  136.     defined(fetch_all_rows($dbh,$query)) or die $DBI::errstr;
  137.   }
  138.   $end_time=new Benchmark;
  139.   print $result_text . "($count): " .
  140.   timestr(timediff($end_time, $loop_time),"all") . "\n\n";
  141. }
  142.  
  143.  
  144. sub test_command
  145. {
  146.   my($test_text,$result_text,$query,$dbh,$count)=@_;
  147.   my($i,$loop_time,$end_time);
  148.  
  149.   print $test_text . "\n";
  150.   $loop_time=new Benchmark;
  151.   for ($i=0 ; $i < $count ; $i++)
  152.   {
  153.     $dbh->do($query) or die $DBI::errstr;
  154.   }
  155.   $end_time=new Benchmark;
  156.   print $result_text . "($count): " .
  157.   timestr(timediff($end_time, $loop_time),"all") . "\n\n";
  158. }
  159.