Quartznet: QRTZ_LOCKS рдкрд░ рдХреНрд╡реЗрд░реА рдХреЗ рдХрд╛рд░рдг 40% CPU рд╕реНрдкрд╛рдЗрдХ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 8 рдлрд╝рд░ре░ 2021  ┬╖  14рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: quartznet/quartznet

рдореЗрд░рд╛ рдРрдк .NET Framework 4.7.2 рдкрд░ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ рдХрдо CPU рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрд╖ рд╕реЗ рдЕрдзрд┐рдХ рдкреБрд░рд╛рдиреЗ рдХреНрд╡рд╛рд░реНрдЯреНрдЬ рд╕рдВрд╕реНрдХрд░рдг 3.0.7 рдЪрд▓рд╛ рд░рд╣рд╛ рдерд╛, рдФрд░ рдХреБрдЫ рд╣рдлреНрддреЗ рдкрд╣рд▓реЗ рд╣рдордиреЗ рдХреНрд╡рд╛рд░реНрдЯреНрдЬ рдХреЛ 3.2.3 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рдФрд░ рд╣рдордиреЗ рддрддреНрдХрд╛рд▓ 40% CPU рд╡реГрджреНрдзрд┐ рджреЗрдЦреА рдЗрд╕ рдХреНрд╡реЗрд░реА рдХреЛ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдХрд╛рд░рдгред

рдЪреБрдирддреЗ рд╣реИрдВ *
QRTZ_LOCKS рд╕реЗ (UPDLOCK, ROWLOCK)
рдЬрд╣рд╛рдВ SCHED_NAME = @schedulerName
рдФрд░ LOCK_NAME = @lockName

рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╕рдВрд╕реНрдХрд░рдг

рд╕рдВрд╕реНрдХрд░рдг: 3.2.3

рдкреНрд░рдЬрдирди рдХрд░рдирд╛

рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдРрдк рд╕рд░рд▓ рдиреМрдХрд░рд┐рдпрд╛рдВ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ 10 рдХреЛ 4 рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реАрдПрдо рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░

рд╕реАрдкреАрдпреВ рд╡рд╣реА рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдерд╛ред

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдХреНрд╡рд╛рд░реНрдЯреНрдЬ рдпрд╛ рд╣рдорд╛рд░реЗ рдРрдк рджреНрд╡рд╛рд░рд╛ рд░рд┐рдкреЛрд░реНрдЯ рдХреА рдЧрдИ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХрдорд╛рддреНрд░ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╕рдВрд╕реНрдХрд░рдг 3.2.3 рдХреЗ рд╕рд╛рде рджреЗрдЦрддреЗ рд╣реИрдВ

рд╕рднреА 14 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдХреНрдпрд╛ рдЖрдк рдЕрдкрдирд╛ рд╢реЗрдбреНрдпреВрд▓рд░ рдлрд╝реИрдХреНрдЯрд░реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди (рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдЖрджрд┐ рдЕрд▓рдЧ рдХрд░рдирд╛) рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдЬрд╝рд░реВрд░ред

==== рдкреНрд░реЛрд╕реЗрд╕рд░ рд╢реЗрдбреНрдпреВрд▓рд░ ====

<scheduler name="processorScheduler">
<quartz>
  <property key="quartz.scheduler.instanceName" value="ProcessorScheduler" />
  <property key="quartz.scheduler.instanceId" value="AUTO" />
  <property key="quartz.scheduler.idleWaitTime" value="1000" />
  <property key="quartz.scheduler.exporter.type" value="Quartz.Simpl.RemotingSchedulerExporter, Quartz" />
  <property key="quartz.scheduler.exporter.port" value="1111" />
  <property key="quartz.scheduler.exporter.bindName" value="ProcessorScheduler" />
  <property key="quartz.scheduler.exporter.channelType" value="tcp" />
  <property key="quartz.scheduler.exporter.channelName" value="httpQuartz" />
  <property key="quartz.threadPool.type" value="Quartz.Simpl.DefaultThreadPool, Quartz" />
  <property key="quartz.threadPool.threadCount" value="20" />
  <property key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" />
  <property key="quartz.serializer.type" value="binary" />
  <property key="quartz.jobStore.clustered" value="true" />
  <property key="quartz.jobStore.clusterCheckinInterval" value="1000" />
  <property key="quartz.jobStore.misfireThreshold" value="60000" />
  <property key="quartz.jobStore.dataSource" value="default" />
  <property key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz" />
  <property key="quartz.jobStore.tablePrefix" value="QRTZ_" />
  <property key="quartz.jobStore.useProperties" value="true" />
  <property key="quartz.dataSource.default.connectionString" value="Server=xxx;Database=quartz;user id=xxx;PWD=xxx;" />
  <property key="quartz.dataSource.default.provider" value="SqlServer" />
</quartz>
</scheduler>
<scheduler name="notificationScheduler">
<quartz>
  <property key="quartz.scheduler.instanceName" value="notificationScheduler" />
  <property key="quartz.scheduler.instanceId" value="notificationSchedulerInstance" />
  <property key="quartz.scheduler.proxy" value="true" />
  <property key="quartz.scheduler.proxy.address" value="tcp://xxx:2222/notificationScheduler" />
  <property key="quartz.threadPool.type" value="Quartz.Simpl.DefaultThreadPool, Quartz" />
  <property key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" />
  <property key="quartz.jobStore.misfireThreshold" value="60000" />
  <property key="quartz.jobStore.dataSource" value="default" />
  <property key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz" />
  <property key="quartz.jobStore.lockHandler.type" value="Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz" />
  <property key="quartz.jobStore.tablePrefix" value="QRTZ_" />
  <property key="quartz.jobStore.useProperties" value="true" />
</quartz>
</scheduler>

==== рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдЕрдиреБрд╕реВрдЪрдХ ====

<scheduler name="notificationScheduler">
<quartz>
  <property key="quartz.scheduler.instanceName" value="notificationScheduler" />
  <property key="quartz.scheduler.instanceId" value="AUTO" />
  <property key="quartz.scheduler.idleWaitTime" value="1000" />
  <property key="quartz.scheduler.exporter.type" value="Quartz.Simpl.RemotingSchedulerExporter, Quartz" />
  <property key="quartz.scheduler.exporter.port" value="2222" />
  <property key="quartz.scheduler.exporter.bindName" value="notificationScheduler" />
  <property key="quartz.scheduler.exporter.channelType" value="tcp" />
  <property key="quartz.scheduler.exporter.channelName" value="httpQuartz" />
  <property key="quartz.threadPool.type" value="Quartz.Simpl.DefaultThreadPool, Quartz" />
  <property key="quartz.threadPool.threadCount" value="20" />
  <property key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" />
  <property key="quartz.serializer.type" value="binary" />
  <property key="quartz.jobStore.clustered" value="true" />
  <property key="quartz.jobStore.clusterCheckinInterval" value="1000" />
  <property key="quartz.jobStore.misfireThreshold" value="60000" />
  <property key="quartz.jobStore.dataSource" value="default" />
  <property key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz" />
  <property key="quartz.jobStore.tablePrefix" value="QRTZ_" />
  <property key="quartz.jobStore.useProperties" value="true" />
  <property key="quartz.dataSource.default.connectionString" value="Server=xxx;Database=quartz;user id=xxx;PWD=xxx;" />
  <property key="quartz.dataSource.default.provider" value="SqlServer" />
</quartz>
</scheduler>

рдореБрдЭреЗ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдкрд░рд┐рд╡рд░реНрддрди рдпрд╣ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдХреНрд╡реЗрд░реА рдХреЛ рдкреИрд░рд╛рдореАрдЯреНрд░рд┐рдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдпрд╣ рднреА рджрд┐рдЦрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╢реЗрдбреНрдпреВрд▓рд░ рд╣реИрдВ (рдкрд╣рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ SQL рд╕реНрдЯреНрд░рд┐рдВрдЧ рдереА) рдЙрдиреНрд╣реЗрдВ)ред

рдпрд╣ рд╕рд╣реА рд╣реИ, рдореЗрд░реЗ рдкрд╛рд╕ рдХрдИ рдЕрдиреБрд╕реВрдЪрдХ рд╣реИрдВ рдЬреЛ рд╕рднреА рдХреЗ рдКрдкрд░ рдХреЗ рд╕рдорд╛рди рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИрдВред
рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рд╣рд╛рдп рдорд╛рд░реНрдХреЛ, рдХрд┐рд╕реА рднреА рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рдХреЛ рдЫреВрдирд╛?

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдордп рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рддрд┐рдЧрдорди рдХреЗ рдХрд╛рд░рдг рдХреБрдЫ рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 2.x рдФрд░ 3.x рдХреЗ рдмреАрдЪ рдХреБрдЫ рд╣реИ рдЬрд┐рд╕реЗ рд╕реБрдзрд╛рд░рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рдп рдорд╛рд░реНрдХреЛ, рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕ рджреЛрд╕реНрдд рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рд╣реИ?

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЕрдм рддрдХ рдХреЛрдИ рдмрдбрд╝реА рдЬреАрдд рдирд╣реАрдВ рд╣реБрдИ рд╣реИред рдореИрдВрдиреЗ SQL рд╕рд░реНрд╡рд░ рдбреАрдмреАрдП рдХреЗ рд╕рд╛рде рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рд╣реИ рдФрд░ рд╡рд╣ рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреНрд╡рд╛рд░рд╛ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдг рдирд╣реАрдВ рдвреВрдВрдв рд╕рдХрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдбреАрдмреА рдкрдХреНрд╖ рдкрд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрд╕реА рдбреЗрдЯрд╛рдмреЗрд╕ рдкреЗрдЬ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЪрд▓рддрд╛ рд╣реИ рдЬреЛ рд╕реБрдкрд░ рдлрд╛рд╕реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЫреЛрдЯреА рдкрдВрдХреНрддрд┐ рдЧрдгрдирд╛, рджреЛ рдХреЙрд▓рдо) . рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдЬреЛ рдореБрдЭреЗ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ рддреЛ рд╡рд╣ рд╕реБрдкрд░ рд╣реЛрдЧрд╛ред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдо рдкреНрд░реЛрдлрд╛рдЗрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд▓реЗрдХрд┐рди, рдореЗрд░реЗ рдкрд╛рд╕ рдЖрдкрдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рд╣реИред
рдЬрд┐рд╕ рджрд┐рди рд╕реЗ рд╣рдордиреЗ рдЕрдкрдиреЗ рдРрдк рдХреЛ рдЕрдкрдЧреНрд░реЗрдбреЗрдб рдХреНрд╡рд╛рд░реНрдЯреНрдЬрд╝ рдХреЗ рд╕рд╛рде рд░рд┐рд▓реАрдЬрд╝ рдХрд┐рдпрд╛, рдЙрд╕ рджрд┐рди рд╕реЗ рдЗрд╕ рдХреНрд╡реЗрд░реА рдХреЛ рджрд┐рди рдореЗрдВ 250k рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛ред рдХреНрд╡рд╛рд░реНрдЯреНрдЬ v3.0.7 рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рдареАрдХ рдмрд╛рдж, рдХреНрд╡реЗрд░реА рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдмрдврд╝рдХрд░ 350k рдмрд╛рд░ рдПрдХ рджрд┐рди (125k рдХреА рдЫрд▓рд╛рдВрдЧ) рд╣реЛ рдЧрдпрд╛ред рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛ рдЯреНрд░реИрдлрд╝рд┐рдХ рдереЛрдбрд╝рд╛ рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред

рд╕рд╛рде рд╣реА, рд╣рдордиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреА рдХреНрд╡реЗрд░реА рдПрдХ рд╕реЗрд▓реЗрдХреНрдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдкрд░ UPDLOCK, ROWLOCK рдХрд░ рд░рд╣реА рд╣реИ, рдХрд┐рд╕реА рднреА рдХрд╛рд░рдг рд╕реЗ рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ NOLOCK рдореЗрдВ рдмрджрд▓ рджреЗрдВ рддреЛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред

рдЪреБрдирддреЗ рд╣реИрдВ *
QRTZ_LOCKS рд╕реЗ (UPDLOCK, ROWLOCK)
рдЬрд╣рд╛рдВ SCHED_NAME = @schedulerName
рдФрд░ LOCK_NAME = @lockName

v3.0.7 рдореЗрдВ рдХреБрдЫ рдЗрд╕ рдХреНрд╡реЗрд░реА рдХреЛ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд░рд╣рд╛ рд╣реИред

рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдбреАрдмреАрдП рд╕реЗ рдлрд┐рд░ рд╕реЗ рдмрд╛рдд рдХреА рдФрд░ рдЙрд╕рдиреЗ рдХреБрдЫ рдФрд░ рдЦреБрджрд╛рдИ рдХреА рдФрд░ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЗрд╕ рдЕрджреНрдпрддрди рдХреНрд╡реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЕрдкрдЧреНрд░реЗрдб рдХреЗ рдмрд╛рдж рд╕реЗ, рдпрд╣ рдХреНрд╡реЗрд░реА рдЧрд╛рдпрдм рд╣реЛ рдЧрдИ рдФрд░ рдКрдкрд░ рдирдпрд╛ рдЪрдпрди рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ред

рдзреНрдпрд╛рди рджреЗрдВ, Sched_name рдПрдХ рдкрд╛рда рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╛рдордиреЗ рдЖ рд░рд╣рд╛ рдерд╛ рди рдХрд┐ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВред

( @lockName nvarchar(14))
рдЕрджреНрдпрддрди QRTZ_LOCKS
рд╕реЗрдЯ рдХрд░реЗрдВ LOCK_NAME = LOCK_NAME
рдЬрд╣рд╛рдВ SCHED_NAME = 'рд░рдЦрд░рдЦрд╛рд╡ рд╢реЗрдбреНрдпреВрд▓рд░' рдФрд░ LOCK_NAME = @lockName

рдФрд░ рдкреБрд░рд╛рдиреЗ рд╕реЗрд▓реЗрдХреНрдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреА рддреБрд▓рдирд╛ рдирдП рд╕реЗ рдХреА рдЧрдИ рдереАред

27 рдЬрдирд╡рд░реА рд╕реЗ рдкрд╣рд▓реЗ
( @lockName nvarchar(14))
рдЪреБрдиреЗрдВ * QRTZ_LOCKS рд╕реЗ (UPDLOCK, ROWLOCK)
рдЬрд╣рд╛рдВ SCHED_NAME = 'рд░рдЦрд░рдЦрд╛рд╡ рд╢реЗрдбреНрдпреВрд▓рд░'
рдФрд░ LOCK_NAME = @lockName

рдЙрдореНрдореАрдж рд╣реИ рдХреА рдпрд╣ рдорджрдж рдХрд░реЗрдЧрд╛ред

рдЕрджреНрдпрддрди рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рд╕рд╛рде рд╣реА, рд╣рдордиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреА рдХреНрд╡реЗрд░реА рдПрдХ рд╕реЗрд▓реЗрдХреНрдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдкрд░ UPDLOCK, ROWLOCK рдХрд░ рд░рд╣реА рд╣реИ, рдХрд┐рд╕реА рднреА рдХрд╛рд░рдг рд╕реЗ рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ NOLOCK рдореЗрдВ рдмрджрд▓ рджреЗрдВ рддреЛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред

рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рд╕рдорд╡рд░реНрддреА рдкрд╣реБрдВрдЪ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рддрд╛рд▓реЗ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛

рдзреНрдпрд╛рди рджреЗрдВ, Sched_name рдПрдХ рдкрд╛рда рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╛рдордиреЗ рдЖ рд░рд╣рд╛ рдерд╛ рди рдХрд┐ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВред

рдпрд╣ рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЗрд░рд╛рджрд╛ #818 рдХреЗ рд╡рд┐рд▓рдп рдХреЗ рдмрд╛рдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдИ рд╢реЗрдбреНрдпреВрд▓рд░ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕ рд╕рдЯреАрдХ SQL рдХреЗ рд╕рд╛рде рдЕрдм рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рд╢реНрди рджреЗрдЦрдиреЗ рдЪрд╛рд╣рд┐рдП, рд╡реЗ рд╕рднреА рдПрдХ рд╣реА рдХреНрд╡реЗрд░реА рдкреНрд▓рд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╢реЗрдбреНрдпреВрд▓рд░ рдирд╛рдо рдХреЛ рдХреНрд╡реЗрд░реА рдореЗрдВ рд╣рд╛рд░реНрдб-рдХреЛрдбрд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред

рдЕрдкрдиреЗ notificationScheduler рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рджреЛрдмрд╛рд░рд╛ рдкрдврд╝рдирд╛:

<property key="quartz.jobStore.lockHandler.type" value="Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz" />

рдЗрд╕рд╕реЗ рдпрд╣ SQL рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд SQL рдХрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдиреЗрдЧрд╛ред рддрд░реНрдХ рдХреЗ рд▓рд┐рдП https://github.com/quartznet/quartznet/blob/f612e3f66ab27e221b5632269ef5c25c0fe8bcc5/src/Quartz/Impl/AdoJobStore/JobStoreSupport.cs#L492 -L521 рджреЗрдЦреЗрдВред

рдореИрдВрдиреЗ рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рднреА рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред

рд╣рд╛рдп рдорд╛рд░реНрдХреЛ, рдмрд╕ рдПрдХ рдЕрдкрдбреЗрдЯред рдЙрдкрд░реЛрдХреНрдд рдЕрджреНрдпрддрдиреЛрдВ рдХреЗ рдмрд╛рдж рд╕реАрдкреАрдпреВ рд╕рд╛рдорд╛рдиреНрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИред
рдЖрдкрдХреА рдорджрдж рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рджреЛрд╕реНрддред

рд╕реБрдирдХрд░ рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛, рд▓реВрдк рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕