optimizacija_nastroek_ms_sql

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
optimizacija_nastroek_ms_sql [2026/04/22 11:00]
tro
optimizacija_nastroek_ms_sql [2026/04/25 12:06] (текущий)
tro
Строка 8: Строка 8:
   - **Network packet size = 8192** — актуально коли SQL і 1С сервер на одній машині або в одній мережі. Зменшує кількість мережевих пакетів при передачі великих наборів даних — звіти, великі списки документів.   - **Network packet size = 8192** — актуально коли SQL і 1С сервер на одній машині або в одній мережі. Зменшує кількість мережевих пакетів при передачі великих наборів даних — звіти, великі списки документів.
   - **Blocked process threshold = 5** — не впливає на продуктивність, тільки вмикає моніторинг. Без цього параметра неможливо діагностувати блокування в 1С через стандартні інструменти SQL.   - **Blocked process threshold = 5** — не впливає на продуктивність, тільки вмикає моніторинг. Без цього параметра неможливо діагностувати блокування в 1С через стандартні інструменти SQL.
 +  - **TempDB — розташування і кількість файлів** - TempDB обов'язково розміщувати на найшвидшому диску — окремо від системного диску C: і окремо від файлів баз 1С. На VMware це означає окремий NVMe датастор. Кількість файлів даних = кількість vCPU але не більше 8. При 27 vCPU — 8 файлів. Всі файли даних однакового розміру — SQL розподіляє навантаження між ними рівномірно тільки якщо розміри рівні.
 +  - **Автозріст файлів баз 1С (FILEGROWTH)** — аварійний механізм на випадок якщо файл несподівано заповнився. Під час автозросту SQL зупиняє всі операції запису в базу — користувачі 1С відчувають зависання. Чим більший крок зросту — тим рідше це відбувається.Рекомендовані значення: 8 файлів даних × 4096 MB = 32 GB, 1 файл логу × 2048 MB, Автозріст: 512 MB для даних, 256 MB для логу Файл даних (.mdf, .ndf)
 +  - Для планів обслуговування баз SQL краще користуватись [[https://ola.hallengren.com/|набір T-SQL скриптів DBA Ola Hallengren]] 
  
 ===== Скрипти sql ===== ===== Скрипти sql =====
Строка 84: Строка 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%> 
 +Більшість цих параметрів зберігаються в самій базі тому при відновленні з бекапу з іншими налаштуваннями потрібно по новому їх встановлювати 
 +</WRAP> 
  
 <code> <code>
Строка 193: Строка 199:
 ORDER BY name; ORDER BY name;
 </code> </code>
 +<code>
 +-- ============================================================
 +-- ВІДКАТ параметрів баз 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 = 'ONLINE'
 +      AND name NOT IN ('distribution')
 +    ORDER BY name;
 +
 +OPEN db_cursor;
 +FETCH NEXT FROM db_cursor INTO @dbname;
 +
 +WHILE @@FETCH_STATUS = 0
 +BEGIN
 +    PRINT '>>> Відкат бази: ' + @dbname;
 +
 +    -- AUTO_UPDATE_STATISTICS_ASYNC → OFF (дефолт)
 +    SET @sql = 'ALTER DATABASE [' + @dbname + '] SET AUTO_UPDATE_STATISTICS_ASYNC OFF;';
 +    EXEC sp_executesql @sql;
 +    PRINT '    AUTO_UPDATE_STATISTICS_ASYNC  OFF';
 +
 +    -- ALLOW_SNAPSHOT_ISOLATION → OFF (дефолт)
 +    SET @sql = 'ALTER DATABASE [' + @dbname + '] SET ALLOW_SNAPSHOT_ISOLATION OFF;';
 +    EXEC sp_executesql @sql;
 +    PRINT '    ALLOW_SNAPSHOT_ISOLATION      OFF';
 +
 +    -- READ_COMMITTED_SNAPSHOT → OFF (дефолт, потребує SINGLE_USER)
 +    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 '    READ_COMMITTED_SNAPSHOT       OFF';
 +
 +    -- AUTO_UPDATE_STATISTICS → ON (дефолт, не змінюємо — вже був ON)
 +    -- AUTO_CREATE_STATISTICS → ON (дефолт, не змінюємо — вже був ON)
 +    -- PAGE_VERIFY → залишаємо CHECKSUM (краще ніж дефолт NONE)
 +
 +    PRINT '    OK';
 +    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         AS auto_update,
 +    is_auto_update_stats_async_on   AS auto_async,
 +    is_auto_create_stats_on         AS auto_create,
 +    page_verify_option_desc         AS page_verify,
 +    snapshot_isolation_state_desc   AS snapshot,
 +    is_read_committed_snapshot_on   AS rcsi
 +FROM sys.databases
 +WHERE database_id > 4
 +  AND state_desc = 'ONLINE'
 +ORDER BY name;
 +</code>
 +<WRAP center round info 60%>
 +AUTO_UPDATE_STATISTICS, AUTO_CREATE_STATISTICS і PAGE_VERIFY CHECKSUM не відкочуємо — вони або вже були увімкнені до нас (AUTO_*), або є корисними незалежно від проблеми (CHECKSUM). Відкочуємо тільки три параметри які реально змінили поведінку бази.
 +</WRAP>
 +====== Вимкнення FILESTREAM ======
 +Реальний ефект буде мінімальний для кінцевих користувачів. Головне що він не буде створювати зайвий фоновий процес і не буде займати ресурси без жодної користі для 1С.
 +<code>
 +-- Вимкнути FILESTREAM — не потрібен для 1С
 +EXEC sp_configure 'filestream access level', 0;
 +RECONFIGURE;
 +</code>
 +<code>
 +-- Перевірка
 +EXEC sp_configure 'filestream access level';
 +-- run_value має стати 0
 +</code>
 +
 +====== Налаштування 1C ======
 +===== Підключення кластера 1С до баз SQL =====
 +замість localhost (протокола TCP/IP) краще використовувати sharedmemory. Перевірка поточного протоколу підключення
 +<code>
 +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 '%1C%'
 +   OR s.program_name LIKE '%1cv8%'
 +   OR s.program_name LIKE '%Enterprise%'
 +GROUP BY s.program_name, c.net_transport, c.client_net_address
 +ORDER BY кількість DESC;
 +</code>
 +Якщо "net transport" не написав "sharedmemory" то в консолі 1С налаштування підключення кластера то SQL краще писати підключення "**lpc:VTSQLMAIN**"
 +{{ :1cbasesharedmemory.png?600 |}}
 +
 ====== Корисні посилання ====== ====== Корисні посилання ======
-  * https://its.1c.ru/db/metod8dev/content/5904/hdoc+  * [[https://its.1c.ru/db/metod8dev/content/5904/hdoc|Офіційні рекомендації ITS]] 
 +  * [[https://ola.hallengren.com/|Набір T-SQL скриптів обслуговування SQL DBA Ola Hallengren]]
  
  • /sites/data/attic/optimizacija_nastroek_ms_sql.1776855622.txt.gz
  • Последнее изменение: 2026/04/22 11:00
  • tro