Осторожно: запросы с LinkedServer | OTUS

Курсы

Программирование
iOS Developer. Basic
-23%
Python Developer. Professional
-13%
Golang Developer. Professional
-17%
Python Developer. Basic
-16%
iOS Developer. Professional
-13%
C# ASP.NET Core разработчик
-18%
Unity Game Developer. Professional
-11%
React.js Developer
-12%
Android Developer. Professional
-7%
Software Architect
-12%
C++ Developer. Professional
-8%
Разработчик C#
-8%
Backend-разработчик на PHP
-8%
Архитектура и шаблоны проектирования
-12%
Программист С Разработчик на Spring Framework MS SQL Server Developer AWS для разработчиков Cloud Solution Architecture Разработчик голосовых ассистентов и чат-ботов Vue.js разработчик VOIP инженер Нереляционные базы данных Супер - интенсив по паттернам проектирования Супер-практикум по использованию и настройке GIT IoT-разработчик Advanced Fullstack JavaScript developer Супер-интенсив Azure
Инфраструктура
Мониторинг и логирование: Zabbix, Prometheus, ELK
-17%
DevOps практики и инструменты
-18%
Архитектор сетей
-21%
Инфраструктурная платформа на основе Kubernetes
-22%
Супер-интенсив «IaC Ansible»
-16%
Супер-интенсив по управлению миграциями (DBVC)
-16%
Administrator Linux. Professional
-5%
Administrator Linux.Basic
-10%
Супер-интенсив «ELK»
-10%
Базы данных Сетевой инженер AWS для разработчиков Cloud Solution Architecture Разработчик голосовых ассистентов и чат-ботов Внедрение и работа в DevSecOps Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив «СУБД в высоконагруженных системах»
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

Осторожно: запросы с LinkedServer

SQL_Deep_23.1_site-5020-b3411a.png

Обычная история. У вас несколько серверов БД, и вдруг вы понимаете, что нужны данные с другого сервера. LinkedServer — прекрасное решение. Вы подключаете БД и можете делать выборки так, как будто эта таблица находится на вашем сервере! Все счастливы и работают дальше.

Так всё и работает, пока у вас таблица на втором сервере не вырастает до внушительных размеров (например, 10 млн. записей и более). В какой-то момент выборка начинает тормозить, и вы решаете посмотреть план. И что же вы там видите?

О, ужас! SQL Server тянет все 10 млн. записей на местный сервер и тут делает JOIN с местными таблицами, и на выходе у вас получается 100 записей.

Ну-ну, не спешите огорчаться! Конечно, сервер и оптимизатор умные, но иногда случаются проколы при использовании соединений с таблицами с других серверов.

Что же делать?

Вызов хранимой процедуры Вы создаёте хранимую процедуру на сервере с удалённой таблицей и передаёте туда фильтр, который поможет вам уменьшить количество записей в результатах. Иногда, к сожалению, вам нужен именно JOIN с местной таблицей, но в 90% случаях это закроет проблему.

Затем вы делаете на местном сервере вызов процедуры с удалённого сервера, а результаты сохраняете во временную таблицу. Далее вы делаете JOIN с местными таблицами и получаете результат.

Репликация Если таблица на удалённом сервере не очень большая (тут всё относительно ваших объёмов и возможностей), а данные из неё вам нужны очень часто, и меняются они при этом очень редко, то присмотритесь к репликации. Да, это некоторое дублирование, но если чтений много, это поможет сэкономить вам много ресурсов, даже несмотря на затраченное дополнительное место на диске.

Вы реплицируете нужную таблицу на местный сервер, все изменения будут доставляться на него автоматически. На местном сервере уже работаете с копией таблицы и можете выбирать оттуда данные, это будет быстрее и эффективнее удалённого вызова.

Вывод

LinkedServer — прекрасный механизм, который упрощает жизнь разработчику, но его, как и многое другое, нужно использовать в меру, иначе ваша БД окажется опутанной сетью из связанных между серверами вызовов, и вы потеряете всю ценность разделения БД на разные сервера.

А как вы используете LinkedServer? Пишите в комментариях!

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться