# Настройка MSSQL под 1С

### Настройки экземпляра SQL Server

#### Max Server Memory

Обязательно ограничить память SQL Server.

Причина:

- SQL Server по умолчанию может занять практически всю доступную память.
- Необходимо оставить память для ОС, служб 1С (ragent, rmngr, rphost), резервного копирования и других сервисов.

Рекомендация:

- Не оставлять значение по умолчанию.
- Выделять SQL Server не более 70–85% оперативной памяти сервера.
- На серверах, где размещены и SQL Server, и сервер 1С, оставлять дополнительный запас памяти для процессов 1С.

---

#### MAXDOP

Рекомендация:

```sql
EXEC sp_configure 'max degree of parallelism', 1;
RECONFIGURE;
```

Причина:

- Большинство нагрузок 1С являются OLTP-нагрузками.
- Параллельные планы часто создают дополнительную конкуренцию за CPU.
- MAXDOP = 1 обычно обеспечивает более стабильную производительность.

---

#### Cost Threshold for Parallelism

Рекомендация:

```sql
EXEC sp_configure 'cost threshold for parallelism', 50;
RECONFIGURE;
```

Причина:

- Исключает попытки распараллеливания небольших запросов.
- Особенно полезно, если MAXDOP впоследствии будет увеличен.

---

#### Optimize for Ad Hoc Workloads

Рекомендация:

```sql
EXEC sp_configure 'optimize for ad hoc workloads', 1;
RECONFIGURE;
```

Причина:

- 1С генерирует большое количество динамических SQL-запросов.
- Уменьшается засорение Plan Cache одноразовыми планами выполнения.

---

#### Backup Compression

Рекомендация:

```sql
EXEC sp_configure 'backup compression default', 1;
RECONFIGURE;
```

Причина:

- Снижает требования к дисковой подсистеме.
- Уменьшает размер резервных копий.

---

#### Remote Admin Connections

Рекомендация:

```sql
EXEC sp_configure 'remote admin connections', 1;
RECONFIGURE;
```

Причина:

- Позволяет подключиться через DAC при аварийных ситуациях.

---

### Настройка TempDB

#### Количество файлов

Рекомендация:

- От 1 до 8 одинаковых файлов данных.
- Обычно количество файлов равно количеству логических CPU, но не более 8.
- При отсутствии проблем допустимо начинать с 4 файлов.

Причина:

- Снижается конкуренция за служебные страницы TempDB.

---

#### Размер файлов

Рекомендация:

- Все файлы данных должны иметь одинаковый размер.
- Все файлы должны иметь одинаковый FILEGROWTH.

Причина:

- SQL Server равномерно распределяет нагрузку между файлами.

---

#### Авторасширение

Рекомендация:

- Использовать фиксированный размер роста.
- Не использовать процентный рост.

Пример:

```sql
FILEGROWTH = 512MB
```

Причина:

- Предсказуемое потребление дискового пространства.
- Отсутствие огромных скачков размера файлов.

---

#### Размещение TempDB

Рекомендация:

- Размещать на быстром SSD/NVMe.
- По возможности отдельно от пользовательских баз и журналов транзакций.

Причина:

- TempDB активно используется SQL Server и 1С.

---

### Настройка баз 1С

#### Recovery Model

Продуктивная база:

```sql
ALTER DATABASE [ИмяБазы]
SET RECOVERY FULL;
```

Причина:

- Позволяет выполнять восстановление на момент времени.

Важно:

- Требуется регулярный backup журнала транзакций.

---

#### Page Verify

Рекомендация:

```sql
ALTER DATABASE [ИмяБазы]
SET PAGE_VERIFY CHECKSUM;
```

Причина:

- Позволяет обнаруживать повреждение страниц данных.

---

#### Статистики

Рекомендация:

```sql
ALTER DATABASE [ИмяБазы]
SET AUTO_CREATE_STATISTICS ON;

ALTER DATABASE [ИмяБазы]
SET AUTO_UPDATE_STATISTICS ON;
```

Причина:

- Оптимизатор SQL Server строит более качественные планы запросов.

---

#### Auto Shrink

Рекомендация:

```sql
ALTER DATABASE [ИмяБазы]
SET AUTO_SHRINK OFF;
```

Причина:

- Автоматическое сжатие вызывает фрагментацию и дополнительную нагрузку.

---

#### Auto Close

Рекомендация:

```sql
ALTER DATABASE [ИмяБазы]
SET AUTO_CLOSE OFF;
```

Причина:

- Исключаются лишние операции открытия и закрытия базы.

---

#### Рост файлов базы

Рекомендация:

- Использовать фиксированный FILEGROWTH.
- Не использовать процентный рост.

Пример:

```sql
FILEGROWTH = 1024MB
```

Причина:

- Более предсказуемая работа файловой системы.
- Меньше фрагментация файлов БД.

---

### Дополнительные рекомендации

#### Lock Pages In Memory

Рекомендуется включать для службы SQL Server.

Причина:

- Предотвращает вытеснение буферного кэша SQL Server операционной системой.

---

#### Антивирус

Исключить из проверки:

- MDF
- NDF
- LDF
- BAK
- TRN
- каталоги данных SQL Server

Причина:

- Исключение лишней нагрузки на дисковую подсистему.

---

#### Обслуживание

Необходимо регулярно выполнять:

- Backup Full
- Backup Differential
- Backup Log
- Обновление статистик
- Контроль фрагментации индексов
- Проверку целостности (DBCC CHECKDB)

---

### Что обычно проверяю первым при проблемах 1С

1. Ожидания SQL Server (Wait Statistics).
2. Размер и загрузку TempDB.
3. Блокировки.
4. Настройки памяти SQL Server.
5. План выполнения проблемного запроса.
6. Фрагментацию индексов.
7. Актуальность статистик.
8. Скорость дисковой подсистемы.