|
Может ли запрос от ALWAYSON реплики создать проблемы исходной БД
|
|||
---|---|---|---|
#18+
Господа, кто может ответить на следующий вопрос: может ли запрос от ALWAYSON реплики создать проблемы исходной БД. Речь может идти о том, что по реплицированной БД хотят делать тяжелые запросы, которые в течение десятков минут будут делать тяжелые сканы + джойны по большим таблицам. Возможно часы. Вопрос оптимизации запросов отставим за рамками данного топика. Будем исходить из того, что запросы оптимизированы, но затрагивают объемы данных за период до года или несколько таблиц по от 100 тыс+ до 100+ млн строк. Нужно понять -- при каких условиях блокировки или иные события на реплики могут создать проблемы исходной БД. Речь идет о SQL SERVER 2017 или 2019 Enterprise. Кто-то может точно сформулировать это? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 08:28 |
|
Может ли запрос от ALWAYSON реплики создать проблемы исходной БД
|
|||
---|---|---|---|
#18+
a_voronin может ли запрос от ALWAYSON реплики создать проблемы исходной БД. Речь может идти о том, что по реплицированной БД хотят делать тяжелые запросы, которые в течение десятков минут будут делать тяжелые сканы + джойны по большим таблицам. Возможно часы. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 08:39 |
|
Может ли запрос от ALWAYSON реплики создать проблемы исходной БД
|
|||
---|---|---|---|
#18+
a_voronin Господа, Нужно понять -- при каких условиях блокировки или иные события на реплики могут создать проблемы исходной БД. Откуда могут быть блокировки на Secondary реплике, если она по определению ReadOnly? Разве что сильная загрузка синхронной Secondary реплики может снизить общую производительность... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 08:56 |
|
Может ли запрос от ALWAYSON реплики создать проблемы исходной БД
|
|||
---|---|---|---|
#18+
alexeyvg, Да, тоже соглашусь с Алексеем - режим async не обязывает Master ни к чему в плане коммита транзакций, блокировки secondary к этому так же не будут иметь отношения, их кроме разделяемых нет там Попробуйте, кстати, открыть в Microsoft advisory case, не? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 09:05 |
|
Может ли запрос от ALWAYSON реплики создать проблемы исходной БД
|
|||
---|---|---|---|
#18+
alexeyvg a_voronin может ли запрос от ALWAYSON реплики создать проблемы исходной БД. Речь может идти о том, что по реплицированной БД хотят делать тяжелые запросы, которые в течение десятков минут будут делать тяжелые сканы + джойны по большим таблицам. Возможно часы. В синхронном режиме, синхронность обеспечивается синхронной записью в лог на вторичной реплике, т.е. блокировки данных на вторичной реплике напрямую не влияют на первичную. Из возможных проблем по-мимо уже указанного переполнения лога 1. I/o нагрузка на файлы данных в некоторых случаях, может замедлить доступ к логу. Самый очевидный, когда данные и логи лежат на одних дисках. Менее очевидный, но более реальный - данные и логи лежат на одной СХД, и батлнеком станет канал от СХД до сервера. В этих случаях, передача лога может упереться в запись в лог. 2. Если читаемые миллионы строк не просто агрегируются, а в "сыром виде" отправляются клиенту, то проблемным местом может стать передача логов с первичной реплики из-за нехватки канала на сетевых интерфейсах. Если в синхронном режиме не успевает передоватся лог, то на первичной реплике все коммиты будут висеть на HADR ожиданиях (что-то типа hadr_sync_commit) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 09:05 |
|
Может ли запрос от ALWAYSON реплики создать проблемы исходной БД
|
|||
---|---|---|---|
#18+
msLex alexeyvgЕсли режим асинхронный, и если не переполнится журнал (или, из за задержки применения транзакций, накат на вторичные реплики не перестанет успевать), то вроде проблем не должно быть. В синхронном режиме, синхронность обеспечивается синхронной записью в лог на вторичной реплике, т.е. блокировки данных на вторичной реплике напрямую не влияют на первичную.А, получается, если на вторичной реплике что то будет заблокировано, то это приведёт просто к приостановке восстановления данных на ней, но на источник не повлияет? Понятно, спасибо за пояснения. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 09:11 |
|
Может ли запрос от ALWAYSON реплики создать проблемы исходной БД
|
|||
---|---|---|---|
#18+
AndrF Откуда могут быть блокировки на Secondary реплике, если она по определению ReadOnly? Во-первых, при накатывании лога на любой реплике, все применяемые операции накладывают соответствующие блокировки. Во-вторых, все читатели на readable репликах работают в til snapshot, и вполне себе накладывают блокировки стабильности схемы на объекты. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 09:11 |
|
Может ли запрос от ALWAYSON реплики создать проблемы исходной БД
|
|||
---|---|---|---|
#18+
alexeyvg msLex пропущено... В синхронном режиме, синхронность обеспечивается синхронной записью в лог на вторичной реплике, т.е. блокировки данных на вторичной реплике напрямую не влияют на первичную. Понятно, спасибо за пояснения. Да все так. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 09:12 |
|
Может ли запрос от ALWAYSON реплики создать проблемы исходной БД
|
|||
---|---|---|---|
#18+
alexeyvg msLex пропущено... В синхронном режиме, синхронность обеспечивается синхронной записью в лог на вторичной реплике, т.е. блокировки данных на вторичной реплике напрямую не влияют на первичную. Понятно, спасибо за пояснения. https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/active-secondaries-readable-secondary-replicas-always-on-availability-groups?view=sql-server-ver15 Running long transactions impacts the number of versioned rows kept, both for disk-based and memory-optimized tables. Because read operations are mapped to snapshot isolation transaction level, the cleanup of ghost records on the primary replica can be blocked by transactions on one or more secondary replicas. The ghost record cleanup task will automatically clean up the ghost records for disk-based tables on the primary replica when they are no longer needed by any secondary replica. This is similar to what is done when you run transaction(s) on the primary replica. In the extreme case on the secondary database, you will need to kill a long running read-query that is blocking the ghost cleanup. Note, the ghost clean can be blocked if the secondary replica gets disconnected or when data movement is suspended on the secondary database. This state also prevents log truncation, so if this state persists, we recommend that you remove this secondary database from the availability group. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 12:44 |
|
Может ли запрос от ALWAYSON реплики создать проблемы исходной БД
|
|||
---|---|---|---|
#18+
Если на реплике будут задержки с восстановлением журнала, то лог на первичной реплике будет расти пока не лопнет. Ну, или если реплика будет недоступна. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 15:41 |
|
Может ли запрос от ALWAYSON реплики создать проблемы исходной БД
|
|||
---|---|---|---|
#18+
Ловили следующую ситуацию: на вторичке запустили долгий читающий запрос. Кроме него читателей особо не было. В итоге переполнился version store в tempdb, остановился процесс применения лога на вторичке (старые версии записей писать-то он не может), на странных ожиданиях повисли все модификации данных на первичной реплике, пока не прибили читающий запрос на вторичке. Больше деталей не помню. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2020, 16:23 |
|
|
start [/forum/topic.php?fid=46&msg=39917666&tid=1686609]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 332ms |
total: | 475ms |
0 / 0 |