pgbench_v1.patch
text/x-patch
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
Series: patch v1
| File | + | − |
|---|---|---|
| contrib/pgbench/pgbench.c | 0 | 0 |
diff --git a/contrib/pgbench/pgbench.c b/contrib/pgbench/pgbench.c
index bb18c89..9a43fd5 100644
*** a/contrib/pgbench/pgbench.c
--- b/contrib/pgbench/pgbench.c
*************** int fillfactor = 100;
*** 130,135 ****
--- 130,136 ----
* -s instead */
#define ntellers 10
#define naccounts 100000
+ #define plpgsql_loops 10000
bool use_log; /* log transaction latencies to a file */
bool is_connect; /* establish connection for each transaction */
*************** static char *select_only = {
*** 273,278 ****
--- 274,284 ----
"SELECT abalance FROM pgbench_accounts WHERE aid = :aid;\n"
};
+ /* -P case */
+ static char *select_only_plpgsql = {
+ "SELECT pgbench_query(" CppAsString2(naccounts) " *:scale," CppAsString2(plpgsql_loops) ");\n"
+ };
+
/* Function prototypes */
static void setalarm(int seconds);
static void *threadRun(void *arg);
*************** printResults(int ttype, int normal_xacts
*** 1686,1691 ****
--- 1692,1699 ----
s = "Update only pgbench_accounts";
else if (ttype == 1)
s = "SELECT only";
+ else if (ttype == 4)
+ s = "SELECT only via plpgsql";
else
s = "Custom query";
*************** printResults(int ttype, int normal_xacts
*** 1708,1713 ****
--- 1716,1726 ----
}
printf("tps = %f (including connections establishing)\n", tps_include);
printf("tps = %f (excluding connections establishing)\n", tps_exclude);
+ if (ttype==4)
+ {
+ printf("selects per second = %f (including connections establishing)\n", tps_include*plpgsql_loops);
+ printf("selects per second = %f (excluding connections establishing)\n", tps_exclude*plpgsql_loops);
+ };
/* Report per-command latencies */
if (is_latencies)
*************** main(int argc, char **argv)
*** 1766,1772 ****
int is_no_vacuum = 0; /* no vacuum at all before testing? */
int do_vacuum_accounts = 0; /* do vacuum accounts before testing? */
int ttype = 0; /* transaction type. 0: TPC-B, 1: SELECT only,
! * 2: skip update of branches and tellers */
char *filename = NULL;
bool scale_given = false;
--- 1779,1785 ----
int is_no_vacuum = 0; /* no vacuum at all before testing? */
int do_vacuum_accounts = 0; /* do vacuum accounts before testing? */
int ttype = 0; /* transaction type. 0: TPC-B, 1: SELECT only,
! * 2: skip update of branches and tellers 3: custom sql, 4: SELECT only via plpgsql*/
char *filename = NULL;
bool scale_given = false;
*************** main(int argc, char **argv)
*** 1823,1829 ****
state = (CState *) xmalloc(sizeof(CState));
memset(state, 0, sizeof(CState));
! while ((c = getopt(argc, argv, "ih:nvp:dSNc:j:Crs:t:T:U:lf:D:F:M:")) != -1)
{
switch (c)
{
--- 1836,1842 ----
state = (CState *) xmalloc(sizeof(CState));
memset(state, 0, sizeof(CState));
! while ((c = getopt(argc, argv, "ih:nvp:dSNPc:j:Crs:t:T:U:lf:D:F:M:")) != -1)
{
switch (c)
{
*************** main(int argc, char **argv)
*** 1851,1856 ****
--- 1864,1872 ----
case 'N':
ttype = 2;
break;
+ case 'P':
+ ttype = 4;
+ break;
case 'c':
nclients = atoi(optarg);
if (nclients <= 0 || nclients > MAXCLIENTS)
*************** main(int argc, char **argv)
*** 2100,2105 ****
--- 2116,2138 ----
scale);
}
+ if (ttype == 4)
+ {
+ executeStatement(con,
+ "create or replace function pgbench_query(scale integer,loops integer) RETURNS integer AS $$ "
+ "DECLARE sum integer default 0; "
+ "amount integer; "
+ "account_id integer; "
+ "BEGIN FOR i IN 1..loops LOOP "
+ " account_id=1+floor(random()*scale); "
+ " SELECT abalance into strict amount FROM pgbench_accounts WHERE aid = account_id; "
+ " sum := sum + amount; "
+ "END LOOP; "
+ "return sum; "
+ "END $$ LANGUAGE plpgsql ");
+ fprintf(stderr, "plgsql function created.\n");
+ };
+
/*
* :scale variables normally get -s or database scale, but don't override
* an explicit -D switch
*************** main(int argc, char **argv)
*** 2153,2158 ****
--- 2186,2196 ----
num_files = 1;
break;
+ case 4:
+ sql_files[0] = process_builtin(select_only_plpgsql);
+ num_files = 1;
+ break;
+
default:
break;
}