База данных: SQL-сервер
Я создал программу, которая работает на нескольких машинах и довольно часто запрашивает базу данных. В последнее время произошло то, что запросы, поступающие из каждого экземпляра этой программы, приводили к полной остановке базы данных. Было почти невозможно запросить что-либо из базы данных, не ожидая много секунд.
Так что я пытаюсь лучше понять эту проблему и выяснить, что вызвало это. У меня есть несколько вопросов:
Если у меня есть запрос на чтение, который обычно выполняется 2 секунды, что произойдет, когда во многих случаях моя программа пытается выполнить этот же запрос? Все они работают в базе данных одновременно или только по одному за раз? Если они запускаются по одному, формируются ли запросы, которые не выполняются, и формируют очередь? Я думаю, что если эта очередь может накапливаться до определенного момента, это приведет к замедлению работы базы данных.
Что обычно приводит к необычайно медленной работе базы данных? Может ли это быть вызвано большими таблицами (более 100 000 строк) с несколькими запросами на соединение? Или это возможно только в том случае, если где-то существует бесконечный цикл, который постоянно пытается выполнить запрос.
Приложение: у меня есть запрос, который делает несколько соединений с таблицей с более чем 100 000 строк, которая использует подзапрос в своем месте. Так что-то вроде этого:
var result = from a in db.TableNormal
join b in db.TableHuge on a.id equals b.id
where b.value = (db.TableOther.Select(z=>z.value).Max())
select new {Normal = a};
Таким образом, в основном, подзапрос выполняется более 100 000 раз каждый раз, когда выполняется его родительский запрос. Если этот запрос выполняется второй раз на 10 машинах, будет ли этого достаточно, чтобы значительно снизить производительность сервера SQL? (У меня есть очень неполное представление о мощности сервера SQL).