summaryrefslogtreecommitdiffstats
path: root/sql-bench/test-big-tables.sh
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 18:00:34 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 18:00:34 +0000
commit3f619478f796eddbba6e39502fe941b285dd97b1 (patch)
treee2c7b5777f728320e5b5542b6213fd3591ba51e2 /sql-bench/test-big-tables.sh
parentInitial commit. (diff)
downloadmariadb-3f619478f796eddbba6e39502fe941b285dd97b1.tar.xz
mariadb-3f619478f796eddbba6e39502fe941b285dd97b1.zip
Adding upstream version 1:10.11.6.upstream/1%10.11.6upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'sql-bench/test-big-tables.sh')
-rw-r--r--sql-bench/test-big-tables.sh174
1 files changed, 174 insertions, 0 deletions
diff --git a/sql-bench/test-big-tables.sh b/sql-bench/test-big-tables.sh
new file mode 100644
index 00000000..6be907d0
--- /dev/null
+++ b/sql-bench/test-big-tables.sh
@@ -0,0 +1,174 @@
+#!/usr/bin/env 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-1335 USA
+#
+# Test of extreme tables.
+#
+
+##################### Standard benchmark inits ##############################
+
+use Cwd;
+use DBI;
+use Benchmark;
+
+$opt_loop_count=70000; # 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";
+}