Это было, скорее всего, вызвано запросом, желающим прочитать больше страниц в пул буферов и пул буферов, захватив больше памяти для размещения этого. Это - то, как SQL Server, как предполагается, работает. Если поле испытает давление памяти, то оно попросит, чтобы SQL Server бросил некоторую память, которую оно сделает. Клиент не должен быть заинтересован.
Можно использовать DMV sys.dm_os_buffer_descriptors
видеть, сколько из памяти пула буферов используется который база данных. Этот отрывок скажет Вам, сколько чистый и грязный (измененный начиная с последней контрольной точки или читают из диска) страницы от каждой базы данных находятся в пуле буферов. Можно изменить далее.
SELECT
(CASE WHEN ([is_modified] = 1) THEN 'Dirty' ELSE 'Clean' END) AS 'Page State',
(CASE WHEN ([database_id] = 32767) THEN 'Resource Database' ELSE DB_NAME (database_id) END) AS 'Database Name',
COUNT (*) AS 'Page Count'
FROM sys.dm_os_buffer_descriptors
GROUP BY [database_id], [is_modified]
ORDER BY [database_id], [is_modified];
GO
Я объясняю это немного больше в этом сообщении в блоге В Механизме устройства хранения данных: что находится в пуле буферов?
Вы могли также контроль КБ 907877 (Как использовать команду DBCC MEMORYSTATUS для использования памяти монитора на SQL Server 2005), который даст Вам общее представление о разбивке остальной части использования памяти SQL Server (но не для каждой базы данных).
Надеюсь, это поможет!
Если у Вас есть SPID рассматриваемого процесса (от использования чего-то как Монитор Действия или sp_who
или sp_who2
), затем можно выполнить этот запрос на сервере:
SELECT *
FROM sys.dm_exec_connections
WHERE session_id = (SPID);
замена (SPID) с фактическим SPID клиентского процесса. Посмотрите на net_transport
столбец, который скажет Вам, какой протокол, который процесс использует для общения с SQL Server. Если все, чем Вы интересуетесь, является протоколом, просто используйте SELECT net_transport
вместо SELECT *
.
Вы могли также отфильтровать свой запрос другими столбцами, такими как client_net_address, который, для соединений TCP, будет IP-адресом Вашей клиентской машины. Вы могли отправить этот запрос через интерфейсы ADO.NET. SQL SMO мог бы также иметь что-то.
Вот ссылочная страница MSDN для sys.dm_exec_connections. Обратите внимание, что Вы должны будете ПРОСМОТРЕТЬ права СОСТОЯНИЯ СЕРВЕРА на сервере для наблюдения больше, чем просто текущая сессия.
Можно также указать транспортный протокол в server
директива Вашей строки подключения с помощью следующего синтаксиса:
server=[protocol]:servername
Примеры:
server=tcp:mysqlinstance1 (for TCP/IP)
server=np:mysqlinstance1 (for named pipes)
server=np:\\mysqlinstance1\pipe\pipename (for a specific pipe)
Как примечание стороны: TCP/IP или именованные каналы являются протоколом транспортного уровня, и поток табличных данных является коммуникацией (прикладной уровень) протокол в SQL Server.