Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit2bf186a

Browse files
committed
Added command execution time measurement
This will be useful to keep track of possible performance degradation when code changes.
1 parent8a25cb3 commit2bf186a

File tree

2 files changed

+55
-9
lines changed

2 files changed

+55
-9
lines changed

‎testgres/performance_test.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from .plugins.pg_probackup2.pg_probackup2.tests.basic_testimportProbackupTest
2+
3+
classPerformanceTest(ProbackupTest):
4+
5+
deftest_full_backup_perf_basic(self):
6+
"""
7+
Full backup in 4 threads should be faster than in 1 thread
8+
"""
9+
node=self.pg_node.make_simple('node',pg_options={"fsync":"off","synchronous_commit":"off"})
10+
11+
self.pb.init()
12+
self.pb.add_instance('node',node)
13+
self.pb.set_archiving('node',node)
14+
node.slow_start()
15+
16+
# Fill with data
17+
node.pgbench_init(scale=100,no_vacuum=True)
18+
19+
# FULL
20+
backup_id_1t=self.pb.backup_node('node',node,options=["--no-validate"],check_time=True)
21+
elapsed_time_1t=backup_id_1t.execution_time
22+
# Full in 4 threads
23+
backup_id_4t=self.pb.backup_node('node',node,options=["-j","4","--no-validate"],check_time=True)
24+
elapsed_time_4t=backup_id_4t.execution_time
25+
26+
# Full by basebackup
27+
backup=node.backup(check_time=True)
28+
elapsed_time_base=backup.elapsed_time
29+
30+
print(f"elapsed_time_1t:{elapsed_time_1t}, elapsed_time_4t:{elapsed_time_4t}, elapsed_time_base:{elapsed_time_base}")
31+
self.assertLess(elapsed_time_4t,elapsed_time_base,"Full backup in 4 threads should be faster than pg_basebackup")
32+
self.assertLess(elapsed_time_4t,elapsed_time_1t,"Full backup in 4 threads should be faster than in 1 thread")
33+
self.assertLess(elapsed_time_1t,elapsed_time_base,"Full backup should be faster than pg_basebackup")

‎testgres/plugins/pg_probackup2/pg_probackup2/app.py

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ def __str__(self):
4343
classProbackupApp:
4444

4545
def__init__(self,test_class:unittest.TestCase,
46-
pg_node,pb_log_path,test_env,auto_compress_alg,backup_dir):
46+
pg_node,pb_log_path,test_env,auto_compress_alg,backup_dir,execution_time):
4747
self.test_class=test_class
4848
self.pg_node=pg_node
4949
self.pb_log_path=pb_log_path
@@ -56,9 +56,10 @@ def __init__(self, test_class: unittest.TestCase,
5656
self.verbose=init_params.verbose
5757
self.archive_compress=init_params.archive_compress
5858
self.test_class.output=None
59+
self.execution_time=execution_time
5960

6061
defrun(self,command,gdb=False,old_binary=False,return_id=True,env=None,
61-
skip_log_directory=False,expect_error=False,use_backup_dir=True):
62+
skip_log_directory=False,expect_error=False,use_backup_dir=True,execution_time=False):
6263
"""
6364
Run pg_probackup
6465
backup_dir: target directory for making backup
@@ -113,11 +114,22 @@ def run(self, command, gdb=False, old_binary=False, return_id=True, env=None,
113114
cmdline= ['gdbserver']+ ['localhost:'+str(gdb_port)]+cmdline
114115
print("pg_probackup gdb suspended, waiting gdb connection on localhost:{0}".format(gdb_port))
115116

116-
self.test_class.output=subprocess.check_output(
117-
cmdline,
118-
stderr=subprocess.STDOUT,
119-
env=env
120-
).decode('utf-8',errors='replace')
117+
ifexecution_time:
118+
start_time=time.time()
119+
self.test_class.output=subprocess.check_output(
120+
cmdline,
121+
stderr=subprocess.STDOUT,
122+
env=env
123+
).decode('utf-8',errors='replace')
124+
end_time=time.time()
125+
self.execution_time=end_time-start_time
126+
else:
127+
self.test_class.output=subprocess.check_output(
128+
cmdline,
129+
stderr=subprocess.STDOUT,
130+
env=env
131+
).decode('utf-8',errors='replace')
132+
121133
ifcommand[0]=='backup'andreturn_id:
122134
# return backup ID
123135
forlineinself.test_class.output.splitlines():
@@ -213,7 +225,8 @@ def backup_node(
213225
old_binary=False,return_id=True,no_remote=False,
214226
env=None,
215227
expect_error=False,
216-
sync=False
228+
sync=False,
229+
execution_time=False
217230
):
218231
ifoptionsisNone:
219232
options= []
@@ -253,7 +266,7 @@ def backup_node(
253266
cmd_list+= ['--no-sync']
254267

255268
returnself.run(cmd_list+options,gdb,old_binary,return_id,env=env,
256-
expect_error=expect_error)
269+
expect_error=expect_error,execution_time=execution_time)
257270

258271
defbackup_replica_node(self,instance,node,data_dir=False,*,
259272
master,backup_type='full',datname=False,

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp