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