175 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			175 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 
								 | 
							
								#!/usr/bin/perl
							 | 
						||
| 
								 | 
							
								# Copyright (c) 2000, 2001, 2003, 2006 MySQL AB, 2009 Sun Microsystems, Inc.
							 | 
						||
| 
								 | 
							
								# Use is subject to license terms.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# This library is free software; you can redistribute it and/or
							 | 
						||
| 
								 | 
							
								# modify it under the terms of the GNU Library General Public
							 | 
						||
| 
								 | 
							
								# License as published by the Free Software Foundation; version 2
							 | 
						||
| 
								 | 
							
								# of the License.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# This library is distributed in the hope that it will be useful,
							 | 
						||
| 
								 | 
							
								# but WITHOUT ANY WARRANTY; without even the implied warranty of
							 | 
						||
| 
								 | 
							
								# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
							 | 
						||
| 
								 | 
							
								# Library General Public License for more details.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# You should have received a copy of the GNU Library General Public
							 | 
						||
| 
								 | 
							
								# License along with this library; if not, write to the Free
							 | 
						||
| 
								 | 
							
								# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
							 | 
						||
| 
								 | 
							
								# MA 02110-1301, USA
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Test of extreme tables.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								##################### Standard benchmark inits ##############################
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use Cwd;
							 | 
						||
| 
								 | 
							
								use DBI;
							 | 
						||
| 
								 | 
							
								use Benchmark;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								$opt_loop_count=1000; # Change this to make test harder/easier
							 | 
						||
| 
								 | 
							
								$opt_field_count=1000;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								$pwd = cwd(); $pwd = "." if ($pwd eq '');
							 | 
						||
| 
								 | 
							
								require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								$opt_field_count=min($opt_field_count,$limits->{'max_columns'},
							 | 
						||
| 
								 | 
							
										     ($limits->{'query_size'}-30)/14);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								$opt_loop_count*=10 if ($opt_field_count<100);	# mSQL has so few fields...
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if ($opt_small_test)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  $opt_loop_count/=10;
							 | 
						||
| 
								 | 
							
								  $opt_field_count/=10;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								print "Testing of some unusual tables\n";
							 | 
						||
| 
								 | 
							
								print "All tests are done $opt_loop_count times with $opt_field_count fields\n\n";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								####
							 | 
						||
| 
								 | 
							
								####  Testing many fields
							 | 
						||
| 
								 | 
							
								####
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								$dbh = $server->connect();
							 | 
						||
| 
								 | 
							
								print "Testing table with $opt_field_count fields\n";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								$sth = $dbh->do("drop table bench1" . $server->{'drop_attr'});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								my @fields=();
							 | 
						||
| 
								 | 
							
								my @index=();
							 | 
						||
| 
								 | 
							
								my $fields="i1";
							 | 
						||
| 
								 | 
							
								push(@fields,"$fields int");
							 | 
						||
| 
								 | 
							
								$values= "1," x ($opt_field_count-1) . "1";
							 | 
						||
| 
								 | 
							
								for ($i=2 ; $i <= $opt_field_count ; $i++)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  push(@fields,"i${i} int");
							 | 
						||
| 
								 | 
							
								  $fields.=",i${i}";
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								$start_time=new Benchmark;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								do_many($dbh,$server->create("bench1",\@fields,\@index));
							 | 
						||
| 
								 | 
							
								$sth = $dbh->do("insert into bench1 values ($values)") or die $DBI::errstr;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if ($opt_fast && defined($server->{vacuum}))
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  $server->vacuum(0,\$dbh);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test_query("Testing select * from table with 1 record",
							 | 
						||
| 
								 | 
							
									   "Time to select_many_fields",
							 | 
						||
| 
								 | 
							
									   "select * from bench1",
							 | 
						||
| 
								 | 
							
									   $dbh,$opt_loop_count);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if ($limits->{'working_all_fields'})
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  test_query("Testing select all_fields from table with 1 record",
							 | 
						||
| 
								 | 
							
									     "Time to select_many_fields",
							 | 
						||
| 
								 | 
							
									     "select $fields from bench1",
							 | 
						||
| 
								 | 
							
									     $dbh,$opt_loop_count);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test_query("Testing insert VALUES()",
							 | 
						||
| 
								 | 
							
									   "Time to insert_many_fields",
							 | 
						||
| 
								 | 
							
									   "insert into bench1 values($values)",
							 | 
						||
| 
								 | 
							
									   $dbh,$opt_loop_count);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if ($opt_fast && defined($server->{vacuum}))
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  $server->vacuum(0,\$dbh);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test_command("Testing insert (all_fields) VALUES()",
							 | 
						||
| 
								 | 
							
									     "Time to insert_many_fields",
							 | 
						||
| 
								 | 
							
									     "insert into bench1 ($fields) values($values)",
							 | 
						||
| 
								 | 
							
									     $dbh,$opt_loop_count);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								$sth = $dbh->do("drop table bench1" . $server->{'drop_attr'}) or die $DBI::errstr;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if ($opt_fast && defined($server->{vacuum}))
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  $server->vacuum(0,\$dbh);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								################################ END ###################################
							 | 
						||
| 
								 | 
							
								####
							 | 
						||
| 
								 | 
							
								#### End of the test...Finally print time used to execute the
							 | 
						||
| 
								 | 
							
								#### whole test.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								$dbh->disconnect;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								end_benchmark($start_time);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								############################ HELP FUNCTIONS ##############################
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								sub test_query
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  my($test_text,$result_text,$query,$dbh,$count)=@_;
							 | 
						||
| 
								 | 
							
								  my($i,$loop_time,$end_time, $using_transactions);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  print $test_text . "\n";
							 | 
						||
| 
								 | 
							
								  $loop_time=new Benchmark;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  $using_transactions=0;
							 | 
						||
| 
								 | 
							
								  if ($opt_fast && server->{transactions} && $query=~ /^insert /i)
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    $using_transactions=1;
							 | 
						||
| 
								 | 
							
								    $dbh->{AutoCommit} = 0;
							 | 
						||
| 
								 | 
							
								    print "Transactions enabled\n" if ($opt_debug);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  for ($i=0 ; $i < $count ; $i++)
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    defined(fetch_all_rows($dbh,$query)) or die $DBI::errstr;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  if ($using_transactions)
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    $dbh->commit;
							 | 
						||
| 
								 | 
							
								    $dbh->{AutoCommit} = 1;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  $end_time=new Benchmark;
							 | 
						||
| 
								 | 
							
								  print $result_text . "($count): " .
							 | 
						||
| 
								 | 
							
								  timestr(timediff($end_time, $loop_time),"all") . "\n\n";
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								sub test_command
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  my($test_text,$result_text,$query,$dbh,$count)=@_;
							 | 
						||
| 
								 | 
							
								  my($i,$loop_time,$end_time);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  print $test_text . "\n";
							 | 
						||
| 
								 | 
							
								  $loop_time=new Benchmark;
							 | 
						||
| 
								 | 
							
								  for ($i=0 ; $i < $count ; $i++)
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    $dbh->do($query) or die $DBI::errstr;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  $end_time=new Benchmark;
							 | 
						||
| 
								 | 
							
								  print $result_text . "($count): " .
							 | 
						||
| 
								 | 
							
								  timestr(timediff($end_time, $loop_time),"all") . "\n\n";
							 | 
						||
| 
								 | 
							
								}
							 |