You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 12:05:29