набор записей firehose против отключенного набора записей? - PullRequest
0 голосов
/ 30 октября 2019

Когда просто запрашивают данные (без необходимости посредничества, перемещения предыдущего, свойства recordcount ...), обычно считается, что набор записей пожарного шланга (CursorType = adForwardOnly, CursorLocation = adUseServer, LockType = adLockReadOnly) является наиболее эффективным способомвозвращать данные из Microsoft SQL Server (например, Советы по настройке производительности для создания приложений Visual Basic с использованием SQL Server ;

Однако я также обнаружил, что многие из них сформулированы (включая ту же статью в предыдущей ссылке)упоминается что-то вроде:

SQL Server can only open one ForwardOnly cursor per connection. 
The more connections you create, the greater the stress on SQL Server,
and performance and scalability suffer.
...
To avoid this problem, don’t use a ForwardOnly recordset.

Вот еще одна похожая статья: Q258697: ИНФОРМАЦИЯ: Single SQL Connection поддерживает только один активный пожарный шланг

Также есть статья: Серверные курсоры и типы курсоров ADO с упоминанием того, что

One of the unexpected downside of server-side cursors is temporary tables.
...
This generated significant contention in tempdb
and was forcing the system to single-thread
through object creation in tempdb.

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

А потом я нашел несколько статей (например, Как создать отключенные наборы записей ADO и Использование отключенных наборов записей ) упоминание о концепции «отключенный набор записей» (CursorLocation = adUseClient, ActiveConnection = Nothing).

Хотя я нашел похожий вопрос, но все еще кажется недостаточным: [* набор записей, используя

PS: я тестировал код в этой статье:

rs.CursorLocation = adUseClient
rs.Open cmd, , adOpenForwardOnly, adLockReadOnly

, хотя CursorType был назначен для adOpenForwardOnly, но когда CursorLocaton назначен для adUseClient,CursorType созданного набора записей изменится на adOpenStatic (точно так же как официальный документ Microsoft: Свойство CursorType (ADO) :

If a provider does not support the requested cursor type,
it may return another cursor type.)

Хотя набор записей пожарного шланга обычно считается наиболее эффективным способомчтобы возвращать данные из Microsoft SQL Server для простых запросов, но для 3-уровневой системы ERP (доступ к Microsoft SQL Server через ADO 2.5), безусловно, может быть несколько пользователей, получающих доступ к Misrosoft SQL Server через объекты среднего уровня. Похоже, что доступ к данным с набором записей пожарных шлангов из Microsoft SQL Server привел бы к увеличению числа подключений и увеличению потребления ресурсов на DBServer.

Поэтому мой вопрос:

В этой ситуации может ли отключенный набор записейна самом деле быть лучше, чем набор записей пожарного шланга?

...