test-big-tables
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

  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. ##################### Standard benchmark inits ##############################
  22. use Cwd;
  23. use DBI;
  24. use Benchmark;
  25. $opt_loop_count=1000; # Change this to make test harder/easier
  26. $opt_field_count=1000;
  27. $pwd = cwd(); $pwd = "." if ($pwd eq '');
  28. require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!n";
  29. $opt_field_count=min($opt_field_count,$limits->{'max_columns'},
  30.      ($limits->{'query_size'}-30)/14);
  31. $opt_loop_count*=10 if ($opt_field_count<100); # mSQL has so few fields...
  32. if ($opt_small_test)
  33. {
  34.   $opt_loop_count/=10;
  35.   $opt_field_count/=10;
  36. }
  37. print "Testing of some unusual tablesn";
  38. print "All tests are done $opt_loop_count times with $opt_field_count fieldsnn";
  39. ####
  40. ####  Testing many fields
  41. ####
  42. $dbh = $server->connect();
  43. print "Testing table with $opt_field_count fieldsn";
  44. $sth = $dbh->do("drop table bench1" . $server->{'drop_attr'});
  45. my @fields=();
  46. my @index=();
  47. my $fields="i1";
  48. push(@fields,"$fields int");
  49. $values= "1," x ($opt_field_count-1) . "1";
  50. for ($i=2 ; $i <= $opt_field_count ; $i++)
  51. {
  52.   push(@fields,"i${i} int");
  53.   $fields.=",i${i}";
  54. }
  55. $start_time=new Benchmark;
  56. do_many($dbh,$server->create("bench1",@fields,@index));
  57. $sth = $dbh->do("insert into bench1 values ($values)") or die $DBI::errstr;
  58. if ($opt_fast && defined($server->{vacuum}))
  59. {
  60.   $server->vacuum(0,$dbh);
  61. }
  62. test_query("Testing select * from table with 1 record",
  63.    "Time to select_many_fields",
  64.    "select * from bench1",
  65.    $dbh,$opt_loop_count);
  66. if ($limits->{'working_all_fields'})
  67. {
  68.   test_query("Testing select all_fields from table with 1 record",
  69.      "Time to select_many_fields",
  70.      "select $fields from bench1",
  71.      $dbh,$opt_loop_count);
  72. }
  73. test_query("Testing insert VALUES()",
  74.    "Time to insert_many_fields",
  75.    "insert into bench1 values($values)",
  76.    $dbh,$opt_loop_count);
  77. if ($opt_fast && defined($server->{vacuum}))
  78. {
  79.   $server->vacuum(0,$dbh);
  80. }
  81. test_command("Testing insert (all_fields) VALUES()",
  82.      "Time to insert_many_fields",
  83.      "insert into bench1 ($fields) values($values)",
  84.      $dbh,$opt_loop_count);
  85. $sth = $dbh->do("drop table bench1" . $server->{'drop_attr'}) or die $DBI::errstr;
  86. if ($opt_fast && defined($server->{vacuum}))
  87. {
  88.   $server->vacuum(0,$dbh);
  89. }
  90. ################################ END ###################################
  91. ####
  92. #### End of the test...Finally print time used to execute the
  93. #### whole test.
  94. $dbh->disconnect;
  95. end_benchmark($start_time);
  96. ############################ HELP FUNCTIONS ##############################
  97. sub test_query
  98. {
  99.   my($test_text,$result_text,$query,$dbh,$count)=@_;
  100.   my($i,$loop_time,$end_time, $using_transactions);
  101.   print $test_text . "n";
  102.   $loop_time=new Benchmark;
  103.   $using_transactions=0;
  104.   if ($opt_fast && server->{transactions} && $query=~ /^insert /i)
  105.   {
  106.     $using_transactions=1;
  107.     $dbh->{AutoCommit} = 0;
  108.     print "Transactions enabledn" if ($opt_debug);
  109.   }
  110.   for ($i=0 ; $i < $count ; $i++)
  111.   {
  112.     defined(fetch_all_rows($dbh,$query)) or die $DBI::errstr;
  113.   }
  114.   if ($using_transactions)
  115.   {
  116.     $dbh->commit;
  117.     $dbh->{AutoCommit} = 1;
  118.   }
  119.   $end_time=new Benchmark;
  120.   print $result_text . "($count): " .
  121.   timestr(timediff($end_time, $loop_time),"all") . "nn";
  122. }
  123. sub test_command
  124. {
  125.   my($test_text,$result_text,$query,$dbh,$count)=@_;
  126.   my($i,$loop_time,$end_time);
  127.   print $test_text . "n";
  128.   $loop_time=new Benchmark;
  129.   for ($i=0 ; $i < $count ; $i++)
  130.   {
  131.     $dbh->do($query) or die $DBI::errstr;
  132.   }
  133.   $end_time=new Benchmark;
  134.   print $result_text . "($count): " .
  135.   timestr(timediff($end_time, $loop_time),"all") . "nn";
  136. }