Являются ли кросс-базы данных дорогими в SQL Server?


15

Являются ли кросс-базы данных дорогими в SQL Server? Все базы данных находятся в одном экземпляре.


3
Я никогда не нашел никаких доказательств того, что они есть, нет. Единственное исключение, о котором я мог даже подумать (но не проверял): (а) что оптимизатор не может извлечь выгоду из отношений, которые не могут быть явными (например, он может извлечь пользу из определений внешнего ключа, которые не могут существовать между -database) или (b) существуют проблемы со статистикой, являющиеся проблемой для связанных серверов, но я предполагаю, что могут быть случаи, когда даже во всей базе данных пользователь, выполняющий запрос, не может видеть статистику. Не знаю, является ли (b) реальным или нет - не тестировали, просто знайте, что это может быть серьезной проблемой на разных серверах.
Аарон Бертран

2
Я с @AaronBertrand на этом, я не видел ничего, чтобы однозначно сказать, что есть огромный успех. Единственное, что я мог бы подумать , добавить что-то в уравнение - это, возможно, какая-то форма операций аутентификации, но я сомневаюсь, что это будет существенно. Это только я думаю вслух, я не уверен. Лучше всего будет настроить автоматический тест / эталон с кросс-базой данных, затем с той же базой данных запросов и выполнить этот тест тысячи раз. Получите среднее, максимальное и т. Д. И примите решение на основе этого.
Томас Стрингер

1
@thomas, не могли бы вы увидеть разницу, посмотрев на реальные планы запросов?
Макс Вернон

@ Джонатан: определение «дорогой» по отношению к альтернативам. Итак, что вы пытаетесь сделать и что вы выбираете между? Без дополнительной информации вполне возможно получить ответ, который кажется правильным на этот вопрос по номинальной стоимости, но в то же время абсолютно не подходит для вашей ситуации. Все имеет в стоимость, но стоимость может быть дешевой или дорогой в зависимости от того, что вы сравниваете его. А затраты на запросы (т.
Е.

Я хотел бы узнать стоимость по сравнению с запросом в той же таблице.
Джонатан Аллен

Ответы:


6

Извините, у меня недостаточно репутации, чтобы комментировать вопрос, но из моего опыта, если клиентское приложение инициирует транзакцию для запроса, использующего перекрестные объединения баз данных, это приведет к распределению транзакции и получит накладные расходы на транзакцию DTC. ,

Накладные расходы на DTC в этом случае могут рассматриваться как отрицательные для производительности. Как правило, разница будет незначительной, хотя Microsoft описывает транзакции DTC так:

Распределенные транзакции обычно потребляют значительные системные ресурсы

Продвижение транзакций

... что может указывать на снижение производительности, если ваш сервер не может предложить необходимые ему ресурсы.

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

Как отмечает Томас Стрингер в своем комментарии, при аутентификации будут дополнительные издержки, хотя я думаю, что это будет зависеть от SID, и там будут минимальные издержки, если вам не придется использовать отдельные учетные данные для доступа к другой базе данных.

Если были различия в настройках базы данных, которые привели к дополнительным издержкам в объединении, что могло повлиять больше, чем предыдущие предложения - например, сопоставление базы данных Сравнение базы данных может проявляться как функциональная разница, а не просто разница в производительности.

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


1
If a local transaction spans two or more databases on the same instance of the Database Engine, the instance uses an internal two-phase commit to commit all of the databases involved in the transaction.- Если вы обнаружили иное, сообщите об ошибке в Connect с четкими шагами воспроизведения.
Джон Зигель

1
Статья для продвижения транзакции предназначена для транзакций CLR.
stacylaray

-2

В SQL Server 2014 оптимизированные для памяти таблицы не поддерживают транзакции между базами данных. Вы не можете получить доступ к другой базе данных из той же транзакции или того же запроса, который также обращается к оптимизированной для памяти таблице. Вы не можете легко скопировать данные из таблицы в одной базе данных в таблицу с оптимизированной памятью в другой базе данных. http://msdn.microsoft.com/en-us/library/dn584627(v=sql.120).aspx Распределенные транзакции и транзакции между базами данных не поддерживаются для зеркального отображения базы данных / AOAG. http://technet.microsoft.com/en-us/library/hh393530.aspx . Если вы собираетесь использовать цепочку владения, помните о рисках безопасности http://msdn.microsoft.com/en-us/library/ms188676.aspx


Это относится только к сценариям, которые «охватывают несколько экземпляров или серверов». В данном случае речь идет об одном экземпляре с несколькими базами данных.
Джонатан Аллен

1
Мой плохой ... Я пропустил часть о том, что это было в том же случае
stacylaray
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.