РСгистры свСдСний Π² 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых вострСбованных ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΈ интСнсивной записи Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ) ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ°Π΄Π°Ρ‚ΡŒ Π² дСсятки Ρ€Π°Π·. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ симптомы: "подвисаСт" интСрфСйс, ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΌΠΈΠ½ΡƒΡ‚Π°ΠΌΠΈ, Π° Π½ΠΎΡ‡Π½Ρ‹Π΅ Ρ€Π΅Π³Π»Π°ΠΌΠ΅Π½Ρ‚Π½Ρ‹Π΅ задания Π½Π΅ ΡƒΡΠΏΠ΅Π²Π°ΡŽΡ‚ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ ΠΊ ΡƒΡ‚Ρ€Ρƒ. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΎΠ² ΠΊΡ€ΠΎΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΈ Π² Π½Π΅ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅.

Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ запись Π² рСгистры свСдСний Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ 7 практичСских способов ускорСния β€” ΠΎΡ‚ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… настроСк Π΄ΠΎ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΈΠΊ программирования. ΠœΡ‹ рассмотрим ΠΊΠ°ΠΊ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ (подходящиС для Π»ΡŽΠ±Ρ‹Ρ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ), Ρ‚Π°ΠΊ ΠΈ спСцифичСскиС ΠΏΡ€ΠΈΡ‘ΠΌΡ‹ для 1Π‘:ERP, 1Π‘:Π£Π’ ΠΈ 1Π‘:Π‘ΡƒΡ…Π³Π°Π»Ρ‚Π΅Ρ€ΠΈΠΈ. ВсС Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ протСстированы Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Π±Π°Π·Π°Ρ… с ΠΎΠ±ΡŠΡ‘ΠΌΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ 100 тыс. Π΄ΠΎ 10 ΠΌΠ»Π½ записСй.

Π’Π°ΠΆΠ½ΠΎ: оптимизация всСгда Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ баланса ΠΌΠ΅ΠΆΠ΄Ρƒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ ΠΈ Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ. НСкоторыС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ ΠΈΠ»ΠΈ использованиС прямых SQL-запросов) ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ цСлостности Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ. ΠŸΠ΅Ρ€Π΅Π΄ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ протСстируйтС ΠΈΡ… Π½Π° ΠΊΠΎΠΏΠΈΠΈ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π±Π°Π·Ρ‹!

1. Диагностика ΡƒΠ·ΠΊΠΈΡ… мСст: инструмСнты ΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚. Π’ 90% случаСв ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° кроСтся Π½Π΅ Π² самом рСгистрС, Π° Π² ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… процСссах: Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°Ρ…, Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π°Ρ… ΠΈΠ»ΠΈ нСэффСктивных запросах. Для Π°Π½Π°Π»ΠΈΠ·Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅:

  • πŸ” ВСхнологичСский ΠΆΡƒΡ€Π½Π°Π» 1Π‘ β€” Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ событий с ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ Π΄Π΅Ρ‚Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Debug ΠΈΠ»ΠΈ Info. ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ DBMSSQL (для MS SQL) ΠΈΠ»ΠΈ DBPGSQL (для PostgreSQL), Π³Π΄Π΅ Ρ„ΠΈΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ всС ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Π΅ запросы.
  • ⏱️ ΠŸΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ запросов β€” встроСнный Π² ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ инструмСнт (мСню АдминистрированиС β†’ ВСстированиС ΠΈ исправлСниС β†’ ΠŸΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ запросов). Он ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ большС 100 мс ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ.
  • πŸ“Š План выполнСния запроса β€” для SQL-сСрвСра ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· SQL Server Management Studio (SSMS) с Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½ΠΎΠΉ ΠΎΠΏΡ†ΠΈΠ΅ΠΉ Include Actual Execution Plan. Π˜Ρ‰ΠΈΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Table Scan (ΠΏΠΎΠ»Π½ΠΎΠ΅ сканированиС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹) вмСсто Index Seek (поиск ΠΏΠΎ индСксу).

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ стоит ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ:

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ
ВрСмя записи ΠΎΠ΄Π½ΠΎΠΉ строки< 50 мс> 500 ΠΌΡΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ индСксы ΠΈΠ»ΠΈ ΠΊΠΎΠ΄
ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Π² сСкунду< 10> 100Π Π°Π·Π±ΠΈΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹
ΠžΠ±ΡŠΡ‘ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†< 100 ΠœΠ‘> 1 Π“Π‘ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ запросы с JOIN
Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° CPU сСрвСра< 30%> 80%ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ

Если Π² тСхнологичСском ΠΆΡƒΡ€Π½Π°Π»Π΅ Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ ошибки Π²ΠΈΠ΄Π° Timeout expired ΠΈΠ»ΠΈ Deadlock, это сигнал ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… с Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·Π΄Π΅Π» 4 этой ΡΡ‚Π°Ρ‚ΡŒΠΈ, посвящённый транзакциям.

πŸ“Š Какой инструмСнт диагностики Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‡Π°Ρ‰Π΅?
ВСхнологичСский ΠΆΡƒΡ€Π½Π°Π»
ΠŸΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€ запросов 1Π‘
SQL Server Profiler
Π”Ρ€ΡƒΠ³ΠΎΠ΅

2. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ структуры рСгистра: индСксы ΠΈ измСрСния

ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ спроСктированная структура рСгистра свСдСний ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚ΡŒ запись Π² 10-50 Ρ€Π°Π·. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹:

  • 🚫 ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ индСксов Π½Π° часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… измСрСниях. НапримСр, Ссли Π²Ρ‹ рСгулярно ΠΈΡ‰Π΅Ρ‚Π΅ записи ΠΏΠΎ Π”Π°Ρ‚Π° ΠΈ НомСнклатура, Π½ΠΎ индСкс создан Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ Π΄Π°Ρ‚Π΅, запрос Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всю Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ.
  • πŸ”„ Π˜Π·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ измСрСния. КаТдоС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ индСкса ΠΈ замСдляСт вставку. Если ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² 5% запросов, пСрСнСситС Π΅Π³ΠΎ Π² рСсурсы ΠΈΠ»ΠΈ создайтС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ рСгистр.
  • πŸ“ ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ порядок ΠΏΠΎΠ»Π΅ΠΉ Π² индСксС. ПолС, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Ρ‡Π°Ρ‰Π΅ всСго Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅, Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΡ‚ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π² составном индСксС.

Как ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ:

  1. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² свойства рСгистра свСдСний (ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ β†’ РСгистры свСдСний β†’ [Π’Π°Ρˆ рСгистр]).
  2. На Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Π˜Π½Π΄Π΅ΠΊΡΡ‹ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ составной индСкс ΠΏΠΎ полям, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‡Π°Ρ‰Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² условиях Π“Π”Π•. НапримСр, для рСгистра Ρ†Π΅Π½ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π΅Π½ индСкс ΠΏΠΎ (НомСнклатура, Π”Π°Ρ‚Π°, Π’ΠΈΠΏΠ¦Π΅Π½).
  3. Π£Π΄Π°Π»ΠΈΡ‚Π΅ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ измСрСния ΠΈΠ»ΠΈ пСрСнСситС ΠΈΡ… Π² рСсурсы. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅: ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ строки Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ индСкса для рСгистра остатков Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ²:

// Π”ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ (ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ поиск ΠΏΠΎ Π½ΠΎΠΌΠ΅Π½ΠΊΠ»Π°Ρ‚ΡƒΡ€Π΅)

ИндСкс ΠΏΠΎ: Π”Π°Ρ‚Π°

// ПослС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ (ускорСниС Π² 5-10 Ρ€Π°Π·)

ИндСкс ΠΏΠΎ: (НомСнклатура, Π”Π°Ρ‚Π°, Π‘ΠΊΠ»Π°Π΄)

πŸ’‘

Если Π² рСгистрС Π±ΠΎΠ»Π΅Π΅ 5 ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ, рассмотритС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΅Π³ΠΎ раздСлСния Π½Π° Π΄Π²Π° рСгистра: ΠΎΠ΄ΠΈΠ½ для часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, Π΄Ρ€ΡƒΠ³ΠΎΠΉ β€” для Ρ€Π΅Π΄ΠΊΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ².

3. Массовая запись: ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ vs. построчная вставка

Один ΠΈΠ· самых распространённых "ΡƒΠ±ΠΈΠΉΡ† ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ" β€” построчная запись Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ†ΠΈΠΊΠ»Π΅. НапримСр, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄:

Для КаТдого Π‘Ρ‚Ρ€ΠΎΠΊΠ° Из Π’Π°Π±Π»ΠΈΡ†Π°Π¦Π΅Π½ Π¦ΠΈΠΊΠ»

Π—Π°ΠΏΠΈΡΡŒ = РСгистрыБвСдСний.ЦСныНомСнклатуры.Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒΠ—Π°ΠΏΠΈΡΡŒ();

Π—Π°ΠΏΠΈΡΡŒ.НомСнклатура = Π‘Ρ‚Ρ€ΠΎΠΊΠ°.НомСнклатура;

Π—Π°ΠΏΠΈΡΡŒ.Π”Π°Ρ‚Π° = Π‘Ρ‚Ρ€ΠΎΠΊΠ°.Π”Π°Ρ‚Π°;

Π—Π°ΠΏΠΈΡΡŒ.Π¦Π΅Π½Π° = Π‘Ρ‚Ρ€ΠΎΠΊΠ°.Π¦Π΅Π½Π°;

Π—Π°ΠΏΠΈΡΡŒ.Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ();

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Π½Π° Π±Π°Π·Π΅ с 10 000 строк Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² 100-500 Ρ€Π°Π· ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ пакСтная запись.

РСшСниС β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΡƒΡŽ модСль записи ΠΈΠ»ΠΈ запрос с конструктором Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°:

// Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 1: ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Π°Ρ модСль (рСкомСндуСтся для 1Π‘ 8.3.10+)

Π—Π°ΠΏΠΈΡΡŒ = РСгистрыБвСдСний.ЦСныНомСнклатуры.Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π—Π°ΠΏΠΈΡΠΈ();

Для КаТдого Π‘Ρ‚Ρ€ΠΎΠΊΠ° Из Π’Π°Π±Π»ΠΈΡ†Π°Π¦Π΅Π½ Π¦ΠΈΠΊΠ»

Π—Π°ΠΏΠΈΡΡŒ.ΠΠΎΠ²Π°ΡΠ—Π°ΠΏΠΈΡΡŒ();

Π—Π°ΠΏΠΈΡΡŒ.НомСнклатура = Π‘Ρ‚Ρ€ΠΎΠΊΠ°.НомСнклатура;

Π—Π°ΠΏΠΈΡΡŒ.Π”Π°Ρ‚Π° = Π‘Ρ‚Ρ€ΠΎΠΊΠ°.Π”Π°Ρ‚Π°;

Π—Π°ΠΏΠΈΡΡŒ.Π¦Π΅Π½Π° = Π‘Ρ‚Ρ€ΠΎΠΊΠ°.Π¦Π΅Π½Π°;

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

Π—Π°ΠΏΠΈΡΡŒ.Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ();

// Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 2: Запрос с конструктором Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° (для слоТных Π΄Π°Π½Π½Ρ‹Ρ…)

Запрос = Новый Запрос;

Запрос.ВСкст =

"ВЫБРАВЬ

| Π’Π°Π±Π»ΠΈΡ†Π°Π¦Π΅Π½.НомСнклатура КАК НомСнклатура,

| Π’Π°Π±Π»ΠΈΡ†Π°Π¦Π΅Π½.Π”Π°Ρ‚Π° КАК Π”Π°Ρ‚Π°,

| Π’Π°Π±Π»ΠΈΡ†Π°Π¦Π΅Π½.Π¦Π΅Π½Π° КАК Π¦Π΅Π½Π°

|Π˜Π—

| &Π’Π°Π±Π»ΠΈΡ†Π°Π¦Π΅Π½ КАК Π’Π°Π±Π»ΠΈΡ†Π°Π¦Π΅Π½";

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = Запрос.Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ().Π’Ρ‹Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ();

РСгистрыБвСдСний.ЦСныНомСнклатуры.Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ(Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚);

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π° Π±Π°Π·Π΅ с 50 000 записСй:

ΠœΠ΅Ρ‚ΠΎΠ΄ записиВрСмя выполнСнияНагрузка Π½Π° сСрвСр
ΠŸΠΎΡΡ‚Ρ€ΠΎΡ‡Π½Π°Ρ запись Π² Ρ†ΠΈΠΊΠ»Π΅45 минутВысокая (ΠΏΠΈΠΊΠΈ CPU)
ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Π°Ρ модСль (ΠΏΠ°ΠΊΠ΅Ρ‚)12 сСкундБрСдняя
Запрос с конструктором8 сСкундНизкая
πŸ’‘

ΠŸΠ°ΠΊΠ΅Ρ‚Π½Π°Ρ запись Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ускоряСт процСсс, Π½ΠΎ ΠΈ сниТаСт количСство Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ риск Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ.

4. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ транзакциями: ΠΊΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ

Π”Π»ΠΈΠ½Π½Ρ‹Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ β€” главная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° "зависаний" ΠΏΡ€ΠΈ записи Π² рСгистры. Випичная ситуация: ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Π» Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π½Π° Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π° Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ пытаСтся Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ‚ΠΎΡ‚ ΠΆΠ΅ рСгистр. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΎΠ±Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π° Π½Π° ΠΌΠΈΠ½ΡƒΡ‚Ρ‹.

ΠŸΡ€Π°Π²ΠΈΠ»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с транзакциями:

  • ⚑ Π‘ΠΎΠΊΡ€Π°Ρ‰Π°ΠΉΡ‚Π΅ врСмя Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ. ВсС ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… (расчёты, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ) Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.
  • πŸ”„ Π Π°Π·Π±ΠΈΠ²Π°ΠΉΡ‚Π΅ большиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΏΠΎ 100-500 строк. НапримСр, ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ 10 000 Ρ†Π΅Π½ Π΄Π΅Π»Π°ΠΉΡ‚Π΅ 20 Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΏΠΎ 500 записСй.
  • πŸ”’ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡƒΡ€ΠΎΠ²Π½ΠΈ изоляции. Для массовых ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Read Uncommitted (Ссли допустимы "грязныС" чтСния).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ:

// 1. ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… Π”Πž Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ

Π’Π°Π±Π»ΠΈΡ†Π°Π”Π°Π½Π½Ρ‹Ρ… = ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒΠ”Π°Π½Π½Ρ‹Π΅Π”Π»ΡΠ—Π°ΠΏΠΈΡΠΈ();

// 2. Начало Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ

ΠΠ°Ρ‡Π°Ρ‚ΡŒΠ’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ();

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ°

// 3. Π—Π°ΠΏΠΈΡΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 200 строк)

РСгистрыБвСдСний.Π¦Π΅Π½Ρ‹.Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ(Π’Π°Π±Π»ΠΈΡ†Π°Π”Π°Π½Π½Ρ‹Ρ….Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ(0, 199));

Π—Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΠ’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ();

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠžΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒΠ’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ();

Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΠ–ΡƒΡ€Π½Π°Π»ΠžΡˆΠΈΠ±ΠΎΠΊ(ОписаниСОшибки());

ΠšΠΎΠ½Π΅Ρ†ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠΈ;

Для критичСски Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, закрытия мСсяца) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹:

  1. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ с Π½ΡƒΠΆΠ½ΠΎΠΉ структурой.
  2. Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ Π² Π½Π΅Ρ‘ Π΄Π°Π½Π½Ρ‹Π΅ Π±Π΅Π· Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ.
  3. Одной Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠ΅ΠΉ пСрСнСситС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² рСгистр.
Π§Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ссли Π½Π΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ?

НСзакрытая транзакция Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π° (Π»ΠΈΠ±ΠΎ ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚Ρƒ сСрвСра, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ 30-60 сСкунд). Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ каскадным Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ "ΠΏΠΎΠ΄Π²Π΅ΡΠΈΡ‚ΡŒ" всю Π±Π°Π·Ρƒ. Π’ SQL Server Ρ‚Π°ΠΊΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π²ΠΈΠ΄Π½Ρ‹ Π² систСмном прСдставлСнии sys.dm_tran_active_transactions.

5. ΠŸΡ€ΡΠΌΡ‹Π΅ SQL-запросы: ΠΊΠΎΠ³Π΄Π° ΠΈ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² записСй) Π΄Π°ΠΆΠ΅ пакСтная запись Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΡƒΡŽ модСль Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ нСдостаточно быстро. Π’ΠΎΠ³Π΄Π° Π½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ приходят прямыС SQL-запросы. Они ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ ограничСния ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ вставку Π΄Π°Π½Π½Ρ‹Ρ… Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π±Π°Π·Ρ‹.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ понимания структуры Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… 1Π‘. ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ использованиС ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ:

  • ΠΠ°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡŽ цСлостности Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°ΡΡ…ΠΎΠΆΠ΄Π΅Π½ΠΈΡŽ ΠΈΡ‚ΠΎΠ³ΠΎΠ²).
  • ΠžΠ±Ρ…ΠΎΠ΄Ρƒ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ΠΎΠ² ΠΈ бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ.
  • ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ бСзопасного использования SQL для записи Π² рСгистр остатков:

// 1. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ физичСскоС имя Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ рСгистра

Π˜ΠΌΡΠ’Π°Π±Π»ΠΈΡ†Ρ‹ = ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅.РСгистрыБвСдСний.ΠžΡΡ‚Π°Ρ‚ΠΊΠΈΠ’ΠΎΠ²Π°Ρ€ΠΎΠ².ПолноСИмя();

Π’Π°Π±Π»ΠΈΡ†Π°SQL = "_AccumRg" + Π‘Ρ€Π΅Π΄(Π˜ΠΌΡΠ’Π°Π±Π»ΠΈΡ†Ρ‹, 15); // Для MS SQL

// 2. Π€ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ запрос

ВСкстЗапроса =

"INSERT INTO " + Π’Π°Π±Π»ΠΈΡ†Π°SQL + " (

Period,

РСгистратор_Key,

НомСнклатура_Key,

Π‘ΠΊΠ»Π°Π΄_Key,

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ

)

SELECT

CONVERT(DATETIME, '2026-01-01'),

NULL, -- Если Π½Π΅ привязан ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρƒ

НомСнклатура.Key,

Π‘ΠΊΠ»Π°Π΄.Key,

ΠžΡΡ‚Π°Ρ‚ΠΎΠΊ

FROM

#ВрСмСннаяВаблица"; // ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅

// 3. ВыполняСм запрос

Запрос = Новый Запрос(ВСкстЗапроса);

Запрос.Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ();

Когда ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ SQL:

БцСнарийУскорСниСРиски
ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° справочниковв 5-10 разНизкиС
Π•ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Ρ†Π΅Π½ (100ΠΊ+ записСй)Π² 3-5 Ρ€Π°Π·Π‘Ρ€Π΅Π΄Π½ΠΈΠ΅
Π—Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ мСсяца с пСрСсчётом ΠΈΡ‚ΠΎΠ³ΠΎΠ²Π² 2 разаВысокиС

Π£Π±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² 1Π‘|Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΡƒΡŽ копию Π±Π°Π·Ρ‹|ΠŸΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ запрос Π½Π° тСстовом сСрвСрС|ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… послС выполнСния|Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС измСнСния-->

6. Π€ΠΎΠ½ΠΎΠ²Ρ‹Π΅ задания ΠΈ распрСдСлСниС Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ

Если запись Π² рСгистр инициируСтся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°), Π° ΠΎΠ±ΡŠΡ‘ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… Π²Π΅Π»ΠΈΠΊ, Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ пСрСнСсти ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ΅ Π·Π°Π΄Π°Π½ΠΈΠ΅. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚:

  • πŸ•’ ΠžΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ интСрфСйс ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.
  • πŸ“‰ Π Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° сСрвСр.
  • ⏱️ Π’Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ минимальной активности (Π½ΠΎΡ‡ΡŒΡŽ).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ задания для обновлСния Ρ†Π΅Π½:

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒΠ¦Π΅Π½Ρ‹Π€ΠΎΠ½ΠΎΠ²ΠΎ(Π’Π°Π±Π»ΠΈΡ†Π°Π¦Π΅Π½)

// Π‘ΠΎΠ·Π΄Π°Ρ‘ΠΌ Π·Π°Π΄Π°Π½ΠΈΠ΅

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ = Новый Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°("Π’Π°Π±Π»ΠΈΡ†Π°Π¦Π΅Π½", Π’Π°Π±Π»ΠΈΡ†Π°Π¦Π΅Π½);

Π€ΠΎΠ½ΠΎΠ²ΠΎΠ΅Π—Π°Π΄Π°Π½ΠΈΠ΅ = ЀоновыСЗадания.Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒΠ€ΠΎΠ½ΠΎΠ²ΠΎΠ΅Π—Π°Π΄Π°Π½ΠΈΠ΅(

"ОбновлСниСЦСн",

Π­Ρ‚ΠΎΡ‚ΠžΠ±ΡŠΠ΅ΠΊΡ‚.Имя + ".Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΠžΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅Π¦Π΅Π½",

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹,

Π›ΠΎΠΆΡŒ, // НС ΠΆΠ΄Π°Ρ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ

Π˜ΡΡ‚ΠΈΠ½Π° // Высокий ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚

);

Π€ΠΎΠ½ΠΎΠ²ΠΎΠ΅Π—Π°Π΄Π°Π½ΠΈΠ΅.Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ();

ΠšΠΎΠ½Π΅Ρ†ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΠžΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅Π¦Π΅Π½(ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹) Экспорт

Π’Π°Π±Π»ΠΈΡ†Π°Π¦Π΅Π½ = ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.Π’Π°Π±Π»ΠΈΡ†Π°Π¦Π΅Π½;

// Π Π°Π·Π±ΠΈΠ²Π°Π΅ΠΌ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΏΠΎ 500 строк

ΠšΠΎΠ»Π²ΠΎΠŸΠ°ΠΊΠ΅Ρ‚ΠΎΠ² = Π¦Π΅Π»(Π’Π°Π±Π»ΠΈΡ†Π°Π¦Π΅Π½.ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ() / 500) + 1;

Для ΠΠΎΠΌΠŸΠ°ΠΊΠ΅Ρ‚ = 1 По ΠšΠΎΠ»Π²ΠΎΠŸΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π¦ΠΈΠΊΠ»

ΠΠ°Ρ‡Π°Ρ‚ΡŒΠ’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ();

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ°

Начало = (ΠΠΎΠΌΠŸΠ°ΠΊΠ΅Ρ‚ - 1) * 500;

РСгистрыБвСдСний.ЦСныНомСнклатуры.Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ(

Π’Π°Π±Π»ΠΈΡ†Π°Π¦Π΅Π½.Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ(Начало, 499)

);

Π—Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΠ’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ();

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠžΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒΠ’Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ();

Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΠžΡˆΠΈΠ±ΠΊΡƒ(ОписаниСОшибки());

ΠšΠΎΠ½Π΅Ρ†ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠΈ;

ΠšΠΎΠ½Π΅Ρ†Π¦ΠΈΠΊΠ»Π°;

ΠšΠΎΠ½Π΅Ρ†ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹

Для распрСдСлСния Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ€Π΅Π³Π»Π°ΠΌΠ΅Π½Ρ‚Π½Ρ‹Π΅ задания с настройкой расписания. НапримСр, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ курсов Π²Π°Π»ΡŽΡ‚ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° 3 часа Π½ΠΎΡ‡ΠΈ, ΠΊΠΎΠ³Π΄Π° Π² систСмС ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

7. Аппаратная оптимизация: сСрвСр, Π‘Π£Π‘Π”, ΡΠ΅Ρ‚ΡŒ

Иногда ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΎΠ² кроСтся Π½Π΅ Π² ΠΊΠΎΠ΄Π΅, Π° Π² "ΠΆΠ΅Π»Π΅Π·Π΅". ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹:

  • πŸ–₯️ ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сСрвСра 1Π‘:
    • CPU: для Π±Π°Π· с 100+ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ рСкомСндуСтся Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 8 ядСр с Ρ‚Π°ΠΊΡ‚ΠΎΠ²ΠΎΠΉ частотой 3 Π“Π“Ρ†+.
    • RAM: 16 Π“Π‘ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 50 ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.
    • Диски: SSD с ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ чтСния/записи Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 500 ΠœΠ‘/с (для MS SQL β€” Π»ΡƒΡ‡ΡˆΠ΅ NVMe).
  • πŸ—„οΈ Настройки Π‘Π£Π‘Π”:
    • Для MS SQL Server: ΡƒΠ²Π΅Π»ΠΈΡ‡ΡŒΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ max degree of parallelism Π΄ΠΎ количСства ядСр.
    • Для PostgreSQL: настройтС shared_buffers (рСкомСндуСтся 25% ΠΎΡ‚ ΠΎΠ±Ρ‰Π΅ΠΉ RAM).
  • 🌐 Π‘Π΅Ρ‚ΡŒ:
    • Π—Π°Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ сСрвСром Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ < 50 мс.
    • Для ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈΠ»ΠΈ Ρ‚ΠΎΠ½ΠΊΠΈΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ с ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ.

Если Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… располоТСна Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ:

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ диски часто ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ IOPS (ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° Π² сСкунду). Для MS SQL трСбуСтся Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 1000 IOPS Π½Π° диск. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΏΠ°Π½Π΅Π»ΠΈ управлСния вашСго ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° (AWS, Azure, Yandex Cloud).

Для тСстирования Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅:

  • πŸ“ˆ SQL Server Performance Dashboard (для MS SQL).
  • πŸ› οΈ Π£Ρ‚ΠΈΠ»ΠΈΡ‚Ρƒ CrystalDiskMark для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ скорости дисков.
  • πŸ–§ ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ рСсурсов Windows (resmon.exe) для Π°Π½Π°Π»ΠΈΠ·Π° Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ CPU ΠΈ дисков.

FAQ: ЧастыС вопросы ΠΏΠΎ ΡƒΡΠΊΠΎΡ€Π΅Π½ΠΈΡŽ записи Π² рСгистры

МоТно Π»ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΡ€ΠΈ записи Π² рСгистр?

Π”Π°, Π½ΠΎ это ΠΊΡ€Π°ΠΉΠ½Π΅ рискованно. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒΠ—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ = Π›ΠΎΠΆΡŒ ΠΏΡ€ΠΈ создании записи, ΠΎΠ΄Π½Π°ΠΊΠΎ это ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ:

  • ВозмоТности записи Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… остатков).
  • ΠΠ°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡŽ ссылочной цСлостности (Ссли ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° сущСствованиС справочника ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π°).

РСкомСндуСтся ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π‘Π£Π‘Π” (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, NOT NULL для ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ).

Как ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ запись Π² рСгистр Π½Π° слабом сСрвСрС (2 ядра, 4 Π“Π‘ RAM)?

На слабом ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Ρ‹ Ρ‚Π°ΠΊΠΈΠ΅:

  1. ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ всС Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Π΅ задания.
  2. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΡƒΡŽ запись с Ρ€Π°Π·Π±ΠΈΠ²ΠΊΠΎΠΉ Π½Π° ΠΌΠ΅Π»ΠΊΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ (ΠΏΠΎ 50-100 строк).
  3. ΠŸΠ΅Ρ€Π΅Π½Π΅ΡΠΈΡ‚Π΅ историчСскиС Π΄Π°Π½Π½Ρ‹Π΅ (ΡΡ‚Π°Ρ€ΡˆΠ΅ 1 Π³ΠΎΠ΄Π°) Π² Π°Ρ€Ρ…ΠΈΠ²Π½Ρ‹ΠΉ рСгистр.
  4. Π£Π²Π΅Π»ΠΈΡ‡ΡŒΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ /PingPeriod Π² Ρ„Π°ΠΉΠ»Π΅ 1cv8.1cd Π΄ΠΎ 600 (ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ сСтСвой Ρ‚Ρ€Π°Ρ„ΠΈΠΊ).

Если Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΠΈΠ³Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π½Π° PostgreSQL β€” ΠΎΠ½ ΠΌΠ΅Π½Π΅Π΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚Π΅Π»Π΅Π½ ΠΊ рСсурсам, Ρ‡Π΅ΠΌ MS SQL.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ послС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ индСксов запись стала Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅?

Π­Ρ‚ΠΎ типичная ситуация, ΠΊΠΎΠ³Π΄Π°:

  • ИндСксов слишком ΠΌΠ½ΠΎΠ³ΠΎ (Π±ΠΎΠ»Π΅Π΅ 5 Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ). ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ индСкс Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ обновлСния ΠΏΡ€ΠΈ записи.
  • Π˜Π½Π΄Π΅ΠΊΡΡ‹ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ‡Π΅Ρ€Π΅Π· sys.dm_db_index_physical_stats Π² MS SQL).
  • ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ ΠΏΠΎΠ»Π΅ΠΉ Π² индСксС Π½Π΅ соотвСтствуСт Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ запросам.

РСшСниС: ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ индСксы ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΈΡ… пСрСстроСниС:

-- Для MS SQL

ALTER INDEX ALL ON dbo._AccumRgYourRegisterName REBUILD;

Как ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ запросы тормозят запись?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ инструмСнтов:

  1. Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ тСхнологичСский ΠΆΡƒΡ€Π½Π°Π» с ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ Debug ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠΌ ΠΏΠΎ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΡŽ SQLQuery.
  2. Π’ SQL Server Profiler настройтС трассировку Π½Π° события SQL:BatchCompleted с Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠΌ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния > 1000 мс.
  3. Π’ 1Π‘ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠŸΡ€ΠΎΡ„Π°ΠΉΠ»Π΅Ρ€Π—Π°ΠΏΡ€ΠΎΡΠΎΠ².Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ() ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹ΠΌ участком ΠΊΠΎΠ΄Π°.

Π˜Ρ‰ΠΈΡ‚Π΅ запросы с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ LIKE, NOT IN ΠΈΠ»ΠΈ подзапросами Π² условии WHERE β€” ΠΎΠ½ΠΈ Ρ‡Π°Ρ‰Π΅ всСго тормозят.

МоТно Π»ΠΈ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ запись Π² рСгистр свСдСний Ρ‡Π΅Ρ€Π΅Π· COM-соСдинСниС?

Π”Π°, Π½ΠΎ эффСкт Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ (5-15%). COM-соСдинСниС добавляСт Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π½Π° ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ…. Для ускорСния:

  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ() с ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π° Π½Π΅ ΠΏΠΎΡΡ‚Ρ€ΠΎΡ‡Π½ΡƒΡŽ запись.
  • ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ автоматичСскоС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌ послС записи (ΠžΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒΠ€ΠΎΡ€ΠΌΡƒ = Π›ΠΎΠΆΡŒ).
  • Если Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, пСрСнСситС Π»ΠΎΠ³ΠΈΠΊΡƒ Π½Π° сСрвСр 1Π‘ (Ρ‡Π΅Ρ€Π΅Π· HTTP-сСрвисы ΠΈΠ»ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ).