# Быстрый гайд применения фикса

## Что было сделано

Были внесены изменения в 3 файла OJS для исправления утечки соединений БД:

### 1. ✅ DBConnection.inc.php
- Добавлен метод `cleanup()` для правильного закрытия соединения

### 2. ✅ functions.inc.php  
- Добавлена функция `cleanupDatabaseConnection()` для безопасного вызова cleanup

### 3. ✅ bootstrap.inc.php
- Добавлена регистрация shutdown функции для автоматического вызова cleanup

## Проверка применения

### 1. Проверить, что файлы были модифицированы

```bash
# Проверить временные метки
ls -la /var/www/prod.mia-letum.ru/lib/pkp/classes/db/DBConnection.inc.php
ls -la /var/www/prod.mia-letum.ru/lib/pkp/includes/functions.inc.php
ls -la /var/www/prod.mia-letum.ru/lib/pkp/includes/bootstrap.inc.php

# Проверить наличие нового кода
grep -n "cleanup()" /var/www/prod.mia-letum.ru/lib/pkp/classes/db/DBConnection.inc.php
grep -n "cleanupDatabaseConnection" /var/www/prod.mia-letum.ru/lib/pkp/includes/functions.inc.php
grep -n "register_shutdown_function" /var/www/prod.mia-letum.ru/lib/pkp/includes/bootstrap.inc.php
```

### 2. Проверить синтаксис PHP

```bash
php -l /var/www/prod.mia-letum.ru/lib/pkp/classes/db/DBConnection.inc.php
php -l /var/www/prod.mia-letum.ru/lib/pkp/includes/functions.inc.php
php -l /var/www/prod.mia-letum.ru/lib/pkp/includes/bootstrap.inc.php
```

### 3. Очистить кеш OJS (если используется)

```bash
rm -rf /var/www/prod.mia-letum.ru/cache/*
```

### 4. Очистить memcache

```bash
# Через telnet
echo "flush_all" | nc localhost 11211

# Или через memcached-tool
memcached-tool localhost:11211 flush
```

## Проверка эффективности фикса

### PostgreSQL

**До фикса** (проблема):
```sql
SELECT state, count(*) FROM pg_stat_activity GROUP BY state;
 state | count 
-------+-------
 idle  |   450
 active|     5
```

**После фикса** (должно быть лучше):
```sql
SELECT state, count(*) FROM pg_stat_activity GROUP BY state;
 state | count 
-------+-------
 idle  |    10
 active|     2
```

### MySQL

**До фикса** (проблема):
```bash
mysql> SHOW PROCESSLIST;
# Много строк с Command = 'Sleep'
```

**После фикса** (должно быть лучше):
```bash
mysql> SHOW PROCESSLIST;
# Намного меньше Sleep процессов
```

## Мониторинг в реальном времени

### PostgreSQL

```bash
# Смотреть количество соединений каждую секунду
watch -n 1 "psql -U journals_sandbox -d rcsi_prod -c \
    \"SELECT state, count(*) FROM pg_stat_activity GROUP BY state;\""
```

### MySQL

```bash
# Смотреть количество соединений каждую секунду
watch -n 1 "mysql -u journals_sandbox -p -e \
    \"SELECT count(*) as total_connections FROM information_schema.processlist; \
     SHOW PROCESSLIST WHERE command != 'Sleep' LIMIT 5;\""
```

## Рекомендуемые дополнительные конфигурации

### Для PostgreSQL с pgbouncer

Отредактировать `/etc/pgbouncer/pgbouncer.ini`:

```ini
[pgbouncer]
pool_mode = transaction
max_client_conn = 1000
default_pool_size = 25
min_pool_size = 10
server_lifetime = 3600
server_idle_timeout = 600
```

Перезагрузить:
```bash
sudo systemctl restart pgbouncer
```

### Для MySQL

Отредактировать `/etc/mysql/my.cnf`:

```ini
[mysqld]
wait_timeout = 28800
interactive_timeout = 28800
max_connections = 500
```

Перезагрузить:
```bash
sudo systemctl restart mysql
```

## Откат в случае проблем

Если что-то пошло не так:

```bash
# Восстановить из git (если есть)
cd /var/www/prod.mia-letum.ru
git checkout lib/pkp/classes/db/DBConnection.inc.php
git checkout lib/pkp/includes/functions.inc.php
git checkout lib/pkp/includes/bootstrap.inc.php

# Или восстановить из бекапа
cp /var/backups/DBConnection.inc.php.bak lib/pkp/classes/db/DBConnection.inc.php
cp /var/backups/functions.inc.php.bak lib/pkp/includes/functions.inc.php
cp /var/backups/bootstrap.inc.php.bak lib/pkp/includes/bootstrap.inc.php
```

## Ожидаемые результаты

После применения фикса:

✅ Idle соединения больше не накапливаются
✅ Производительность приложения улучшится
✅ Нагрузка на БД снизится
✅ Меньше timeout ошибок
✅ Клиенты перестанут ждать в очереди

## Поддержка

Если проблемы остаются:

1. Проверьте логи ошибок: `/var/log/apache2/error.log` или `/var/log/nginx/error.log`
2. Проверьте логи БД:
   - PostgreSQL: `SHOW log_directory;`
   - MySQL: `SHOW VARIABLES LIKE 'log_error';`
3. Проверьте, что фиксы были применены правильно: `grep cleanup <файлы>`
4. Очистите кеш и перезагрузите приложение

## Контрольный список

- [ ] Файлы модифицированы правильно
- [ ] PHP синтаксис проверен
- [ ] Кеш очищен
- [ ] Приложение протестировано
- [ ] БД соединения проверены
- [ ] Мониторинг настроен
- [ ] Дополнительные конфигурации применены
