TGViewer
Dataism Dataism @data1sm · 3.83K subscribers
Post #111 236
Часть 2

1. Диспетчер клиентов.
Когда мы подключаемся к БД:
Диспетчер сначала аутентифицирует вас (проверят логин и пароль), а потом авторизует для использования БД. Эти права доступа определяются вашим DBA. Далее диспетчер проверяет, есть ли доступный процесс (или поток), который может обработать ваш запрос. Также он сверяет, не находится ли база в состоянии высокой нагрузки. Диспетчер может подождать, пока не высвободятся нужные ресурсы. Если период ожидания закончился, а они не высвободились, диспетчер закрывает соединение с сообщением об ошибке. Если же ресурсы имеются, то диспетчер перенаправляет ваш запрос диспетчеру запросов. Поскольку диспетчер клиентов передаёт и получает данные от диспетчера запросов, то он сохраняет их в буфере частями и отправляет клиенту. При возникновении проблемы диспетчер прерывает соединение с каким-то объяснением и высвобождает ресурсы.

2. Диспетчер запросов.
Это сердце БД. Здесь все написанные запросы превращаются в быстроисполняемый код, затем происходит исполнение.
Описанный процесс состоит из нескольких этапов:
Запрос сначала проверяется на валидность (парсится).
Затем он перезаписывается с целью исключения бесполезных операций и предварительной оптимизации.
Далее производится окончательная оптимизация для повышения производительности. После этого запрос трансформируется в план исполнения и доступа к данным.
План компилируется и исполняется.

3. Диспетчер данных.
Диспетчер запросов исполняет запрос и нуждается в данных из таблиц и индексов. Он запрашивает их у диспетчера данных, но тут есть две трудности:
Реляционные БД используют транзакционную модель. Нельзя в конкретный момент времени получить любые желаемые данные, потому что в это время они могут кем-то использоваться/модифицироваться.
Извлечение данных — самая медленная операция в БД. Поэтому диспетчеру данных нужно уметь прогнозировать свою работу, чтобы своевременно заполнять буфер памяти. Как уже не раз говорилось, самым узким местом в БД является дисковая подсистема. Поэтому для увеличения производительности используется диспетчер кэша. Вместо того, чтобы получать данные напрямую от файловой системы, исполнитель запросов обращается за ними к диспетчеру кэша. Тот использует содержащийся в памяти буферный пул, что позволяет радикально увеличить производительность БД. Также большое значение имеет тип накопителей, используемых в дисковой системе.
Однако тут мы сталкиваемся с другой проблемой. Диспетчеру кэша нужно положить данные в память ДО того, как они понадобятся исполнителю запросов. Иначе тому придётся ждать их получения с медленного диска.
Исполнитель запросов знает, какие данные ему понадобятся, поскольку ему известен весь план, то, какие данные содержатся на диске и статистика.
Когда исполнитель обрабатывает первую порцию данных, он просит диспетчер кэша заранее подгрузить следующую порцию. А когда переходит к её обработке, то просит ДК подгрузить третью и подтверждает, что первую порцию можно удалить из кэша.
Диспетчер кэша хранит эти данные в буферном пуле. Он также добавляет к ним сервисную информацию (триггер, latch), чтобы знать нужны ли они ещё в буфере. Нельзя забывать, что буфер ограничен объёмом доступной памяти. То есть для загрузки одних данных нам приходится периодически удалять другие. Заполнение и очистка кэша потребляет часть ресурсов дисковой подсистемы и сети. Если у вас есть часто исполняемый запрос, то было бы контрпродуктивно каждый раз загружать и очищать используемые им данные. Для решения данной проблемы в современных БД используется стратегия замены буфера. Большинство БД (по крайне мере, SQL Server, MySQL, Oracle и DB2) используют для этого алгоритм LRU (Least Recently Used). Он предназначен для поддержания в кэше тех данных, которые недавно использовались, а значит велика вероятность, что они могут понадобиться снова.
БД так же использует и буферы записи, которые накапливают данные и сбрасывают на диск порциями, вместо последовательной записи. Это позволяет экономить операции ввода/вывода.

#трудовыебудни
More from @data1sm
  1. Oct 3, 2026Топ-4 необычных продуктовых решений Продакты, сохраняйте идеи 📌 1. DoorDash: скидка от це…
  2. Oct 1, 2026Стать аналитиком данных всего за 10 недель — это реально! Если вы давно смотрите в сторону…
  3. Sep 23, 2026Карьерные консультанты На фоне кризиса на рынке труда, естественно, активизировались ✨карь…
  4. Sep 9, 2026Айтишник из Платы запилил рилс со сравнением Платы и Т-Банка и его уволили, хотя в своем р…
  5. Sep 8, 2026Статзначимый подкаст Послушала на выходных подкаст от hh team «Тимлиды в аналитике: как ру…
  6. Sep 1, 2026Буквально вчера на клубе обсуждали будущее приложений и вообще взаимодействия с продуктами…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →