Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
optimizacija_nastroek_ms_sql [2026/04/22 10:52] tro [Рекомендации] |
optimizacija_nastroek_ms_sql [2026/04/25 12:06] (текущий) tro |
||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | ====== Настройки | + | ====== Налаштування |
| - | ===== Рекомендации ===== | + | ===== Рекомендації ===== |
| - | - Пам' | + | - **Пам' |
| - | - MAXDOP = 1 — жорстке правило для будь-якого сервера 1С. Платформа генерує сотні коротких запитів, | + | - **MAXDOP = 1** — жорстке правило для будь-якого сервера 1С. Платформа генерує сотні коротких запитів, |
| - | - Cost threshold = 25 — дефолтне значення Microsoft (5) встановлено в 1990-х під залізо того часу. На сучасному сервері запит вартістю 5 виконується за мікросекунди — будувати для нього паралельний план безглуздо. Значення 25 відсікає 95% коротких запитів 1С від непотрібного аналізу паралелізму. | + | - **Cost threshold = 25** — дефолтне значення Microsoft (5) встановлено в 1990-х під залізо того часу. На сучасному сервері запит вартістю 5 виконується за мікросекунди — будувати для нього паралельний план безглуздо. Значення 25 відсікає 95% коротких запитів 1С від непотрібного аналізу паралелізму. |
| - | - Optimize for ad hoc = 1 — без цього кожен унікальний запит 1С зберігає повний план у plan cache. При 7 базах і сотнях користувачів plan cache засмічується гігабайтами одноразових планів. | + | - **Optimize for ad hoc = 1** — без цього кожен унікальний запит 1С зберігає повний план у plan cache. При 7 базах і сотнях користувачів plan cache засмічується гігабайтами одноразових планів. |
| - | - Network packet size = 8192 — актуально коли SQL і 1С сервер на одній машині або в одній мережі. Зменшує кількість мережевих пакетів при передачі великих наборів даних — звіти, великі списки документів. | + | - **Network packet size = 8192** — актуально коли SQL і 1С сервер на одній машині або в одній мережі. Зменшує кількість мережевих пакетів при передачі великих наборів даних — звіти, великі списки документів. |
| - | - Blocked process threshold = 5 — не впливає на продуктивність, | + | - **Blocked process threshold = 5** — не впливає на продуктивність, |
| + | - **TempDB — розташування і кількість файлів** - TempDB обов' | ||
| + | - **Автозріст файлів баз 1С (FILEGROWTH)** — аварійний механізм на випадок якщо файл несподівано заповнився. Під час автозросту SQL зупиняє всі операції запису в базу — користувачі 1С відчувають зависання. Чим більший крок зросту — тим рідше це відбувається.Рекомендовані значення: | ||
| + | - Для планів обслуговування баз SQL краще користуватись [[https:// | ||
| - | ===== Скрипты sql ===== | + | ===== Скрипти sql ===== |
| < | < | ||
| -- Перевіримо поточний стан | -- Перевіримо поточний стан | ||
| Строка 27: | Строка 30: | ||
| ORDER BY name; | ORDER BY name; | ||
| </ | </ | ||
| - | ====== рекомендуемые настройки для каждой базы в SQL ====== | + | < |
| + | -- ============================================================ | ||
| + | -- VTSQLMAIN — еталонні параметри SQL Server | ||
| + | -- RAM: 185 GB | vCPU: 27 | Windows Server 2025 Datacenter | ||
| + | -- 1C 8.3.27 | 7 баз | ||
| + | -- ============================================================ | ||
| + | |||
| + | EXEC sp_configure 'show advanced options', | ||
| + | RECONFIGURE; | ||
| + | |||
| + | -- ПАМ' | ||
| + | -- 95 GB для SQL (51% від 185 GB) | ||
| + | -- Залишок: 40 GB для 1С + 8 GB ОС + 5 GB резерв = 80% загалом | ||
| + | EXEC sp_configure 'max server memory (MB)', 97280; | ||
| + | EXEC sp_configure 'min server memory (MB)', 4096; | ||
| + | RECONFIGURE WITH OVERRIDE; | ||
| + | |||
| + | -- ПАРАЛЕЛІЗМ | ||
| + | -- MAXDOP = 1 — для 1С завжди, | ||
| + | -- cost threshold = 25 — не будувати паралельний план для легких запитів | ||
| + | EXEC sp_configure 'max degree of parallelism', | ||
| + | EXEC sp_configure 'cost threshold for parallelism', | ||
| + | RECONFIGURE; | ||
| + | |||
| + | -- PLAN CACHE | ||
| + | -- Економія пам' | ||
| + | -- при першому виклику унікального запиту 1С | ||
| + | EXEC sp_configure ' | ||
| + | RECONFIGURE; | ||
| + | |||
| + | -- МЕРЕЖА | ||
| + | -- 8192 замість дефолтних 4096 — менше round-trip | ||
| + | -- при передачі великих результатів від SQL до 1С сервера | ||
| + | EXEC sp_configure ' | ||
| + | RECONFIGURE; | ||
| + | |||
| + | -- МОНІТОРИНГ БЛОКУВАНЬ | ||
| + | -- 5 секунд — фіксує запити що висять довше 5 сек | ||
| + | -- видно через Extended Events або SQL Profiler | ||
| + | EXEC sp_configure ' | ||
| + | RECONFIGURE; | ||
| + | |||
| + | -- БЕЗПЕКА | ||
| + | -- Ніколи не вмикати для | ||
| + | EXEC sp_configure ' | ||
| + | EXEC sp_configure ' | ||
| + | RECONFIGURE; | ||
| + | |||
| + | EXEC sp_configure 'show advanced options', | ||
| + | RECONFIGURE; | ||
| + | </ | ||
| + | ====== рекомендовані налаштування | ||
| * READ_COMMITTED_SNAPSHOT - Усуває блокування між читанням і записом | * READ_COMMITTED_SNAPSHOT - Усуває блокування між читанням і записом | ||
| * ALLOW_SNAPSHOT_ISOLATION - Дозволяє 1С використовувати версіонування в транзакціях | * ALLOW_SNAPSHOT_ISOLATION - Дозволяє 1С використовувати версіонування в транзакціях | ||
| Строка 33: | Строка 87: | ||
| * AUTO_CREATE_STATISTICS - Оптимізатор не " | * AUTO_CREATE_STATISTICS - Оптимізатор не " | ||
| * PAGE_VERIFY CHECKSUM - Захист від тихого пошкодження даних | * PAGE_VERIFY CHECKSUM - Захист від тихого пошкодження даних | ||
| - | * AUTO_UPDATE_STATISTICS_ASYNC - Вмикаэ асинхонне оновлення статистики без пауз для користувачів | + | * AUTO_UPDATE_STATISTICS_ASYNC - Вмикає асинхонне оновлення статистики без пауз для користувачів |
| + | <WRAP center round important 60%> | ||
| + | Більшість цих параметрів зберігаються в самій базі тому при відновленні з бекапу з іншими налаштуваннями потрібно по новому їх встановлювати | ||
| + | </ | ||
| < | < | ||
| Строка 141: | Строка 199: | ||
| ORDER BY name; | ORDER BY name; | ||
| </ | </ | ||
| - | ====== Полезные ссылки ====== | + | < |
| - | * https:// | + | -- ============================================================ |
| + | -- ВІДКАТ параметрів баз 1С до стандартних значень SQL Server | ||
| + | -- Запускати при проблемах після увімкнення RCSI / Snapshot | ||
| + | -- ============================================================ | ||
| + | |||
| + | USE master; | ||
| + | |||
| + | DECLARE @dbname NVARCHAR(128); | ||
| + | DECLARE @sql NVARCHAR(MAX); | ||
| + | |||
| + | DECLARE db_cursor CURSOR FOR | ||
| + | SELECT name | ||
| + | FROM sys.databases | ||
| + | WHERE database_id > 4 | ||
| + | AND state_desc = ' | ||
| + | AND name NOT IN (' | ||
| + | ORDER BY name; | ||
| + | |||
| + | OPEN db_cursor; | ||
| + | FETCH NEXT FROM db_cursor INTO @dbname; | ||
| + | |||
| + | WHILE @@FETCH_STATUS = 0 | ||
| + | BEGIN | ||
| + | PRINT '>>> | ||
| + | |||
| + | -- AUTO_UPDATE_STATISTICS_ASYNC → OFF (дефолт) | ||
| + | SET @sql = 'ALTER DATABASE [' + @dbname + '] SET AUTO_UPDATE_STATISTICS_ASYNC OFF;'; | ||
| + | EXEC sp_executesql @sql; | ||
| + | PRINT ' | ||
| + | |||
| + | -- ALLOW_SNAPSHOT_ISOLATION → OFF (дефолт) | ||
| + | SET @sql = 'ALTER DATABASE [' + @dbname + '] SET ALLOW_SNAPSHOT_ISOLATION OFF;'; | ||
| + | EXEC sp_executesql @sql; | ||
| + | PRINT ' | ||
| + | |||
| + | -- READ_COMMITTED_SNAPSHOT → OFF (дефолт, | ||
| + | SET @sql = 'ALTER DATABASE [' + @dbname + '] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;'; | ||
| + | EXEC sp_executesql @sql; | ||
| + | |||
| + | SET @sql = 'ALTER DATABASE [' + @dbname + '] SET READ_COMMITTED_SNAPSHOT OFF;'; | ||
| + | EXEC sp_executesql @sql; | ||
| + | |||
| + | SET @sql = 'ALTER DATABASE [' + @dbname + '] SET MULTI_USER;'; | ||
| + | EXEC sp_executesql @sql; | ||
| + | PRINT ' | ||
| + | |||
| + | -- AUTO_UPDATE_STATISTICS → ON (дефолт, | ||
| + | -- AUTO_CREATE_STATISTICS → ON (дефолт, | ||
| + | -- PAGE_VERIFY → залишаємо CHECKSUM (краще ніж дефолт NONE) | ||
| + | |||
| + | PRINT ' | ||
| + | PRINT ''; | ||
| + | |||
| + | FETCH NEXT FROM db_cursor INTO @dbname; | ||
| + | END; | ||
| + | |||
| + | CLOSE db_cursor; | ||
| + | DEALLOCATE db_cursor; | ||
| + | |||
| + | PRINT ' | ||
| + | PRINT ' | ||
| + | PRINT ' | ||
| + | |||
| + | -- Фінальна перевірка | ||
| + | SELECT | ||
| + | name AS база, | ||
| + | is_auto_update_stats_on | ||
| + | is_auto_update_stats_async_on | ||
| + | is_auto_create_stats_on | ||
| + | page_verify_option_desc | ||
| + | snapshot_isolation_state_desc | ||
| + | is_read_committed_snapshot_on | ||
| + | FROM sys.databases | ||
| + | WHERE database_id > 4 | ||
| + | AND state_desc = ' | ||
| + | ORDER BY name; | ||
| + | </ | ||
| + | <WRAP center round info 60%> | ||
| + | AUTO_UPDATE_STATISTICS, | ||
| + | </ | ||
| + | ====== Вимкнення FILESTREAM ====== | ||
| + | Реальний ефект буде мінімальний для кінцевих користувачів. Головне що він не буде створювати зайвий фоновий процес і не буде займати ресурси без жодної користі для 1С. | ||
| + | < | ||
| + | -- Вимкнути FILESTREAM — не потрібен для 1С | ||
| + | EXEC sp_configure ' | ||
| + | RECONFIGURE; | ||
| + | </ | ||
| + | < | ||
| + | -- Перевірка | ||
| + | EXEC sp_configure ' | ||
| + | -- run_value має стати 0 | ||
| + | </ | ||
| + | |||
| + | ====== Налаштування 1C ====== | ||
| + | ===== Підключення кластера 1С до баз SQL ===== | ||
| + | замість localhost (протокола TCP/IP) краще використовувати sharedmemory. Перевірка поточного протоколу підключення | ||
| + | < | ||
| + | SELECT | ||
| + | s.program_name, | ||
| + | c.net_transport, | ||
| + | c.client_net_address, | ||
| + | COUNT(*) AS кількість | ||
| + | FROM sys.dm_exec_sessions s | ||
| + | JOIN sys.dm_exec_connections c ON s.session_id = c.session_id | ||
| + | WHERE s.program_name LIKE ' | ||
| + | OR s.program_name LIKE ' | ||
| + | OR s.program_name LIKE ' | ||
| + | GROUP BY s.program_name, | ||
| + | ORDER BY кількість DESC; | ||
| + | </ | ||
| + | Якщо "net transport" | ||
| + | {{ : | ||
| + | |||
| + | ====== Корисні посилання | ||
| + | * [[https:// | ||
| + | * [[https:// | ||