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

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 alter table
  20. #
  21. ##################### Standard benchmark inits ##############################
  22. use Cwd;
  23. use DBI;
  24. use Benchmark;
  25. $opt_start_field_count=8; # start with this many fields
  26. $opt_loop_count=100; # How many tests to do
  27. $opt_row_count=1000;  # Rows in the table
  28. $opt_field_count=1000; # Add until this many fields.
  29. $opt_time_limit=10*60; # Don't wait more than 10 min for some tests
  30. $pwd = cwd(); $pwd = "." if ($pwd eq '');
  31. require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!n";
  32. $opt_field_count=min($opt_field_count,$limits->{'max_columns'},
  33.      ($limits->{'query_size'}-30)/14);
  34. $opt_start_field_count=min($opt_start_field_count,$limits->{'max_index'});
  35. if ($opt_small_test)
  36. {
  37.   $opt_row_count/=10;
  38.   $opt_field_count/=10;
  39. }
  40. if (!$limits->{'alter_table'})
  41. {
  42.   print("Some of the servers given with --cmp or --server doesn't support ALTER TABLEnTest abortednn");
  43.   $start_time=new Benchmark;
  44.   end_benchmark($start_time);
  45.   exit 0;
  46. }
  47. print "Testing of ALTER TABLEn";
  48. print "Testing with $opt_field_count columns and $opt_row_count rows in $opt_loop_count stepsn";
  49. ####
  50. #### Create a table and fill it with data
  51. ####
  52. $dbh = $server->connect();
  53. @fields=();
  54. @index=();
  55. push(@fields,"i1 int not null");
  56. for ($i=2 ; $i <= $opt_start_field_count ; $i++)
  57. {
  58.   push(@fields,"i${i} int not null");
  59. }
  60. $field_count= $opt_start_field_count;
  61. $start_time=new Benchmark;
  62. $dbh->do("drop table bench" . $server->{'drop_attr'});
  63. do_many($dbh,$server->create("bench",@fields,@index));
  64. print "Insert data into the tablen";
  65. $loop_time=new Benchmark;
  66. if ($opt_fast && $server->{transactions})
  67. {
  68.   $dbh->{AutoCommit} = 0;
  69.   print "Transactions enabledn" if ($opt_debug);
  70. }
  71. for ($i=0 ; $i < $opt_row_count ; $i++)
  72. {
  73.   $query="insert into bench values ( " . ("$i," x ($opt_start_field_count-1)) . "$i)";
  74.   $dbh->do($query) or die $DBI::errstr;
  75. }
  76. if ($opt_fast && $server->{transactions})
  77. {
  78.   $dbh->commit;
  79.   $dbh->{AutoCommit} = 1;
  80. }
  81. $end_time=new Benchmark;
  82. print "Time for insert ($opt_row_count)",
  83.   timestr(timediff($end_time, $loop_time),"all") . "nn";
  84. ####
  85. #### Add fields to the table.
  86. ####
  87. $loop_time=new Benchmark;
  88. $add= int(($opt_field_count-$opt_start_field_count)/$opt_loop_count)+1;
  89. $multi_add=$server->{'limits'}->{'alter_add_multi_col'} == 1;
  90. if ($opt_fast)
  91. {
  92.   $add=1 if (!$server->{'limits'}->{'alter_add_multi_col'});
  93. }
  94. else
  95. {
  96.   $add=1 if (!$limits->{'alter_add_multi_col'});
  97. }
  98. $count=0;
  99. while ($field_count < $opt_field_count)
  100. {
  101.   $count++;
  102.   $end=min($field_count+$add,$opt_field_count);
  103.   $fields="";
  104.   $tmp="ADD ";
  105.   while ($field_count < $end)
  106.   {
  107.     $field_count++;
  108.     $fields.=",$tmp i${field_count} integer";
  109.     $tmp="" if (!$multi_add); # Adabas
  110.   }
  111.   do_query($dbh,"ALTER TABLE bench " . substr($fields,1));
  112.   $end_time=new Benchmark;
  113.   last if ($estimated=predict_query_time($loop_time,$end_time,$count,$count,
  114.  $opt_field_count/$add+1));
  115. }
  116. $end_time=new Benchmark;
  117. if ($estimated)
  118. { print "Estimated time"; }
  119. else
  120. { print "Time"; }
  121. print " for alter_table_add ($count): " .
  122.   timestr(timediff($end_time, $loop_time),"all") . "nn";
  123. #
  124. # If estimated, fix table to have known number of fields
  125. #
  126. if ($estimated && $field_count < $opt_field_count)
  127. {
  128.   $fields="";
  129.   $tmp="ADD ";
  130.   while ($field_count < $opt_field_count)
  131.   {
  132.     $field_count++;
  133.     $fields.=",$tmp i${field_count} integer";
  134.     $tmp="" if (!$multi_add); # Adabas
  135.   }
  136.   do_query($dbh,"ALTER TABLE bench " . substr($fields,1));
  137. }
  138. ####
  139. #### Test adding and deleting index on the first $opt_start_fields
  140. ####
  141. $loop_time=new Benchmark;
  142. $count= 0;
  143. for ($i=1; $i <= $opt_start_field_count ; $i++)
  144. {
  145.   $dbh->do("CREATE INDEX bench_ind$i ON bench (i${i})") || die $DBI::errstr;
  146. }
  147. $end_time=new Benchmark;
  148. print "Time for create_index ($opt_start_field_count): " .
  149.   timestr(timediff($end_time, $loop_time),"all") . "nn";
  150. $loop_time=new Benchmark;
  151. for ($i=1; $i <= $opt_start_field_count ; $i++)
  152. {
  153.   $dbh->do($server->drop_index("bench","bench_ind$i")) || die $DBI::errstr;
  154. }
  155. $end_time=new Benchmark;
  156. print "Time for drop_index ($opt_start_field_count): " .
  157.   timestr(timediff($end_time, $loop_time),"all") . "nn";
  158. ####
  159. #### Delete fields from the table
  160. ####
  161. goto skip_dropcol if (!$limits->{'alter_table_dropcol'});
  162. $loop_time=new Benchmark;
  163. $count=0;
  164. while ($field_count > $opt_start_field_count)
  165. {
  166.   $count++;
  167.   $end=max($field_count-$add,$opt_start_field_count);
  168.   $fields="";
  169.   while(--$field_count >= $end)
  170.   {
  171.     $fields.=",DROP i${field_count}";
  172.   }
  173.   $dbh->do("ALTER TABLE bench " . substr($fields,1) . $server->{'drop_attr'})
  174.   || die $DBI::errstr;
  175.   $end_time=new Benchmark;
  176.   last if ($estimated=predict_query_time($loop_time,$end_time,$count,$count,
  177.  $opt_field_count/$add+1));
  178. }
  179. $end_time=new Benchmark;
  180. if ($estimated)
  181. { print "Estimated time"; }
  182. else
  183. { print "Time"; }
  184. print " for alter_table_drop ($count): " .
  185.   timestr(timediff($end_time, $loop_time),"all") . "nn";
  186. skip_dropcol:
  187. ################################ END ###################################
  188. ####
  189. #### End of the test...Finally print time used to execute the
  190. #### whole test.
  191. $dbh->do("drop table bench" . $server->{'drop_attr'});
  192. $dbh->disconnect;
  193. end_benchmark($start_time);