mirror of
https://github.com/taosdata/TDengine
synced 2026-05-24 10:09:01 +00:00
138 lines
5.4 KiB
Python
138 lines
5.4 KiB
Python
|
|
from loguru import logger
|
||
|
|
import time
|
||
|
|
import os
|
||
|
|
import json
|
||
|
|
|
||
|
|
class HttpPerfCompard:
|
||
|
|
def __init__(self):
|
||
|
|
self.hostname = "vm85"
|
||
|
|
self.taosc_port = 6030
|
||
|
|
self.http_port = 6041
|
||
|
|
self.database = "test"
|
||
|
|
self.query_times = 1
|
||
|
|
self.concurrent = 1
|
||
|
|
self.column_count = 10
|
||
|
|
self.tag_count = 10
|
||
|
|
self.perfMonitorBin = '/home/ubuntu/perfMonitor'
|
||
|
|
self.taosBenchmarkBin = '/usr/local/bin/taosBenchmark'
|
||
|
|
self.sleep_time = 20
|
||
|
|
|
||
|
|
self.current_time = time.strftime("%Y-%m-%d-%H:%M:%S", time.localtime(time.time()))
|
||
|
|
self.current_dir = os.path.dirname(os.path.realpath(__file__))
|
||
|
|
self.log_file = os.path.join(self.current_dir, f'./performance.log')
|
||
|
|
logger.add(self.log_file)
|
||
|
|
logger.info(f'init env success, log will be export to {self.log_file}')
|
||
|
|
self.sql_list = ['select last_row(*) from test.stb;',
|
||
|
|
'select * from test.stb limit 100000;',
|
||
|
|
'select count(*) from test.stb interval (1d);',
|
||
|
|
'select avg(c3), max(c4), min(c5) from test.stb interval (1d);',
|
||
|
|
'select count(*) from test.stb where t1 = "shanghai" interval (1h);',
|
||
|
|
'select avg(c3), max(c4), min(c5) from test.stb where t1 = "shanghai" interval (1d);',
|
||
|
|
'select avg(c3), max(c4), min(c5) from test.stb where ts > "2021-01-01 00:00:00" and ts < "2021-01-31 00:00:00" interval (1d);'
|
||
|
|
'select last(*) from test.stb;'
|
||
|
|
]
|
||
|
|
# self.sql_list = ['select * from test.stb limit 100000;']
|
||
|
|
|
||
|
|
def initLog(self):
|
||
|
|
self.exec_local_cmd(f'echo "" > {self.log_file}')
|
||
|
|
|
||
|
|
def exec_local_cmd(self,shell_cmd):
|
||
|
|
result = os.popen(shell_cmd).read().strip()
|
||
|
|
return result
|
||
|
|
|
||
|
|
def genQueryJsonFile(self, query_sql):
|
||
|
|
json_file = os.path.join(self.current_dir, f'./query.json')
|
||
|
|
jdict = {
|
||
|
|
"filetype": "query",
|
||
|
|
"cfgdir": "/etc/taos",
|
||
|
|
"host": self.hostname,
|
||
|
|
"port": self.taosc_port,
|
||
|
|
"user": "root",
|
||
|
|
"password": "taosdata",
|
||
|
|
"confirm_parameter_prompt": "no",
|
||
|
|
"databases": self.database,
|
||
|
|
"query_times": self.query_times,
|
||
|
|
"query_mode": "restful",
|
||
|
|
"specified_table_query": {
|
||
|
|
"concurrent": self.concurrent,
|
||
|
|
"sqls": [
|
||
|
|
{
|
||
|
|
"sql": query_sql,
|
||
|
|
"result": "./query_res0.txt"
|
||
|
|
}
|
||
|
|
]
|
||
|
|
}
|
||
|
|
}
|
||
|
|
with open(json_file, "w", encoding="utf-8") as f_w:
|
||
|
|
f_w.write(json.dumps(jdict))
|
||
|
|
|
||
|
|
def genInsertJsonFile(self, thread_count, table_count, row_count, batch_size):
|
||
|
|
json_file = os.path.join(self.current_dir, f'./insert.json')
|
||
|
|
jdict = {
|
||
|
|
"filetype": "insert",
|
||
|
|
"cfgdir": "/etc/taos",
|
||
|
|
"host": self.hostname,
|
||
|
|
"rest_host": self.hostname,
|
||
|
|
"port": self.taosc_port,
|
||
|
|
"rest_port": self.http_port,
|
||
|
|
"user": "root",
|
||
|
|
"password": "taosdata",
|
||
|
|
"thread_count": thread_count,
|
||
|
|
"thread_count_create_tbl": 1,
|
||
|
|
"result_file": self.log_file,
|
||
|
|
"databases": [{
|
||
|
|
"dbinfo": {
|
||
|
|
"name": self.database,
|
||
|
|
"drop": "yes"
|
||
|
|
},
|
||
|
|
"super_tables": [{
|
||
|
|
"name": "stb",
|
||
|
|
"childtable_count": table_count,
|
||
|
|
"childtable_prefix": "stb_",
|
||
|
|
"batch_create_tbl_num": 1,
|
||
|
|
"insert_mode": "rand",
|
||
|
|
"insert_iface": "rest",
|
||
|
|
"insert_rows": row_count,
|
||
|
|
"insert_interval": 0,
|
||
|
|
"batch_rows": batch_size,
|
||
|
|
"max_sql_len": 1048576,
|
||
|
|
"timestamp_step": 3000,
|
||
|
|
"start_timestamp": "2021-01-01 00:00:00.000",
|
||
|
|
"tags_file": "",
|
||
|
|
"partical_col_num": 0,
|
||
|
|
"columns": [{"type": "INT", "count": self.column_count}],
|
||
|
|
"tags": [{"type": "BINARY", "len": 16, "count": self.tag_count}]
|
||
|
|
}]
|
||
|
|
}]
|
||
|
|
}
|
||
|
|
with open(json_file, "w", encoding="utf-8") as f_w:
|
||
|
|
f_w.write(json.dumps(jdict))
|
||
|
|
|
||
|
|
def runTest(self):
|
||
|
|
self.initLog()
|
||
|
|
self.genInsertJsonFile(32, 100, 100000, 1)
|
||
|
|
logger.info('result of insert_perf with 32 threads and 1 batch_size:')
|
||
|
|
self.exec_local_cmd(f'{self.perfMonitorBin} -f insert.json')
|
||
|
|
time.sleep(self.sleep_time)
|
||
|
|
self.genInsertJsonFile(32, 500, 1000000, 1000)
|
||
|
|
logger.info('result of insert_perf with 32 threads and 1000 batch_size:')
|
||
|
|
self.exec_local_cmd(f'{self.perfMonitorBin} -f insert.json')
|
||
|
|
time.sleep(self.sleep_time)
|
||
|
|
|
||
|
|
for query_sql in self.sql_list:
|
||
|
|
self.genQueryJsonFile(query_sql)
|
||
|
|
self.exec_local_cmd(f'{self.taosBenchmarkBin} -f query.json > tmp.log')
|
||
|
|
res = self.exec_local_cmd('grep -Eo \'\<Spent.+s\>\' tmp.log |grep -v \'total queries\' |awk \'{sum+=$2}END{print "Average=",sum/NR,"s"}\'')
|
||
|
|
logger.info(query_sql)
|
||
|
|
logger.info(res)
|
||
|
|
time.sleep(self.sleep_time)
|
||
|
|
|
||
|
|
if __name__ == '__main__':
|
||
|
|
runPerf = HttpPerfCompard()
|
||
|
|
runPerf.runTest()
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|