-
Notifications
You must be signed in to change notification settings - Fork 35
Expand file tree
/
Copy pathperf_query_io.py
More file actions
78 lines (73 loc) · 1.68 KB
/
perf_query_io.py
File metadata and controls
78 lines (73 loc) · 1.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/usr/bin/env python
##
# .test.perf_query_io
##
# Statement I/O: Mass insert and select performance
##
import os
import time
import sys
import decimal
import datetime
def insertSamples(count, insert_records):
recs = [
(
-3, 123, 0xfffffea023,
decimal.Decimal("90900023123.40031"),
decimal.Decimal("432.40031"),
'some_óäæ_thing', 'varying', 'æ',
datetime.datetime(1982, 5, 18, 12, 0, 0, 100232)
)
for x in range(count)
]
gen = time.time()
insert_records.load_rows(recs)
fin = time.time()
xacttime = fin - gen
ats = count / xacttime
sys.stderr.write(
"INSERT Summary,\n " \
"inserted tuples: %d\n " \
"total time: %f\n " \
"average tuples per second: %f\n\n" %(
count, xacttime, ats,
)
)
def timeTupleRead(ps):
loops = 0
tuples = 0
genesis = time.time()
for x in ps.chunks():
loops += 1
tuples += len(x)
finalis = time.time()
looptime = finalis - genesis
ats = tuples / looptime
sys.stderr.write(
"SELECT Summary,\n " \
"looped: {looped}\n " \
"looptime: {looptime}\n " \
"tuples: {ntuples}\n " \
"average tuples per second: {tps}\n ".format(
looped = loops,
looptime = looptime,
ntuples = tuples,
tps = ats
)
)
def main(count):
sqlexec('CREATE TEMP TABLE samples '
'(i2 int2, i4 int4, i8 int8, n numeric, n2 numeric, t text, v varchar, c char(2), ts timestamp)')
insert_records = prepare(
"INSERT INTO samples VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)"
)
select_records = prepare("SELECT * FROM samples")
try:
insertSamples(count, insert_records)
timeTupleRead(select_records)
finally:
sqlexec("DROP TABLE samples")
def command(args):
main(int((args + [25000])[1]))
if __name__ == '__main__':
command(sys.argv)