达梦数据库压力测试报错超出全局hash join空间,适当增加HJ_BUF_GLOBAL_SIZE解决
1.名词解释:达梦数据库中的HJ_BUF_GLOBAL_SIZE
是所有哈希连接操作可用的最大哈希缓冲区大小,单位为兆字节(MB)
2.达梦压测报错:
3.找到达梦数据库安装文件
4.压力测试脚本
import http.client
import multiprocessing
import time
from urllib.parse import urlparse
import json # 新增json模块用于解析响应内容def send_request(url):try:parsed_url = urlparse(url)if parsed_url.scheme == 'http':conn = http.client.HTTPConnection(parsed_url.netloc)else:conn = http.client.HTTPSConnection(parsed_url.netloc)conn.request("GET", parsed_url.path)response = conn.getresponse()# 读取完整响应内容response_body = response.read().decode('utf-8')status_code = response.statusconn.close()# 尝试解析JSON(针对接口返回的JSON格式)try:response_data = json.loads(response_body)actual_code = response_data.get('code', status_code) # 优先使用业务codereturn actual_code == 200 # 只有code=200才算真正成功except json.JSONDecodeError:return status_code == 200 # 非JSON响应则 fallback 到HTTP状态码except Exception as e:print(f"请求出错: {e}")return Falsedef stress_test(url, num_requests):results = []for _ in range(num_requests):start_time = time.time()is_success = send_request(url) # 现在返回布尔值end_time = time.time()elapsed_time = end_time - start_timeresults.append((is_success, elapsed_time))return resultsdef run_single_stress_test(url, num_requests_per_process, all_results):results = stress_test(url, num_requests_per_process)all_results.extend(results)def run_stress_test(url, num_processes, num_requests_per_process):processes = []manager = multiprocessing.Manager()all_results = manager.list()for _ in range(num_processes):p = multiprocessing.Process(target=run_single_stress_test,args=(url, num_requests_per_process, all_results))processes.append(p)p.start()for p in processes:p.join()return all_resultsif __name__ == "__main__":target_url = 'http://127.0.0.1:8088/api/aaaa/project/deptList'num_processes = 500num_requests_per_process = 5try:print("开始压力测试...")results = run_stress_test(target_url, num_processes, num_requests_per_process)# 结果分析(现在基于布尔值判断)total_requests = len(results)successful_requests = sum(1 for success, _ in results if success)success_rate = (successful_requests / total_requests) * 100total_time = sum(elapsed for _, elapsed in results)print("\n===== 测试结果 =====")print(f"总请求数: {total_requests}")print(f"成功请求数: {successful_requests}")print(f"成功率: {success_rate:.2f}%")print(f"总耗时: {total_time:.2f} 秒")print(f"平均响应时间: {total_time / total_requests:.2f} 秒")# 输出详细错误信息(如果有失败请求)if successful_requests < total_requests:failed = total_requests - successful_requestsprint(f"\n警告: 有 {failed} 次请求未返回code=200!")except Exception as e:print(f"发生致命错误: {e}")