@s0tnikow

Нагружают ли изолированные sql запросы сервер?

Работаю в ms sql.
Есть запрос, который имеет примерное след схему:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
select * from table with (nolock)

и он выполняется минут 10-15. Как понять может ли он во время выполнения нагрузить сервер так, что бы другие запросы к этой же таблице или к другим таблицам выполнялись дольше?
  • Вопрос задан
  • 89 просмотров
Пригласить эксперта
Ответы на вопрос 2
Mikhail_E
@Mikhail_E
1С, SQL
Думаю да, особенно если стоит MaxDOP = 0. В любом случае, текущий запрос занимает некоторые ресурсы, которые будут иметь некую конкуренцию за ресурсы оборудования с другими запросами (В т.ч. I/O диска на котором лежит база, Процессор сервера и т.п.). Изоляция "запроса" (вообще то Транзакции) влияет на доступность данных другим транзакциям, в общем-то Изоляция это и есть свойство транзакции, а не сервера и на производительность думаю это не сильно влияет.
Таким образом можно перефразировать вопрос так : есть такой-то запрос, который выполняется 15 минут, мешает ли он другим запросам к этой таблице или запросам других таблиц этой БД?
Ответ: Да, конечно. Т.к. (скорее всего) количество ядер на сервере ограничено и пропускная способность диска тоже, а этот запрос занимает некоторую их часть (Возможно даже значительную, но это понятие относительное).
Ответ написан
sarapinit
@sarapinit
Точу водой камень
1) READ UNCOMMITED и with(no lock) - это одно и то же, можно оставить что-то одно.

READ UNCOMMITTED
Specifies that statements can read rows that have been modified by other transactions but not yet committed.

Transactions running at the READ UNCOMMITTED level do not issue shared locks to prevent other transactions from modifying data read by the current transaction. READ UNCOMMITTED transactions are also not blocked by exclusive locks that would prevent the current transaction from reading rows that have been modified but not committed by other transactions. When this option is set, it is possible to read uncommitted modifications, which are called dirty reads. Values in the data can be changed and rows can appear or disappear in the data set before the end of the transaction. This option has the same effect as setting NOLOCK on all tables in all SELECT statements in a transaction. This is the least restrictive of the isolation levels.


2) У вас не будет блокировок таблицы но будет нагрузка на память и на диск (кроме случаев когда вся база в памяти) что скорее всего повлияет на другие запросы, не факт что БД сможет переиспользовать свои кэши для других запросов во время выполнения этого - зависит от размера данных. Самый простой сценарий когда вы явно увидите влияние - таблица не влезает полностью в память.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы