# 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' ``` ### 問題 2:VACUUM 執行時間過長 **現象**:超過 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