Чи дорогі запити міжбазових даних у SQL Server дорогі?


15

Чи дорогі запити міжбазових даних у SQL Server дорогі? Всі бази даних знаходяться в одному екземплярі.


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

2
Я з цим @AaronBertrand на цьому, я не бачив нічого, щоб остаточно сказати, що це величезний хіт. Єдине , що я міг думати , що щось то додати до рівняння б , можливо , деякі форми операцій аутентифікації, але я сумніваюся , що це буде значним. Ось тільки я думаю вголос, я не впевнений. Найкраще тут було б встановити автоматизований тест / тест з крос-баз даних, потім з тією ж міжбазкою запитів і виконати цей тест тисячі разів. Отримайте середній, максимум тощо, і приймайте своє рішення, виходячи з цього.
Томас Стрінгер

1
@thomas Ви могли остаточно побачити різницю, переглянувши фактичні плани запитів?
Макс Вернон

@Jonathan: визначення "дорогого" відносно альтернатив. Отже, що ви намагаєтеся зробити і між чим ви вирішите? Без додаткової інформації цілком можна отримати відповідь, яка видається правильною на це питання за номіналом, але в той же час абсолютно неправильна для вашої ситуації. Все має в вартість, але вартість може бути дешевою або дорогий в залежності від того, що ви порівнюєте його. І витрати на запити (тобто час, суперечки тощо) потрібно зважити на витрати на обслуговування, витрати на обладнання тощо.
Соломон Руцький,

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

Відповіді:


6

Вибачте, у мене недостатньо репутації, щоб коментувати це питання, але, з мого досвіду, якщо клієнтська програма піднімає транзакцію для запиту, який використовує перехресні бази даних, тоді це сприятиме розподілу транзакції і матиме накладні витрати транзакції DTC. .

Накладні витрати DTC в цьому випадку можуть розглядатися як негативні показники. Як правило, різниця була б незначною, хоча Microsoft описує транзакції DTC як такі:

Розподілені транзакції зазвичай споживають значні системні ресурси

Просування транзакцій

... що може запропонувати зниження продуктивності, якщо ваш сервер не може запропонувати необхідні ресурси.

Для уточнення, вищенаведена стаття описує локальні транзакції, які просуваються при впровадженні віддалених систем, але я бачив, як це сталося для транзакцій на тому ж сервері, коли використовуються запити міжбазових баз даних.

Як зазначає Томас Стрінджер у своєму коментарі, додаткові накладні витрати на аутентифікацію, хоча, я думаю, оскільки це буде SID-орієнтація, там буде мінімально накладні витрати, якщо вам не доведеться використовувати окремі облікові дані для доступу до іншої бази даних.

Якщо були б різниці в налаштуваннях бази даних, це призвело до додаткових накладних витрат при з'єднанні, що може вплинути більше, ніж попередні пропозиції - наприклад, зіставлення баз даних. Зіставлення баз даних може проявлятись як функціональна різниця, а не лише різниця в продуктивності.

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


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.- Якщо ви виявили інше, повідомте про помилку підключення підключення з чіткими кроками відтворення.
Джон Сейгель

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.