Вопросы производительности кросс-хранимых процедур - PullRequest
2 голосов
/ 11 февраля 2009

В моем проекте у меня есть две отдельные БД на одном сервере. БД самодостаточны, за исключением трех столбцов в БД "B", к которым необходимо обращаться в БД "A".

Существуют ли соображения производительности, если бы у меня был сохраненный процесс в A, который напрямую обращался к трем столбцам из B?

В настоящее время мы выполняем ночное задание для импорта необходимых данных из таблицы B в таблицу A, чтобы сохраненный процесс не выходил за рамки A.

Это лучший метод?

Являются ли кроссы, хранящиеся в разных БД, в соответствии с рекомендациями?

Ответы [ 5 ]

5 голосов
/ 11 февраля 2009

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

4 голосов
/ 11 февраля 2009

Для уточнения комментариев других авторов.

Не существует "прямого" негативного влияния на производительность при использовании кросс-доступа к базе данных через хранимые процедуры. Производительность будет определяться базовой архитектурой отдельных баз данных, то есть доступными индексами, физическими местами хранения и т. Д.

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

2 голосов
/ 11 февраля 2009

Да, то, что вы сейчас делаете, то есть репликация, - это "правильная" вещь, которую нужно сделать.

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

Доступ к другой базе данных напрямую связывает базы данных - они ДОЛЖНЫ существовать на одном сервере всегда. Вы можете столкнуться с проблемами пропускной способности, используя связанные серверы и выполняя процедуру по требованию.

Репликация дает вам гораздо больше гибкости.

2 голосов
/ 11 февраля 2009

Все зависит от данных, на которые вы ссылаетесь, и от того, настроены ли индексы для поддержки этого прямого доступа. Лучшее, что я могу вам сказать, - это создать запрос, запустить его и посмотреть, достаточно ли высока производительность.

Если производительность неудовлетворительная, выполните запрос еще раз, и ваш инструмент управления создаст план выполнения, чтобы вы могли определить узкое место.

1 голос
/ 11 февраля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...