|
|
@ -6615,36 +6615,22 @@ main(int argc, char **argv) |
|
|
|
if (!set_random_seed(getenv("PGBENCH_RANDOM_SEED"))) |
|
|
|
if (!set_random_seed(getenv("PGBENCH_RANDOM_SEED"))) |
|
|
|
pg_fatal("error while setting random seed from PGBENCH_RANDOM_SEED environment variable"); |
|
|
|
pg_fatal("error while setting random seed from PGBENCH_RANDOM_SEED environment variable"); |
|
|
|
|
|
|
|
|
|
|
|
while ((c = getopt_long(argc, argv, "iI:h:nvp:dqb:SNc:j:Crs:t:T:U:lf:D:F:M:P:R:L:", long_options, &optindex)) != -1) |
|
|
|
while ((c = getopt_long(argc, argv, "b:c:CdD:f:F:h:iI:j:lL:M:nNp:P:qrR:s:St:T:U:v", long_options, &optindex)) != -1) |
|
|
|
{ |
|
|
|
{ |
|
|
|
char *script; |
|
|
|
char *script; |
|
|
|
|
|
|
|
|
|
|
|
switch (c) |
|
|
|
switch (c) |
|
|
|
{ |
|
|
|
{ |
|
|
|
case 'i': |
|
|
|
case 'b': |
|
|
|
is_init_mode = true; |
|
|
|
if (strcmp(optarg, "list") == 0) |
|
|
|
break; |
|
|
|
{ |
|
|
|
case 'I': |
|
|
|
listAvailableScripts(); |
|
|
|
pg_free(initialize_steps); |
|
|
|
exit(0); |
|
|
|
initialize_steps = pg_strdup(optarg); |
|
|
|
} |
|
|
|
checkInitSteps(initialize_steps); |
|
|
|
weight = parseScriptWeight(optarg, &script); |
|
|
|
initialization_option_set = true; |
|
|
|
process_builtin(findBuiltin(script), weight); |
|
|
|
break; |
|
|
|
|
|
|
|
case 'h': |
|
|
|
|
|
|
|
pghost = pg_strdup(optarg); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'n': |
|
|
|
|
|
|
|
is_no_vacuum = true; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'v': |
|
|
|
|
|
|
|
benchmarking_option_set = true; |
|
|
|
benchmarking_option_set = true; |
|
|
|
do_vacuum_accounts = true; |
|
|
|
internal_script_used = true; |
|
|
|
break; |
|
|
|
|
|
|
|
case 'p': |
|
|
|
|
|
|
|
pgport = pg_strdup(optarg); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'd': |
|
|
|
|
|
|
|
pg_logging_increase_verbosity(); |
|
|
|
|
|
|
|
break; |
|
|
|
break; |
|
|
|
case 'c': |
|
|
|
case 'c': |
|
|
|
benchmarking_option_set = true; |
|
|
|
benchmarking_option_set = true; |
|
|
@ -6665,80 +6651,12 @@ main(int argc, char **argv) |
|
|
|
} |
|
|
|
} |
|
|
|
#endif /* HAVE_GETRLIMIT */ |
|
|
|
#endif /* HAVE_GETRLIMIT */ |
|
|
|
break; |
|
|
|
break; |
|
|
|
case 'j': /* jobs */ |
|
|
|
|
|
|
|
benchmarking_option_set = true; |
|
|
|
|
|
|
|
if (!option_parse_int(optarg, "-j/--jobs", 1, INT_MAX, |
|
|
|
|
|
|
|
&nthreads)) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
exit(1); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
#ifndef ENABLE_THREAD_SAFETY |
|
|
|
|
|
|
|
if (nthreads != 1) |
|
|
|
|
|
|
|
pg_fatal("threads are not supported on this platform; use -j1"); |
|
|
|
|
|
|
|
#endif /* !ENABLE_THREAD_SAFETY */ |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'C': |
|
|
|
case 'C': |
|
|
|
benchmarking_option_set = true; |
|
|
|
benchmarking_option_set = true; |
|
|
|
is_connect = true; |
|
|
|
is_connect = true; |
|
|
|
break; |
|
|
|
break; |
|
|
|
case 'r': |
|
|
|
case 'd': |
|
|
|
benchmarking_option_set = true; |
|
|
|
pg_logging_increase_verbosity(); |
|
|
|
report_per_command = true; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 's': |
|
|
|
|
|
|
|
scale_given = true; |
|
|
|
|
|
|
|
if (!option_parse_int(optarg, "-s/--scale", 1, INT_MAX, |
|
|
|
|
|
|
|
&scale)) |
|
|
|
|
|
|
|
exit(1); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 't': |
|
|
|
|
|
|
|
benchmarking_option_set = true; |
|
|
|
|
|
|
|
if (!option_parse_int(optarg, "-t/--transactions", 1, INT_MAX, |
|
|
|
|
|
|
|
&nxacts)) |
|
|
|
|
|
|
|
exit(1); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'T': |
|
|
|
|
|
|
|
benchmarking_option_set = true; |
|
|
|
|
|
|
|
if (!option_parse_int(optarg, "-T/--time", 1, INT_MAX, |
|
|
|
|
|
|
|
&duration)) |
|
|
|
|
|
|
|
exit(1); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'U': |
|
|
|
|
|
|
|
username = pg_strdup(optarg); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'l': |
|
|
|
|
|
|
|
benchmarking_option_set = true; |
|
|
|
|
|
|
|
use_log = true; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'q': |
|
|
|
|
|
|
|
initialization_option_set = true; |
|
|
|
|
|
|
|
use_quiet = true; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'b': |
|
|
|
|
|
|
|
if (strcmp(optarg, "list") == 0) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
listAvailableScripts(); |
|
|
|
|
|
|
|
exit(0); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
weight = parseScriptWeight(optarg, &script); |
|
|
|
|
|
|
|
process_builtin(findBuiltin(script), weight); |
|
|
|
|
|
|
|
benchmarking_option_set = true; |
|
|
|
|
|
|
|
internal_script_used = true; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'S': |
|
|
|
|
|
|
|
process_builtin(findBuiltin("select-only"), 1); |
|
|
|
|
|
|
|
benchmarking_option_set = true; |
|
|
|
|
|
|
|
internal_script_used = true; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'N': |
|
|
|
|
|
|
|
process_builtin(findBuiltin("simple-update"), 1); |
|
|
|
|
|
|
|
benchmarking_option_set = true; |
|
|
|
|
|
|
|
internal_script_used = true; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'f': |
|
|
|
|
|
|
|
weight = parseScriptWeight(optarg, &script); |
|
|
|
|
|
|
|
process_file(script, weight); |
|
|
|
|
|
|
|
benchmarking_option_set = true; |
|
|
|
|
|
|
|
break; |
|
|
|
break; |
|
|
|
case 'D': |
|
|
|
case 'D': |
|
|
|
{ |
|
|
|
{ |
|
|
@ -6754,12 +6672,55 @@ main(int argc, char **argv) |
|
|
|
exit(1); |
|
|
|
exit(1); |
|
|
|
} |
|
|
|
} |
|
|
|
break; |
|
|
|
break; |
|
|
|
|
|
|
|
case 'f': |
|
|
|
|
|
|
|
weight = parseScriptWeight(optarg, &script); |
|
|
|
|
|
|
|
process_file(script, weight); |
|
|
|
|
|
|
|
benchmarking_option_set = true; |
|
|
|
|
|
|
|
break; |
|
|
|
case 'F': |
|
|
|
case 'F': |
|
|
|
initialization_option_set = true; |
|
|
|
initialization_option_set = true; |
|
|
|
if (!option_parse_int(optarg, "-F/--fillfactor", 10, 100, |
|
|
|
if (!option_parse_int(optarg, "-F/--fillfactor", 10, 100, |
|
|
|
&fillfactor)) |
|
|
|
&fillfactor)) |
|
|
|
exit(1); |
|
|
|
exit(1); |
|
|
|
break; |
|
|
|
break; |
|
|
|
|
|
|
|
case 'h': |
|
|
|
|
|
|
|
pghost = pg_strdup(optarg); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'i': |
|
|
|
|
|
|
|
is_init_mode = true; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'I': |
|
|
|
|
|
|
|
pg_free(initialize_steps); |
|
|
|
|
|
|
|
initialize_steps = pg_strdup(optarg); |
|
|
|
|
|
|
|
checkInitSteps(initialize_steps); |
|
|
|
|
|
|
|
initialization_option_set = true; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'j': /* jobs */ |
|
|
|
|
|
|
|
benchmarking_option_set = true; |
|
|
|
|
|
|
|
if (!option_parse_int(optarg, "-j/--jobs", 1, INT_MAX, |
|
|
|
|
|
|
|
&nthreads)) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
exit(1); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
#ifndef ENABLE_THREAD_SAFETY |
|
|
|
|
|
|
|
if (nthreads != 1) |
|
|
|
|
|
|
|
pg_fatal("threads are not supported on this platform; use -j1"); |
|
|
|
|
|
|
|
#endif /* !ENABLE_THREAD_SAFETY */ |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'l': |
|
|
|
|
|
|
|
benchmarking_option_set = true; |
|
|
|
|
|
|
|
use_log = true; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'L': |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
double limit_ms = atof(optarg); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (limit_ms <= 0.0) |
|
|
|
|
|
|
|
pg_fatal("invalid latency limit: \"%s\"", optarg); |
|
|
|
|
|
|
|
benchmarking_option_set = true; |
|
|
|
|
|
|
|
latency_limit = (int64) (limit_ms * 1000); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
case 'M': |
|
|
|
case 'M': |
|
|
|
benchmarking_option_set = true; |
|
|
|
benchmarking_option_set = true; |
|
|
|
for (querymode = 0; querymode < NUM_QUERYMODE; querymode++) |
|
|
|
for (querymode = 0; querymode < NUM_QUERYMODE; querymode++) |
|
|
@ -6768,12 +6729,31 @@ main(int argc, char **argv) |
|
|
|
if (querymode >= NUM_QUERYMODE) |
|
|
|
if (querymode >= NUM_QUERYMODE) |
|
|
|
pg_fatal("invalid query mode (-M): \"%s\"", optarg); |
|
|
|
pg_fatal("invalid query mode (-M): \"%s\"", optarg); |
|
|
|
break; |
|
|
|
break; |
|
|
|
|
|
|
|
case 'n': |
|
|
|
|
|
|
|
is_no_vacuum = true; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'N': |
|
|
|
|
|
|
|
process_builtin(findBuiltin("simple-update"), 1); |
|
|
|
|
|
|
|
benchmarking_option_set = true; |
|
|
|
|
|
|
|
internal_script_used = true; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'p': |
|
|
|
|
|
|
|
pgport = pg_strdup(optarg); |
|
|
|
|
|
|
|
break; |
|
|
|
case 'P': |
|
|
|
case 'P': |
|
|
|
benchmarking_option_set = true; |
|
|
|
benchmarking_option_set = true; |
|
|
|
if (!option_parse_int(optarg, "-P/--progress", 1, INT_MAX, |
|
|
|
if (!option_parse_int(optarg, "-P/--progress", 1, INT_MAX, |
|
|
|
&progress)) |
|
|
|
&progress)) |
|
|
|
exit(1); |
|
|
|
exit(1); |
|
|
|
break; |
|
|
|
break; |
|
|
|
|
|
|
|
case 'q': |
|
|
|
|
|
|
|
initialization_option_set = true; |
|
|
|
|
|
|
|
use_quiet = true; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'r': |
|
|
|
|
|
|
|
benchmarking_option_set = true; |
|
|
|
|
|
|
|
report_per_command = true; |
|
|
|
|
|
|
|
break; |
|
|
|
case 'R': |
|
|
|
case 'R': |
|
|
|
{ |
|
|
|
{ |
|
|
|
/* get a double from the beginning of option value */ |
|
|
|
/* get a double from the beginning of option value */ |
|
|
@ -6787,15 +6767,35 @@ main(int argc, char **argv) |
|
|
|
throttle_delay = 1000000.0 / throttle_value; |
|
|
|
throttle_delay = 1000000.0 / throttle_value; |
|
|
|
} |
|
|
|
} |
|
|
|
break; |
|
|
|
break; |
|
|
|
case 'L': |
|
|
|
case 's': |
|
|
|
{ |
|
|
|
scale_given = true; |
|
|
|
double limit_ms = atof(optarg); |
|
|
|
if (!option_parse_int(optarg, "-s/--scale", 1, INT_MAX, |
|
|
|
|
|
|
|
&scale)) |
|
|
|
if (limit_ms <= 0.0) |
|
|
|
exit(1); |
|
|
|
pg_fatal("invalid latency limit: \"%s\"", optarg); |
|
|
|
break; |
|
|
|
benchmarking_option_set = true; |
|
|
|
case 'S': |
|
|
|
latency_limit = (int64) (limit_ms * 1000); |
|
|
|
process_builtin(findBuiltin("select-only"), 1); |
|
|
|
} |
|
|
|
benchmarking_option_set = true; |
|
|
|
|
|
|
|
internal_script_used = true; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 't': |
|
|
|
|
|
|
|
benchmarking_option_set = true; |
|
|
|
|
|
|
|
if (!option_parse_int(optarg, "-t/--transactions", 1, INT_MAX, |
|
|
|
|
|
|
|
&nxacts)) |
|
|
|
|
|
|
|
exit(1); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'T': |
|
|
|
|
|
|
|
benchmarking_option_set = true; |
|
|
|
|
|
|
|
if (!option_parse_int(optarg, "-T/--time", 1, INT_MAX, |
|
|
|
|
|
|
|
&duration)) |
|
|
|
|
|
|
|
exit(1); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'U': |
|
|
|
|
|
|
|
username = pg_strdup(optarg); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'v': |
|
|
|
|
|
|
|
benchmarking_option_set = true; |
|
|
|
|
|
|
|
do_vacuum_accounts = true; |
|
|
|
break; |
|
|
|
break; |
|
|
|
case 1: /* unlogged-tables */ |
|
|
|
case 1: /* unlogged-tables */ |
|
|
|
initialization_option_set = true; |
|
|
|
initialization_option_set = true; |
|
|
|