HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <p>Теги: базы данных, бд, sql server, linkedserver, репликация</p>
1 <p>Теги: базы данных, бд, sql server, linkedserver, репликация</p>
2 <p>Обычная история. У вас несколько серверов БД, и вдруг вы понимаете, что нужны данные с другого сервера.<strong>LinkedServer</strong>- прекрасное решение. Вы подключаете БД и можете делать выборки так, как будто эта таблица находится на вашем сервере! Все счастливы и работают дальше.</p>
2 <p>Обычная история. У вас несколько серверов БД, и вдруг вы понимаете, что нужны данные с другого сервера.<strong>LinkedServer</strong>- прекрасное решение. Вы подключаете БД и можете делать выборки так, как будто эта таблица находится на вашем сервере! Все счастливы и работают дальше.</p>
3 <p>Так всё и работает, пока у вас таблица на втором сервере не вырастает до внушительных размеров (например, 10 млн. записей и более). В какой-то момент выборка начинает тормозить, и вы решаете посмотреть план. И что же вы там видите?</p>
3 <p>Так всё и работает, пока у вас таблица на втором сервере не вырастает до внушительных размеров (например, 10 млн. записей и более). В какой-то момент выборка начинает тормозить, и вы решаете посмотреть план. И что же вы там видите?</p>
4 <p>О, ужас!<strong>SQL Server</strong>тянет все 10 млн. записей на местный сервер и тут делает<strong>JOIN</strong>с местными таблицами, и на выходе у вас получается 100 записей.</p>
4 <p>О, ужас!<strong>SQL Server</strong>тянет все 10 млн. записей на местный сервер и тут делает<strong>JOIN</strong>с местными таблицами, и на выходе у вас получается 100 записей.</p>
5 <p>Ну-ну, не спешите огорчаться! Конечно, сервер и оптимизатор умные, но иногда случаются проколы при использовании соединений с таблицами с других серверов.</p>
5 <p>Ну-ну, не спешите огорчаться! Конечно, сервер и оптимизатор умные, но иногда случаются проколы при использовании соединений с таблицами с других серверов.</p>
6 <h2>Что же делать?</h2>
6 <h2>Что же делать?</h2>
7 <p><strong>Вызов хранимой процедуры</strong>Вы создаёте хранимую процедуру на сервере с удалённой таблицей и передаёте туда фильтр, который поможет вам уменьшить количество записей в результатах. Иногда, к сожалению, вам нужен именно<strong>JOIN</strong>с местной таблицей, но в 90% случаях это закроет проблему.</p>
7 <p><strong>Вызов хранимой процедуры</strong>Вы создаёте хранимую процедуру на сервере с удалённой таблицей и передаёте туда фильтр, который поможет вам уменьшить количество записей в результатах. Иногда, к сожалению, вам нужен именно<strong>JOIN</strong>с местной таблицей, но в 90% случаях это закроет проблему.</p>
8 <p>Затем вы делаете на местном сервере вызов процедуры с удалённого сервера, а результаты сохраняете во временную таблицу. Далее вы делаете<strong>JOIN</strong>с местными таблицами и получаете результат.</p>
8 <p>Затем вы делаете на местном сервере вызов процедуры с удалённого сервера, а результаты сохраняете во временную таблицу. Далее вы делаете<strong>JOIN</strong>с местными таблицами и получаете результат.</p>
9 <p><strong>Репликация</strong>Если таблица на удалённом сервере не очень большая (тут всё относительно ваших объёмов и возможностей), а данные из неё вам нужны очень часто, и меняются они при этом очень редко, то присмотритесь к<strong>репликации</strong>. Да, это некоторое дублирование, но если чтений много, это поможет сэкономить вам много ресурсов, даже несмотря на затраченное дополнительное место на диске.</p>
9 <p><strong>Репликация</strong>Если таблица на удалённом сервере не очень большая (тут всё относительно ваших объёмов и возможностей), а данные из неё вам нужны очень часто, и меняются они при этом очень редко, то присмотритесь к<strong>репликации</strong>. Да, это некоторое дублирование, но если чтений много, это поможет сэкономить вам много ресурсов, даже несмотря на затраченное дополнительное место на диске.</p>
10 <p>Вы реплицируете нужную таблицу на местный сервер, все изменения будут доставляться на него автоматически. На местном сервере уже работаете с копией таблицы и можете выбирать оттуда данные, это будет быстрее и эффективнее удалённого вызова.</p>
10 <p>Вы реплицируете нужную таблицу на местный сервер, все изменения будут доставляться на него автоматически. На местном сервере уже работаете с копией таблицы и можете выбирать оттуда данные, это будет быстрее и эффективнее удалённого вызова.</p>
11 <h2>Вывод</h2>
11 <h2>Вывод</h2>
12 <p><strong>LinkedServer</strong>- прекрасный механизм, который упрощает жизнь разработчику, но его, как и многое другое, нужно использовать в меру, иначе ваша БД окажется опутанной сетью из связанных между серверами вызовов, и вы потеряете всю ценность разделения БД на разные сервера.</p>
12 <p><strong>LinkedServer</strong>- прекрасный механизм, который упрощает жизнь разработчику, но его, как и многое другое, нужно использовать в меру, иначе ваша БД окажется опутанной сетью из связанных между серверами вызовов, и вы потеряете всю ценность разделения БД на разные сервера.</p>
13 <p><em>А как вы используете LinkedServer? Пишите в комментариях!</em></p>
13 <p><em>А как вы используете LinkedServer? Пишите в комментариях!</em></p>
14  
14