Files
ewoooc/docs/DATABASE_OPTIMIZATION_GUIDE.md
ogt 1b4f3a7bbe
Some checks failed
CD Pipeline / deploy (push) Failing after 59s
feat: EwoooC 初始化 — 完整專案推版至 Gitea
- 建立 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>
2026-04-19 01:21:13 +08:00

225 lines
4.7 KiB
Markdown
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.
# 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 連線到伺服器
```bash
gcloud compute ssh momo-server --zone=asia-east1-a
```
#### 2. 進入專案目錄
```bash
cd ~/momo_pro_system
```
#### 3. 執行優化腳本
```bash
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
```bash
# 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
```
---
### 方式三:定時任務(自動執行)
如果想要自動在每週日凌晨執行:
```bash
# 編輯 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. 檢查索引是否創建成功
```bash
sqlite3 data/momo_database.db "SELECT name FROM sqlite_master WHERE type='index' AND name LIKE 'idx_%';"
```
應該看到 8 個新索引。
### 2. 檢查資料庫大小
```bash
ls -lh data/momo_database.db
```
如果執行了 VACUUM大小應該會略微減少。
### 3. 測試網站運行
訪問 https://momo.wooo.work/,確認商品列表載入正常。
---
## 📊 預期效果
### 查詢效能提升
- **分類篩選**:快 50-80%
- **價格歷史查詢**:快 70-90%
- **促銷商品查詢**:快 60-80%
### 空間節省
- 預計節省10-20 MB
- 資料庫結構更緊湊
---
## ⚠️ 注意事項
1. **執行前備份**(可選,但建議)
```bash
cp data/momo_database.db data/momo_database_backup_$(date +%Y%m%d).db
```
2. **確認服務運行正常**
```bash
systemctl status momo
```
3. **執行期間避免**
- ❌ 不要手動觸發爬蟲任務
- ❌ 不要進行大量資料匯入
- ❌ 不要重啟服務
4. **執行後檢查日誌**
```bash
tail -100 logs/gunicorn-error.log
```
---
## 🆘 問題排查
### 問題 1資料庫被鎖定
**錯誤**`database is locked`
**原因**:有其他程序正在使用資料庫
**解決**
```bash
# 檢查是否有爬蟲程序在運行
ps aux | grep python | grep -E 'crawler|scheduler'
# 如果有,先停止
pkill -f 'run_scheduler.py'
```
### 問題 2VACUUM 執行時間過長
**現象**:超過 5 分鐘還在執行
**解決**
- 正常情況,耐心等待
- 不要中斷程序Ctrl+C
- 如果超過 10 分鐘,可能需要檢查磁碟空間
### 問題 3執行後網站載入變慢
**可能原因**SQLite 緩存尚未建立
**解決**
- 等待 5-10 分鐘,讓系統重新建立緩存
- 或手動刷新幾次頁面
---
## 📞 聯絡支援
如有問題,請檢查:
1. 執行腳本的完整輸出
2. Gunicorn 錯誤日誌:`logs/gunicorn-error.log`
3. 系統負載:`uptime`
---
**文件版本**1.0
**最後更新**2026-01-14
**維護人員**MOMO Pro System Admin