All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m6s
- 新增 is_standalone 物化列 + 触发器自动维护(迁移 056) - 并行查询拆分:多店铺 IN 查询拆为 per-shop goroutine 并行 Index Scan - 两阶段延迟 Join:深度分页(page≥50)走覆盖索引 Index Only Scan 取 ID 再回表 - COUNT 缓存:per-shop 并行 COUNT + Redis 30 分钟 TTL - 索引优化:删除有害全局索引、新增 partial composite indexes(迁移 057/058) - ICCID 模糊搜索路径隔离:trigram GIN 索引走独立查询路径 - 慢查询阈值从 100ms 调整为 500ms - 新增 30M 测试数据种子脚本和 benchmark 工具
86 lines
2.7 KiB
Bash
Executable File
86 lines
2.7 KiB
Bash
Executable File
#!/bin/bash
|
||
set -e
|
||
|
||
DATA_DIR="/mnt/data1/database/pgsql/pgdata_perf"
|
||
CONTAINER="postgres-perf-test"
|
||
|
||
echo "=========================================="
|
||
echo " 性能测试 PostgreSQL 容器部署"
|
||
echo "=========================================="
|
||
|
||
if [ -d "$DATA_DIR" ] && [ "$(ls -A $DATA_DIR 2>/dev/null)" ]; then
|
||
echo "⚠️ 数据目录已存在"
|
||
read -p "清空重建?(y/N): " confirm
|
||
if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
|
||
docker stop $CONTAINER 2>/dev/null || true
|
||
docker rm $CONTAINER 2>/dev/null || true
|
||
sudo rm -rf "$DATA_DIR"
|
||
fi
|
||
fi
|
||
|
||
sudo mkdir -p "$DATA_DIR"
|
||
sudo chown -R 999:999 "$DATA_DIR"
|
||
|
||
# 第一步:用默认配置启动,让 PG 完成初始化
|
||
echo "启动容器(默认配置初始化)..."
|
||
docker compose -f docker-compose-perf.yml up -d
|
||
|
||
echo "等待初始化完成..."
|
||
for i in $(seq 1 30); do
|
||
if docker exec $CONTAINER pg_isready -U erp_pgsql -d junhong_cmp_test > /dev/null 2>&1; then
|
||
echo "✅ 初始化完成"
|
||
break
|
||
fi
|
||
[ $i -eq 30 ] && echo "❌ 超时" && docker logs $CONTAINER && exit 1
|
||
sleep 2
|
||
done
|
||
|
||
# 第二步:把优化后的配置覆盖到数据目录
|
||
echo "注入优化配置..."
|
||
docker cp postgresql-perf.conf $CONTAINER:/var/lib/postgresql/data/postgresql.conf
|
||
|
||
# 第三步:重启让新配置生效
|
||
echo "重启容器..."
|
||
docker restart $CONTAINER
|
||
|
||
echo "等待重启完成..."
|
||
for i in $(seq 1 30); do
|
||
if docker exec $CONTAINER pg_isready -U erp_pgsql -d junhong_cmp_test > /dev/null 2>&1; then
|
||
echo "✅ 重启完成"
|
||
break
|
||
fi
|
||
[ $i -eq 30 ] && echo "❌ 超时" && docker logs --tail 20 $CONTAINER && exit 1
|
||
sleep 2
|
||
done
|
||
|
||
# 第四步:启用扩展
|
||
echo "启用扩展..."
|
||
docker exec $CONTAINER psql -U erp_pgsql -d junhong_cmp_test -c "CREATE EXTENSION IF NOT EXISTS pg_stat_statements;" 2>/dev/null || echo "pg_stat_statements 需要 shared_preload_libraries,跳过"
|
||
docker exec $CONTAINER psql -U erp_pgsql -d junhong_cmp_test -c "CREATE EXTENSION IF NOT EXISTS pg_trgm;"
|
||
|
||
# 验证
|
||
echo ""
|
||
echo "=========================================="
|
||
echo " 配置验证"
|
||
echo "=========================================="
|
||
docker exec $CONTAINER psql -U erp_pgsql -d junhong_cmp_test -c "
|
||
SELECT name, setting, unit
|
||
FROM pg_settings
|
||
WHERE name IN (
|
||
'shared_buffers', 'effective_cache_size', 'work_mem',
|
||
'random_page_cost', 'effective_io_concurrency',
|
||
'max_parallel_workers_per_gather', 'maintenance_work_mem',
|
||
'max_connections', 'autovacuum_vacuum_scale_factor'
|
||
)
|
||
ORDER BY name;
|
||
"
|
||
|
||
echo ""
|
||
echo "=========================================="
|
||
echo " 部署完成"
|
||
echo "=========================================="
|
||
echo " Port: 16289"
|
||
echo " Database: junhong_cmp_test"
|
||
echo " User: erp_pgsql / erp_2025"
|
||
echo ""
|