major-domo-database/run_optimization.py
2025-08-20 09:52:46 -05:00

90 lines
3.1 KiB
Python

#!/usr/bin/env python3
import os
import logging
from peewee import PostgresqlDatabase
# Configure logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger('postgres_optimization')
def optimize_postgresql():
"""Apply PostgreSQL optimizations to the migrated database"""
# Connect to PostgreSQL
db = PostgresqlDatabase(
'sba_master',
user='sba_admin',
password='sba_dev_password_2024',
host='localhost',
port=5432
)
try:
db.connect()
logger.info("✓ Connected to PostgreSQL database")
# Read and execute optimization SQL
with open('optimize_postgres.sql', 'r') as f:
sql_commands = f.read()
# Split into individual commands and execute
commands = [cmd.strip() for cmd in sql_commands.split(';') if cmd.strip() and not cmd.strip().startswith('--')]
successful_commands = 0
total_commands = len(commands)
for i, command in enumerate(commands, 1):
try:
if command.lower().startswith(('create index', 'analyze', 'commit')):
logger.info(f"Executing command {i}/{total_commands}: {command[:50]}...")
db.execute_sql(command)
successful_commands += 1
logger.info(f"✓ Command {i} completed successfully")
else:
logger.info(f"Skipping command {i}: {command[:50]}...")
except Exception as e:
if "already exists" in str(e).lower():
logger.info(f"⚠ Command {i} - Index already exists, skipping")
successful_commands += 1
else:
logger.error(f"✗ Command {i} failed: {e}")
logger.info(f"Optimization completed: {successful_commands}/{total_commands} commands successful")
# Final statistics update
try:
db.execute_sql("ANALYZE;")
logger.info("✓ Database statistics updated")
except Exception as e:
logger.error(f"✗ Failed to update statistics: {e}")
db.close()
return True
except Exception as e:
logger.error(f"✗ Database optimization failed: {e}")
try:
db.close()
except:
pass
return False
if __name__ == "__main__":
logger.info("=== PostgreSQL Database Optimization ===")
success = optimize_postgresql()
if success:
logger.info("🚀 Database optimization completed successfully")
logger.info("Recommended next steps:")
logger.info(" 1. Test query performance with sample API calls")
logger.info(" 2. Monitor query execution plans with EXPLAIN ANALYZE")
logger.info(" 3. Adjust work_mem and other settings based on usage patterns")
else:
logger.error("❌ Database optimization failed")
exit(0 if success else 1)