Some checks failed
CD Pipeline / deploy (push) Failing after 59s
- 建立 Gitea Actions CD pipeline (.gitea/workflows/cd.yaml) - 部署模式: rsync Python 檔案至 188 → docker restart (volume mount) - Dockerfile/requirements 變動時自動重建 Docker image - 部署通知: Telegram (開始/成功/失敗) - 健康檢查: https://mo.wooo.work/health (最多 5 次重試) - 同步最新 CLAUDE.md / ADR-008 / memory (2026-04-19) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
4.7 KiB
4.7 KiB
SQLite 資料庫優化指南
創建日期:2026-01-14 執行時機:晚上 8 點後(低流量時段)
📋 優化內容
1. 添加索引(總計 8 個)
products 表:
idx_products_category- 分類查詢優化idx_products_status- 狀態篩選優化idx_products_updated_at- 更新時間排序優化
price_records 表:
idx_price_records_product_id- 商品價格歷史查詢idx_price_records_product_time- 複合索引(商品+時間)
promo_products 表:
idx_promo_crawled_at- 爬取時間查詢idx_promo_batch_id- 批次查詢idx_promo_status_change- 狀態變更篩選
2. VACUUM 清理
- 回收已刪除資料的空間
- 優化資料庫內部結構
- 預計可節省 5-10% 空間
3. ANALYZE 統計
- 更新查詢規劃器統計資訊
- 提升查詢效能
⏰ 執行時間建議
最佳執行時間:晚上 8:00 - 凌晨 2:00
預計耗時:
- 添加索引:1-2 分鐘
- VACUUM 清理:30-60 秒
- 總計:約 2-3 分鐘
影響範圍:
- ⚠️ 添加索引期間:該表寫入會被阻塞(1-10 秒/索引)
- 🚨 VACUUM 期間:整個資料庫無法讀寫(30-60 秒)
🚀 執行方式
方式一:手動執行(推薦)
1. SSH 連線到伺服器
gcloud compute ssh momo-server --zone=asia-east1-a
2. 進入專案目錄
cd ~/momo_pro_system
3. 執行優化腳本
python3 database_optimization.py
4. 觀察執行過程
腳本會即時顯示進度:
[2026-01-14 20:00:15] [INFO] SQLite 資料庫優化腳本啟動
[2026-01-14 20:00:15] [INFO] 當前資料庫大小: 208.45 MB
[2026-01-14 20:00:15] [INFO] 步驟 1/3: 添加索引
[2026-01-14 20:00:16] [SUCCESS] ✓ 索引創建成功: idx_products_category (耗時 0.35 秒)
...
[2026-01-14 20:02:30] [SUCCESS] ✓ 資料庫優化完成!
方式二:使用 screen 背景執行
如果擔心 SSH 斷線,可以使用 screen:
# 1. SSH 連線
gcloud compute ssh momo-server --zone=asia-east1-a
# 2. 創建 screen 會話
screen -S db_optimization
# 3. 執行腳本
cd ~/momo_pro_system
python3 database_optimization.py
# 4. 離開 screen(按 Ctrl+A 然後按 D)
# 腳本會繼續在背景執行
# 5. 重新連接 screen 查看進度
screen -r db_optimization
方式三:定時任務(自動執行)
如果想要自動在每週日凌晨執行:
# 編輯 crontab
crontab -e
# 添加以下行(每週日凌晨 2:00 執行)
0 2 * * 0 cd /home/ogt/momo_pro_system && /usr/bin/python3 database_optimization.py >> logs/db_optimization.log 2>&1
✅ 執行後驗證
1. 檢查索引是否創建成功
sqlite3 data/momo_database.db "SELECT name FROM sqlite_master WHERE type='index' AND name LIKE 'idx_%';"
應該看到 8 個新索引。
2. 檢查資料庫大小
ls -lh data/momo_database.db
如果執行了 VACUUM,大小應該會略微減少。
3. 測試網站運行
訪問 https://momo.wooo.work/,確認商品列表載入正常。
📊 預期效果
查詢效能提升
- 分類篩選:快 50-80%
- 價格歷史查詢:快 70-90%
- 促銷商品查詢:快 60-80%
空間節省
- 預計節省:10-20 MB
- 資料庫結構更緊湊
⚠️ 注意事項
-
執行前備份(可選,但建議)
cp data/momo_database.db data/momo_database_backup_$(date +%Y%m%d).db -
確認服務運行正常
systemctl status momo -
執行期間避免:
- ❌ 不要手動觸發爬蟲任務
- ❌ 不要進行大量資料匯入
- ❌ 不要重啟服務
-
執行後檢查日誌
tail -100 logs/gunicorn-error.log
🆘 問題排查
問題 1:資料庫被鎖定
錯誤:database is locked
原因:有其他程序正在使用資料庫
解決:
# 檢查是否有爬蟲程序在運行
ps aux | grep python | grep -E 'crawler|scheduler'
# 如果有,先停止
pkill -f 'run_scheduler.py'
問題 2:VACUUM 執行時間過長
現象:超過 5 分鐘還在執行
解決:
- 正常情況,耐心等待
- 不要中斷程序(Ctrl+C)
- 如果超過 10 分鐘,可能需要檢查磁碟空間
問題 3:執行後網站載入變慢
可能原因:SQLite 緩存尚未建立
解決:
- 等待 5-10 分鐘,讓系統重新建立緩存
- 或手動刷新幾次頁面
📞 聯絡支援
如有問題,請檢查:
- 執行腳本的完整輸出
- Gunicorn 錯誤日誌:
logs/gunicorn-error.log - 系統負載:
uptime
文件版本:1.0 最後更新:2026-01-14 維護人員:MOMO Pro System Admin