test-alter-table
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:5k
源码类别:

模拟服务器

开发平台:

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