Будет ли снижаться производительность приложения при увеличении количества наборов записей в SQL? - PullRequest
0 голосов
/ 27 декабря 2011

У меня есть сценарий, когда sp возвращает около 30 наборов записей.Если я уменьшу количество наборов записей, мне придется написать много циклов в C #, чтобы извлечь данные и поместить их в правильные сегменты.Выгодно ли сократить количество наборов записей в SQL и увеличить циклы и сложность кода в C #?

Ответы [ 4 ]

1 голос
/ 27 декабря 2011

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

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

Однако я считаю, что общее влияние на базу данных и приложение, особенно с точки зрения потребления памяти, будет более значительным при использовании подхода с 30 наборами записей. При таком подходе что-то (либо SQL Server, либо ваше приложение) должно где-то хранить извлеченные данные, пока код приложения обрабатывает их. Если вы используете подход sp, то при подходе sp данные, которые хранятся для обработки в любой заданной точке обработки, обычно будут существенно меньше.

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

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

1 голос
/ 27 декабря 2011

Это зависит от многих факторов, таких как

  • Пропускная способность сети и задержка между веб-сервером и сервером sqlserver
  • Тип и объем запрашиваемых данных

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

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

0 голосов
/ 27 декабря 2011

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

Добавление дополнительных обходов в вашу базу данных обычно снижает производительность.Но вы никогда не узнаете, пока не попробуете (или не сделаете полный обзор кода).

0 голосов
/ 27 декабря 2011

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

...