如何在PostgreSQL创建50k条记录并测试EBS存储性能?
实现步骤
1. 关联Postgres表空间到目标EBS卷
先确认你的EBS卷挂载路径(比如/mnt/ebs1、/mnt/ebs2、/mnt/ebs3、/mnt/ebs4),给Postgres用户赋予目录权限:
# 以ebs1为例,其他卷执行相同操作 sudo chown -R postgres:postgres /mnt/ebs1 sudo chmod 700 /mnt/ebs1
登录Postgres,为每个EBS卷创建对应表空间:
-- 创建ebs1对应的表空间 CREATE TABLESPACE ebs1_space LOCATION '/mnt/ebs1/postgres_data'; -- 依次创建其他EBS卷的表空间 CREATE TABLESPACE ebs2_space LOCATION '/mnt/ebs2/postgres_data'; CREATE TABLESPACE ebs3_space LOCATION '/mnt/ebs3/postgres_data'; CREATE TABLESPACE ebs4_space LOCATION '/mnt/ebs4/postgres_data';
2. 创建带50k样本记录的脚本(含计时)
方式1:Postgres内部SQL脚本
创建create_sample_data.sql文件,内容如下:
-- 切换到你的目标数据库 \c your_database_name; -- 指定要使用的表空间,替换为ebs1_space/ebs2_space等 \set tablespace 'ebs1_space' -- 记录开始时间 SELECT clock_timestamp() AS start_time; -- 创建测试表并指定表空间 CREATE TABLE test_sample ( id SERIAL PRIMARY KEY, username VARCHAR(50) NOT NULL, email VARCHAR(100) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, random_data TEXT ) TABLESPACE :tablespace; -- 插入50k条样本数据 INSERT INTO test_sample (username, email, random_data) SELECT 'user_' || generate_series(1, 50000), 'user_' || generate_series(1, 50000) || '@example.com', md5(random()::text) FROM generate_series(1, 50000); -- 记录结束时间 SELECT clock_timestamp() AS end_time;
运行脚本:
psql -U postgres -f create_sample_data.sql
方式2:Shell批量测试脚本
创建test_ebs_performance.sh脚本,内容如下:
#!/bin/bash # 配置参数 DB_NAME="your_database_name" USER="postgres" # 列出所有要测试的表空间 EBS_SPACES=("ebs1_space" "ebs2_space" "ebs3_space" "ebs4_space") for space in "${EBS_SPACES[@]}" do echo "=== 测试表空间: $space ===" # 记录开始时间 start_time=$(date +%s%N) # 执行建表插数据操作 psql -U $USER -d $DB_NAME << EOF DROP TABLE IF EXISTS test_sample; CREATE TABLE test_sample ( id SERIAL PRIMARY KEY, username VARCHAR(50) NOT NULL, email VARCHAR(100) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, random_data TEXT ) TABLESPACE $space; INSERT INTO test_sample (username, email, random_data) SELECT 'user_' || generate_series(1, 50000), 'user_' || generate_series(1, 50000) || '@example.com', md5(random()::text) FROM generate_series(1, 50000); EOF # 计算耗时 end_time=$(date +%s%N) duration=$(( (end_time - start_time) / 1000000 )) echo "耗时: $duration 毫秒" echo "-------------------------" done
添加执行权限并运行:
chmod +x test_ebs_performance.sh ./test_ebs_performance.sh
3. 测试注意事项
- 每次测试前建议删除旧表,避免数据残留干扰结果
- 可多次测试取平均值,降低偶然误差
- 确保Postgres配置未限制表空间的访问权限
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

