Files
junhong_cmp_fiber/scripts/perf_query/deploy-perf-pg.sh
huang f32d32cd36
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m6s
perf: IoT 卡 30M 行分页查询优化(P95 17.9s → <500ms)
- 新增 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 工具
2026-02-24 16:23:02 +08:00

86 lines
2.7 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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 ""